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;