CREATE TABLE ... FLOW (パイプライン)
ベータ版
この機能はベータ版です。
CREATE TABLE ... FLOW ステートメントを使用して、1つまたは複数のフローによって書き込まれる**パイプライン**内に**マネージドテーブル**を作成します。
構文
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
複数のソースを1つのマネージドテーブルに統合するには、CREATE FLOW (パイプライン) を使用して、それをターゲットとする複数のフローを宣言します:
CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query
パラメーター
-
table_name
作成するマネージドテーブルの名前。名前が修飾されていない場合、テーブルはパイプラインのターゲットスキーマで作成されます。その名前はすでにストリーミングテーブルに属していてはなりません。
-
table_specification
オプションで、列、その型、プロパティ、および説明を定義します。省略した場合、スキーマはフロークエリーから推論されます。
-
CONSTRAINT expectation_name EXPECT (expectation_expr) [ ON VIOLATION { FAIL UPDATE | DROP ROW } ]
マネージドテーブルにデータ品質のエクスペクテーションを追加します。これらのデータ品質のエクスペクテーションは、時間の経過と共に追跡し、パイプラインの event Logsを通じてアクセスできます。
FAIL UPDATEエクスペクテーションがあると、テーブルの作成時とテーブルの更新時の両方で処理が失敗します。DROP ROWエクスペクテーションでは、エクスペクテーションが満たされない場合、行全体が削除されます。パイプラインのエクスペクテーションを使用してデータ品質を管理するを参照してください。expectation_exprリテラル、テーブル内の列識別子、および決定論的な組み込み SQL 関数または演算子で構成できます(以下を除く)。- 集計関数
- 分析ウィンドウ関数
- ランキングウィンドウ関数
- テーブル値ジェネレーター関数
また、
expectation_exprにはサブクエリーを含めることはできません。 - 集計関数
-
PARTITIONED BY(col [, ...])
必要に応じて、カラムのサブセットによってテーブルをパーティション分割します。
-
クラスター BY 句
テーブルでリキッドクラスタリングをオプションで有効にします。
PARTITIONED BYとCLUSTER BYを組み合わせることはできません。 -
格納場所パス
テーブルデータのオプションの保存場所です。
-
COMMENT テーブルコメント
テーブルを記述する
STRINGリテラル。 -
TBLPROPERTIES句
オプションで1つ以上のユーザー定義テーブルプロパティを設定します。
-
WITH 行フィルター句
テーブルに行フィルター関数を追加します。そのテーブルに対する今後のクエリーでは、関数が
TRUEと評価される行のサブセットが返されます。 -
フロー挿入 [一度] 名前でクエリー
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 Catalog を使用したパイプラインでのみサポートされています。Hive metastore はサポートされていません。
- 既存のストリーミングテーブルの名前をマネージドテーブルに再利用することはできません。まずストリーミングテーブルを削除してください。そうしないと、ステートメントは
CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLEで失敗します。
例
-- Create a managed table populated by an inline append flow from a streaming table
CREATE TABLE output
FLOW INSERT BY NAME SELECT * FROM STREAM(samples.tpch.orders);
-- Create a managed table that ingests files with schema inference and evolution
CREATE TABLE raw_data
FLOW INSERT BY NAME
SELECT * FROM STREAM read_files('abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/base/path');
-- 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 liquid clustering
CREATE TABLE orders_clustered
CLUSTER BY (order_date, customer_id)
FLOW INSERT BY NAME
SELECT
o_orderkey AS order_id,
o_custkey AS customer_id,
o_orderdate AS order_date,
o_totalprice AS total_price
FROM STREAM(samples.tpch.orders);
-- 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 STREAM read_files('s3://bucket/path', format => 'json');