CREATE DYNAMIC TABLE

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

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

ALTER DYNAMIC TABLEDESCRIBE DYNAMIC TABLEDROP DYNAMIC TABLESHOW DYNAMIC TABLES

このトピックの内容:

構文

CREATE [ OR REPLACE ] DYNAMIC TABLE [ IF NOT EXISTS ] <name> (
    -- Column definition
    <col_name> <col_type>
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
      [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
      [ COMMENT '<string_literal>' ]

    -- Additional column definitions
    [ , <col_name> <col_type> [ ... ] ]

  )
  TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
  REFRESH_MODE = { AUTO | FULL | INCREMENTAL }
  INITIALIZE = { ON_CREATE | ON_SCHEDULE }
  WAREHOUSE = <warehouse_name>
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  AS <query>
Copy

バリアント構文

CREATE DYNAMIC TABLE ... CLONE

データを実際にコピーすることなく、同じ列定義を使用して、ソースの動的テーブルのすべての既存データを含む新しい動的テーブルを作成します。このバリアントは、過去の特定のポイントで動的テーブルをクローンするためにも使用できます。 クローニングに関する考慮事項 をご参照ください。

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  CLONE <source_dynamic_table>
        [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
  [
    COPY GRANTS
    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

動的テーブルが依存する動的テーブルのリフレッシュ時にのみ、動的テーブルをリフレッシュするように指定します。

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 を使用してテーブルをクエリしようとすると、最初のスケジュールされた更新がまだ発生していないため、次のエラーが表示される可能性があります。

Dynamic Table is not initialized. Please run a manual refresh or wait for a scheduled refresh before querying.

デフォルト: ON_CREATE

WAREHOUSE = warehouse_name

動的テーブルをリフレッシュするためのコンピューティングリソースを提供するウェアハウスの名前を指定します。

動的テーブルを作成するには、このウェアハウスに対する USAGE 権限が必要です。

AS query

動的テーブルの結果を含むクエリを指定します。

オプションのパラメーター

COMMENT 'string_literal'

列のコメントを指定します。

(コメントは列レベルまたはテーブルレベルで指定できることに注意してください。それぞれの構文は少し異なります。)

MASKING POLICY = policy_name

列に設定する マスキングポリシー を指定します。

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
DATA_RETENTION_TIME_IN_DAYS = integer

動的テーブルの履歴データに対してTime Travelアクション(SELECT、CLONE、)を実行できるように、動的テーブルの保持期間を指定します。Time Travelは動的テーブルでも従来のテーブルのときと同じように動作します。詳細については、 Time Travelの理解と使用 をご参照ください。

このオブジェクトレベルパラメーターの詳細な説明、およびオブジェクトパラメーターの詳細については、 パラメーター をご参照ください。

値:

  • Standard Edition: 0 または 1

  • Enterprise Edition:

    • 永続テーブルの場合は 090

    • 仮および一時テーブルの場合は 0 または 1

デフォルト:

  • Standard Edition: 1

  • Enterprise Edition(またはそれ以上): 1 (スキーマ、データベースまたはアカウントレベルで別のデフォルト値が指定されていない場合)

注釈

0 の値は、テーブルのTime Travelを効果的に無効化します。

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Snowflakeが動的テーブルのデータ保持期間を延長して、動的テーブル上のストリームが古くなるのを防ぐことができる最大日数を指定するオブジェクトパラメーター。

このパラメーターの詳細については、 MAX_DATA_EXTENSION_TIME_IN_DAYS をご参照ください。

COMMENT = 'string_literal'

動的テーブルのコメントを指定します。

(コメントは列レベルまたはテーブルレベルで指定できることに注意してください。それぞれの構文は少し異なります。)

デフォルト:値なし。

COPY GRANTS

CREATE DYNAMIC TABLE ... CLONE バリアントを使用して新しい動的テーブルを作成するときに、元の動的テーブルのアクセス権限を保持するように指定します。

このパラメーターは、既存の動的テーブルから新しい動的テーブルに、 OWNERSHIP を 除く すべての権限をコピーします。新しい動的テーブルは、スキーマ内のオブジェクトタイプに定義された将来の付与を継承 しません。デフォルトでは、 CREATE DYNAMIC TABLE ステートメントを実行するロールが新しい動的テーブルを所有します。

このパラメーターが CREATE DYNAMIC TABLE ステートメントに含まれていない場合、新しい動的テーブルは元の動的テーブルに付与された明示的なアクセス権限を継承 しません が、スキーマ内のオブジェクトタイプに定義された将来の付与は継承します。

注意:

  • データ共有 の場合、

    • 既存の動的テーブルが別のアカウントと共有されていた場合は、置換する動的テーブルも共有されます。

    • 既存の動的テーブルがデータコンシューマーとしてアカウントと共有され、アクセスがアカウント内の他のロールにさらに許可された場合(親データベースの GRANT IMPORTED PRIVILEGES を使用)、置換する動的テーブルにもアクセスが許可されます。

  • 置換する動的テーブルの SHOW GRANTS 出力には、コピーされた権限の被付与者が、ステートメントが実行されたときの現在のタイムスタンプとともに、 CREATE TABLE ステートメントを実行したロールとしてリストされます。

  • 置換する動的テーブルの SHOW GRANTS 出力には、コピーされた権限の被付与者が、ステートメントが実行されたときの現在のタイムスタンプとともに、 CREATE TABLE ステートメントを実行したロールとしてリストされます。

  • 許可をコピーする操作は、 CREATE DYNAMIC TABLE コマンドで(つまり、同じトランザクション内で)アトミックに発生します。

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

動的テーブルに設定する 行アクセスポリシー を指定します。

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

タグ の名前とタグ文字列の値を指定します。

タグ値は常に文字列であり、タグ値の最大文字数は256です。

ステートメントでのタグの指定に関する情報については、 オブジェクトおよび列のタグクォータ をご参照ください。

アクセス制御の要件

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