Delta Live Tables SQL 语言参考
本文提供了 Delta Live Tables SQL 编程接口的详细信息和示例。 有关完整的 API 规范,请参阅 SQL API 规范。
有关 Python API 的信息,请参阅Delta Live Tables Python 语言参考。
SQL 数据集
使用 CREATE LIVE VIEW 或 CREATE OR REFRESH LIVE TABLE 语法通过 SQL 创建视图或表。 你可以通过以下方式创建数据集:从外部数据源或管道中定义的数据集读取数据。 若要从内部数据集读取数据,请在数据集名称前追加 LIVE 关键字。 以下示例定义了两个不同的数据集:一个将 JSON 文件作为输入源的 taxi_raw 表,一个将 taxi_raw 表作为输入的 filtered_data 表:
CREATE OR REFRESH LIVE TABLE taxi_raw
AS SELECT * FROM json.`/databricks-datasets/nyctaxi/sample/json/`
CREATE OR REFRESH LIVE TABLE filtered_data
AS SELECT
...
FROM LIVE.taxi_raw
增量实时表会自动捕获管道中定义的数据集之间的依赖关系,并使用此依赖关系信息来确定执行更新时的执行顺序,以及在管道的事件日志中记录世系信息。
视图和表都具有以下可选属性:
COMMENT:此数据集的用户可读说明。- 使用预期强制实施的数据质量约束。
表还提供对其具体化的额外控制:
- 指定如何使用 对表进行分区。 可以使用分区来加快查询速度。
- 可以使用
TBLPROPERTIES来设置表属性。 有关更多详细信息,请参阅表属性。 - 使用
LOCATION设置来设置存储位置。 默认情况下,如果未设置LOCATION,表数据将存储在管道存储位置中。
有关表和视图属性的详细信息,请参阅 SQL API 规范。
使用 SET 为表或视图指定配置值,包括 Spark 配置。 在 SET 语句有权访问已定义的值之后,在笔记本中定义的任何表或视图。 对 SET 语句之后的任何表或视图执行 Spark 查询时,会使用通过 SET 语句指定的任何 Spark 配置。 若要在查询中读取配置值,请使用字符串内插语法 ${}。 下面的示例设置名为 startDate 的配置值,并在查询中使用该值:
SET startDate='2020-01-01';
CREATE OR REFRESH LIVE TABLE filtered
AS SELECT * FROM src
WHERE date > ${startDate}
若要指定多个配置值,请对每个值使用单独的 SET 语句。
若要从流式处理源(例如自动加载程序或内部数据集)读取数据,请定义 STREAMING LIVE 表:
CREATE OR REFRESH STREAMING LIVE TABLE customers_bronze
AS SELECT * FROM cloud_files("/databricks-datasets/retail-org/customers/", "csv")
CREATE OR REFRESH STREAMING LIVE TABLE customers_silver
AS SELECT * FROM STREAM(LIVE.customers_bronze)
有关流式处理数据的详细信息,请参阅流式数据处理。
SQL API 规范
注意
Delta Live Tables SQL 接口具有以下限制:
- 不支持标识和生成的列。
- 不支持
PIVOT子句。 在数据集定义中使用PIVOT子句会导致不确定的管道延迟。
创建表
CREATE OR REFRESH [TEMPORARY] { STREAMING LIVE TABLE | LIVE TABLE } table_name
[(
[
col_name1 col_type1 [ COMMENT col_comment1 ],
col_name2 col_type2 [ COMMENT col_comment2 ],
...
]
[
CONSTRAINT expectation_name_1 EXPECT (expectation_expr1) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
CONSTRAINT expectation_name_2 EXPECT (expectation_expr2) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
...
]
)]
[USING DELTA]
[PARTITIONED BY (col_name1, col_name2, ... )]
[LOCATION path]
[COMMENT table_comment]
[TBLPROPERTIES (key1 [ = ] val1, key2 [ = ] val2, ... )]
AS select_statement
创建视图
CREATE TEMPORARY [STREAMING] LIVE VIEW view_name
[(
[
col_name1 [ COMMENT col_comment1 ],
col_name2 [ COMMENT col_comment2 ],
...
]
[
CONSTRAINT expectation_name_1 EXPECT (expectation_expr1) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
CONSTRAINT expectation_name_2 EXPECT (expectation_expr2) [ON VIOLATION { FAIL UPDATE | DROP ROW }],
...
]
)]
[COMMENT view_comment]
AS select_statement
SQL 属性
| CREATE TABLE 或 VIEW |
|---|
| TEMPORARY 创建临时表。 此表中不保留任何元数据。 |
| STREAMING 创建一个表,该表将输入数据集作为流读取。 输入数据集必须是流式处理数据源,例如自动加载程序或 STREAMING LIVE 表。 |
| PARTITIONED BY 包含一列或多列的可选列表,用于对表进行分区。 |
| LOCATION 表数据的可选存储位置。 如果未设置,系统将默认为管道存储位置。 |
| COMMENT 表的可选说明。 |
| TBLPROPERTIES 表的表属性可选列表。 |
| select_statement 一个 Delta Live Tables 查询,用于定义表的数据集。 |
| CONSTRAINT 子句 |
|---|
| EXPECT expectation_name 定义数据质量约束 expectation_name。 如果未定义 ON VIOLATION 约束,则将违反约束的行添加到目标数据集。 |
| ON VIOLATION 对失败的行执行的可选操作: * FAIL UPDATE:立即停止管道执行。* DROP ROW:删除记录并继续处理。 |
表属性
除了 Delta Lake 支持的表属性外,还可以设置以下表属性。
| 表属性 |
|---|
| pipelines.autoOptimize.managed 默认: true启用或禁用此表的自动计划优化。 |
| pipelines.autoOptimize.zOrderCols 默认值:无 一个以逗号分隔的可选列名称列表,用于按 z 顺序对此表进行排序。 |
| pipelines.reset.allowed 默认: true控制是否允许对此表进行完全刷新。 |