CREATE TABLE ...FLOW (管道)

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 BYCLUSTER 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;

其他资源