CREATE TABLE ...流量(管線)

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

    管理表格的名稱。 若名稱未被限定,該資料表會在管線的目標結構中建立。 這個名字應該不應該已經屬於串流桌。

  • 表格規格

    可選擇性地定義欄位、其類型、屬性與描述。 若省略,則可從流程查詢推斷出該結構。

  • CONSTRAINT expectation_name EXPECT (expectation_expr) [ON VIOLATION {FAIL UPDATE | DROP ROW}]

    將資料品質期望加入管理表。 這些資料品質期望可隨時間追蹤,並可透過管線 的事件日誌存取。 FAIL UPDATE 的預期行為會導致在建立或重新整理數據表時,處理過程失敗。 如果不符合預期,整個資料列會因這個DROP ROW預期而被移除。 請參閱 使用管線期望來管理資料品質

    expectation_expr 可以由字面值、資料表中的欄位識別碼,以及確定性內建的 SQL 函式或運算子組成,但不包括:

    expectation_expr 也不得包含任何子查詢

  • 分隔為(col [, ...])

    可選擇性地將表格分割為欄位子集。

  • CLUSTER BY 子句

    可選擇性地啟用 桌面上的液體聚類 。 你無法將 和 PARTITIONED BY結合CLUSTER BY

  • 位置路徑

    表格資料的可選儲存位置。

  • 註解 table_comment

    一個 STRING 字面描述桌子的字面描述。

  • TBLPROPERTIES 子句

    可選擇性地設定一個或多個使用者自訂的表格屬性。

  • WITH ROW FILTER 條款

    將數據列篩選函式加入至數據表。 該表格的未來查詢會接收到函數值為 TRUE的子集列。

  • FLOW INSERT [once] 以名稱查詢

    定義一個附加流程,將結果 query 插入資料表,並 依名稱將結果欄位與資料表欄位匹配。 query 可以參考批次或串流來源。 ONCE 流程只執行一次(例如回填時),而不是每次更新都執行一次。 每個命名流程在每次管線更新中恰好處理一次輸入,與 FLOW INSERT BY NAME 串流表相同。

Limitations

  • 管理資料表不支援 CDC 變更流程。 AUTO CDC INTO(SQL)或apply_changes / apply_changes_from_snapshot(Python)對受管理資料表的測試失敗。MANAGED_TABLE_DOES_NOT_SUPPORT_CDC 使用 CREATE STREAMING TABLE (pipelines) 來管理 CDC 目標。
  • 管理資料表不支援 FLOW ... REPLACE WHERE。 僅支援 FLOW INSERT BY NAME
  • 管理資料表僅支援 Unity Catalog 的管線。 Hive 的 Metastore 不被支援。
  • 你不能在管理資料表中重複使用現有串流資料表的名稱。 先刪除串流表,否則該陳述句會失敗。CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLE

Examples

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

其他資源