CREATE DYNAMIC TABLE¶
指定されたクエリに基づいて、 動的テーブル を作成します。
このトピックの内容:
構文¶
CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
[ ( <column_list> ) ]
TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
WAREHOUSE = <warehouse_name>
REFRESH_MODE = { AUTO | FULL | INCREMENTAL }
INITIALIZE = { ON_CREATE | ON_SCHEDULE }
AS <query>
[ COMMENT = '<string_literal>' ]
バリアント構文¶
CREATE DYNAMIC TABLE ... CLONE¶
データを実際にコピーすることなく、同じ列定義を使用して、ソースの動的テーブルのすべての既存データを含む新しい動的テーブルを作成します。このバリアントは、過去の特定のポイントで動的テーブルをクローンするためにも使用できます。 クローニングに関する考慮事項 をご参照ください。
CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
CLONE <source_dynamic_table>
[ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
[
TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
WAREHOUSE = <warehouse_name>
]
クローンの詳細については、 CREATE <オブジェクト> ... CLONE をご参照ください。
必須パラメーター¶
name
動的テーブルの識別子(つまり、名前)を指定します。動的テーブルが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれている場合を除き、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }
動的テーブルのラグを指定します。
'num seconds | minutes | hours | days'
動的テーブルのコンテンツがベーステーブルの更新から遅れる最大時間を指定します。
例:
動的テーブルのデータが5分以上遅れないようにするには、
5 minutes
を指定します。動的テーブルのデータが5時間以上遅れないようにするには、
5 hours
を指定します。
最小値は1分です。動的テーブルAが別の動的テーブルBに依存している場合、Aの最小ラグはBのラグ以上にする必要があります。
DOWNSTREAM
動的テーブルが依存する動的テーブルのリフレッシュ時にのみ、動的テーブルをリフレッシュするように指定します。
WAREHOUSE = warehouse_name
動的テーブルをリフレッシュするためのコンピューティングリソースを提供するウェアハウスの名前を指定します。
動的テーブルを作成するには、このウェアハウスに対する USAGE 権限が必要です。
REFRESH_MODE = { AUTO | FULL | INCREMENTAL }
動的テーブルの 更新タイプ を指定します。このプロパティは、動的テーブルの作成後に変更することはできません。プロパティを変更するには、 CREATE OR REPLACE DYNAMIC TABLE コマンドで動的テーブルを複製します。
AUTO
デフォルトで動的テーブルの増分更新を強制します。CREATE DYNAMIC TABLE ステートメントが増分更新モードをサポートしていない場合、動的テーブルは自動的にフル更新モードで作成されます。
更新モードは SHOW DYNAMIC TABLES ステートメントを使用して確認できます。
refresh_mode
列は使用中の更新モードを表示し、text
列はユーザーが指定したモードを表示します。FULL
動的テーブルが増分更新できる場合でも、動的テーブルのフル更新を強制します。
INCREMENTAL
動的テーブルの増分更新を強制します。動的テーブルの基となるクエリが増分更新を実行できない場合、動的テーブルの作成は失敗し、エラーメッセージが表示されます。
デフォルト:
AUTO
INITIALIZE
動的テーブルの 初期更新 の動作を指定します。このプロパティは、動的テーブルの作成後に変更することはできません。プロパティを変更するには、 CREATE OR REPLACE DYNAMIC TABLE コマンドで動的テーブルを複製します。
ON_CREATE
作成時に動的テーブルを同時に更新します。
ON_SCHEDULE
次回更新時に動的テーブルを更新します。
更新スケジュールプロセスが実行される際に、動的テーブルにデータが入力されます。動的テーブルの作成時にはデータは入力されません。
SELECT * FROM DYNAMIC TABLE
を使用してテーブルをクエリしようとすると、最初のスケジュールされた更新がまだ発生していないため、次のエラーが表示される可能性があります。
デフォルト:
ON_CREATE
AS query
動的テーブルの結果を含むクエリを指定します。
オプションのパラメーター¶
COMMENT = 'string_literal'
動的テーブルのコメントを指定します。
デフォルト:値なし。
column_list
列の名前を変更したり、動的テーブルの列にコメントを追加する場合は、列名と(必要に応じて)列に関するコメントを指定する列リストを含めます。列のデータ型を指定する必要はありません。
動的テーブルの列のいずれかが式(例えば、単純な列名だけでない列)に基づいている場合、動的テーブルの各列に列名を指定する必要があります。例えば、次の場合には列名が必要です。
CREATE DYNAMIC TABLE product (pre_tax_profit, taxes, after_tax_profit) TARGET_LAG = '20 minutes' WAREHOUSE = mywh AS SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate) FROM staging_table;
列ごとにオプションのコメントを指定できます。例:
CREATE DYNAMIC TABLE product (pre_tax_profit COMMENT 'revenue minus cost', taxes COMMENT 'assumes taxes are a fixed percentage of profit', after_tax_profit) TARGET_LAG = '20 minutes' WAREHOUSE = mywh AS SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate) FROM staging_table;
アクセス制御の要件¶
この SQL コマンドの実行に使用される ロール には、少なくとも次の 権限 が必要です。
権限 |
オブジェクト |
メモ |
---|---|---|
CREATE DYNAMIC TABLE |
動的テーブルの作成を予定のスキーマ。 |
|
SELECT |
新しい動的テーブルをクエリする予定のテーブル、ビュー、動的テーブル。 |
|
USAGE |
テーブルのリフレッシュに使用する予定のウェアハウス。 |
スキーマ内の任意のオブジェクトを操作するには、親データベースとスキーマに対する USAGE 権限も必要であることに注意してください。
指定された権限のセットを使用してカスタムロールを作成する手順については、 カスタムロールの作成 をご参照ください。
セキュリティ保護可能なオブジェクト に対して SQL アクションを実行するためのロールと権限付与に関する一般的な情報については、 アクセス制御の概要 をご参照ください。
使用上の注意¶
CREATE DYNAMIC TABLE コマンドを実行すると、現在使用中のロールが動的テーブルの所有者になります。このロールは、動的テーブルのリフレッシュをバックグラウンドで実行するために使用されます。
動的テーブルは、基になるデータベースオブジェクトが変更されると更新されます。変更追跡は、動的テーブルで使用される基になるオブジェクトすべてで有効にする必要があります。 動的テーブルおよび変更追跡 をご参照ください。
既存の動的テーブルを置き換えたい場合で、現在の定義を確認する必要がある場合は、 GET_DDL 関数を呼び出します。
Snowflakeサービスを使用する場合、お客様は、個人データ(ユーザーオブジェクト向け以外)、機密データ、輸出管理データ、またはその他の規制されたデータがメタデータとして入力されていないことを確認する必要があります。詳細については、 Snowflakeのメタデータフィールド をご参照ください。
例¶
product
という名前の動的テーブルを作成します。
CREATE OR REPLACE DYNAMIC TABLE product TARGET_LAG = '20 minutes' WAREHOUSE = mywh AS SELECT product_id, product_name FROM staging_table;
上記の例では、
動的テーブルは、
staging_table
テーブルのproduct_id
とproduct_name
列のクエリの結果を具体化します。つまり、動的テーブルのデータは、
staging_table
のデータより20分以上古くならないことが理想的です。自動リフレッシュプロセスは、ウェアハウス
mywh
のコンピューティングリソースを使用して、動的テーブルのデータをリフレッシュします。
指定されたタイムスタンプの日付と時刻に正確に存在する動的テーブルをクローンします。
CREATE DYNAMIC TABLE orders_clone_restore CLONE orders AT (TIMESTAMP => TO_TIMESTAMP_TZ('04/05/2013 01:02:03', 'mm/dd/yyyy hh24:mi:ss'));