CREATE DYNAMIC TABLE

指定されたクエリに基づいて、 動的テーブル を作成します。

こちらもご参照ください。

ALTER DYNAMIC TABLEDESCRIBE DYNAMIC TABLEDROP DYNAMIC TABLESHOW DYNAMIC TABLES

このトピックの内容:

構文

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>' ]
Copy

バリアント構文

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>
  ]
Copy

クローンの詳細については、 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;
Copy

列ごとにオプションのコメントを指定できます。例:

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

アクセス制御の要件

この 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;
Copy

上記の例では、

  • 動的テーブルは、 staging_table テーブルの product_idproduct_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'));
Copy