SnowflakeSQL命令、语法与操作符详解
立即解锁
发布时间: 2025-09-03 01:58:37 阅读量: 12 订阅数: 39 AIGC 


Snowflake权威指南精要
### Snowflake SQL 命令、语法与操作符详解
#### 1. SQL 命令类型
Snowflake 中的 SQL 命令主要分为 DML、TCL 和 DQL 三类:
- **DML 命令**:用于操作数据,传统的 DML 命令有 INSERT、MERGE、UPDATE 和 DELETE。此外,Snowflake 还提供了 COPY INTO <table> 和 COPY INTO <location> 用于数据加载和卸载。还有一些用于管理存储在 Snowflake 位置的文件的命令,如 VALIDATE、PUT、GET、LIST 和 REMOVE。
- **TCL 命令**:用于管理 Snowflake 中的事务块,像 BEGIN、COMMIT 和 ROLLBACK 可用于会话中的多语句事务。Snowflake 事务是一组读写 SQL 语句,作为一个单元一起处理。默认情况下,单独运行的 DML 语句在查询成功时会单独提交,若查询失败则会回滚。
- **DQL 命令**:用于检索满足 SELECT 命令指定条件的数据,SELECT 是唯一的 DQL 命令。Snowflake 的 SELECT 命令可在外部表上工作,还能查询历史数据,在某些情况下,由于 Snowflake 缓存,使用 SELECT 语句无需运行虚拟仓库即可返回结果。
#### 2. SQL 开发与管理
在 Snowflake 中进行 SQL 开发有多种方式:
- **Snowflake Worksheets**:基于浏览器的 SQL 编辑器,使用它进行 Snowflake SQL 开发无需安装或配置,可用于创建对象和查询数据。
- **SnowSQL**:基于 Python 的客户端,可从 Snowflake 客户端存储库下载,用于执行查询、DDL 和 DML 命令,常用于数据加载和卸载。Snowflake 为 Linux、macOS 和 Microsoft Windows 提供了 SnowSQL 版本,可作为交互式 shell 或批量模式运行。
- **第三方 SQL 工具**:有许多第三方 SQL 工具可用于在 Snowflake 应用中进行建模、开发和部署 SQL 代码,如 DataOps.live 和 SqlDBM 等,部分工具可通过 Snowflake Partner Connect 进行免费试用。
查看最近使用的客户端版本,可通过查询 Snowflake 的查询历史实现:
- 若使用新的 Snowsight 网络界面,点击 Activity → Query History,若未立即看到客户端驱动信息,点击 Columns 按钮并选择 Client Driver。
- 若使用经典控制台网络界面,点击 History 标签,在右上角点击 Column 按钮并选择 Client Driver,该界面的 Client Info 列会有图标指示客户端版本是否受支持。
对于支持在执行前发送 SQL 语句进行准备的驱动和连接器,Snowflake 会准备 DML 命令,并执行从这些驱动和连接器接收到的 SELECT 和 SHOW <objects> SQL 语句,其他类型的 SQL 语句将直接执行。
#### 3. 查询语法
Snowflake SQL 查询通常以 WITH 子句或 SELECT 命令开头:
- **WITH 子句**:可选子句,用于定义公共表表达式(CTEs),在 FROM 子句中引用。
- **SELECT 命令**:大多数查询以 SELECT 命令开头,后续语法按以下顺序评估:
| 查询语法 | 查询子句 | 说明 |
| --- | --- | --- |
| WITH | | 可选子句,位于 SELECT 语句主体之前 |
| TOP<n> | | 包含返回的最大行数,建议包含 ORDER BY |
| FROM | AT \| BEFORE, CHANGES, CONNECT BY, JOIN, MATCH_RECOGNIZE, PIVOT or UNPIVOT, SAMPLE or TABLESAMPLE_VALUE | 指定 SELECT 语句中使用的表、视图或表函数 |
| WHERE | | 指定匹配子集行的条件,可过滤 FROM 子句的结果,也可指定 UPDATE、MERGE 或 DELETE 操作的行 |
| GROUP BY | GROUP BY CUBE, GROUP BY GROUPING SETS, GROUP BY ROLLUP, HAVING | 对具有相同分组项表达式的行进行分组,并为结果组计算聚合函数,可为列名、SELECT 列表中的位置编号或一般表达式 |
| QUALIFY | | 过滤窗口函数的结果 |
| ORDER BY | | 指定 SELECT 列表结果表的行排序 |
| LIMIT/FETCH | | 限制返回的最大行数,建议包含 ORDER BY |
需要注意的是,QUALIFY 在窗口函数之后评估,其与窗口函数的工作方式类似于 HAVING 与聚合函数和 GROUP BY 子句的工作方式。
#### 4. 子查询、派生列和 CTE
- **子查询**:是另一个查询中的查询,可用于计算 SELECT 列表中返回的值、在 GROUP BY 子句中分组或在 WHERE 或 HAVING 子句中与其他表达式进行比较。Snowflake 子查询是嵌套的 SELECT 语句,支持在 CREATE TABLE AS、SELECT、INSERT、INSERT INTO、UPDATE 和 DELETE 等 SQL 语句中使用。
- **不相关子查询**:独立查询,返回的值不依赖于外部查询的任何列,只返回一个结果供外部查询使用一次。
- **相关子查询
0
0
复制全文
相关推荐









