Important
此功能在 Beta 版中。
使用 CREATE TABLE ... FLOW 语句在管道中创建托管表,由一个或多个 流编写。
Syntax
CREATE TABLE
table_name
[ table_specification ]
[ table_clauses ]
[ flow_clause ]
table_specification
( { column_identifier column_type [column_properties] } [, ...]
[ CONSTRAINT expectation_name EXPECT (expectation_expr)
[ ON VIOLATION { FAIL UPDATE | DROP ROW } ] ] [, ...] )
table_clauses
{ PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT table_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [ ... ]
flow_clause
FLOW INSERT [ONCE] BY NAME query
若要将多个源扇入一个托管表,请使用 CREATE FLOW(管道)声明多个针对它的流:
CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query
Parameters
table_name
要创建的托管表的名称。 如果名称不限定,则会在管道的目标架构中创建表。 该名称不得已属于流式处理表。
table_specification
(可选)定义列及其类型、属性和说明。 如果省略,则会从流查询推断架构。
CONSTRAINT UPDATE expectation_name EXPECT (expectation_expr) [ ON VIOLATION { FAIL | DROP ROW } ]
将数据质量期望添加到管理表中。 这些数据质量期望可以随时间追踪,并通过管道 的事件日志访问。 在创建表和刷新表时,
FAIL UPDATE期望会导致处理失败。 如果未满足DROP ROW预期,则该预期会导致整行被删除。 请参阅通过管道预期管理数据质量。expectation_expr可以由文字、表中的列标识符以及确定性内置的SQL函数或运算符组成,但不包括:此外,
expectation_expr不能包含任何子查询。PARTITIONED BY (col [, ...])
(可选)按列的子集对表进行分区。
CLUSTER BY 子句
(可选)在表上启用 液体聚类 分析。 不能合并
PARTITIONED BY和CLUSTER BY。LOCATION 路径
表数据的可选存储位置。
COMMENT table_comment
STRING描述表的文本。TBLPROPERTIES 子句
(可选)设置一个或多个用户定义的表属性。
WITH ROW FILTER 子句
向表中添加行筛选器函数。 该表的未来查询将接收函数计算结果为
TRUE的行的子集。FLOW INSERT [ONCE] BY NAME 查询
定义一个追加流,该流将结果
query插入表中, 按名称将结果列与表列匹配。query可以引用批处理或流式处理源。ONCE每次运行流(例如,回填),而不是每次更新。 每个命名流在每个管道更新中完全处理其输入一次,这与FLOW INSERT BY NAME流式处理表完全相同。
局限性
- 托管表不支持 CDC 更改流。
AUTO CDC INTO(SQL) 或apply_changes/apply_changes_from_snapshot(Python) 针对托管表失败,MANAGED_TABLE_DOES_NOT_SUPPORT_CDC对 CDC 目标使用(管道)。CREATE STREAMING TABLE - 托管表不支持
FLOW ... REPLACE WHERE。 仅支持FLOW INSERT BY NAME。 - 托管表仅在具有 Unity 目录的管道中受支持。 不支持 Hive 元存储。
- 不能重复使用托管表的现有流式处理表的名称。 首先删除流式处理表,否则语句将失败。
CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLE
示例
-- Create a managed table populated by an append flow
CREATE TABLE output
FLOW INSERT BY NAME SELECT id FROM LIVE.source;
-- Create a partitioned managed table from a streaming source
CREATE TABLE events
PARTITIONED BY (bucket)
FLOW INSERT BY NAME
SELECT id, bucket FROM STREAM read_files('abfss://my_path', format => 'json');
-- Create a managed table with a data quality expectation that drops violating rows
CREATE TABLE valid_events
(CONSTRAINT positive_id EXPECT (id > 0) ON VIOLATION DROP ROW)
FLOW INSERT BY NAME SELECT id FROM LIVE.source;