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] } [, ...] )
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
オプションで、列、その型、プロパティ、および説明を定義します。省略した場合、スキーマはフロークエリーから推論されます。
-
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 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');