動的テーブルを作成する

動的テーブルは従来のテーブルと同様に作成およびドロップできますが、いくつかの相違点と制限があります。さらに、動的テーブルクエリを構成する基になるテーブル、ビュー、その他の動的テーブルを変更すると、動作が変更されたり、既存の動的テーブルが使用できなくなったりする場合があります。次のセクションでは、動的テーブルの作成とドロップ、またいくつかの制限や懸念事項について説明します。

タスク

説明

動的テーブルを作成する

動的テーブルの作成に必要な 権限 を含む、動的テーブルの作成。

動的テーブルをドロップする

動的テーブルのドロップ。

動的テーブルで現在サポートされていないクエリコンストラクト

サポートされていないクエリコンストラクト。

動的テーブルでサポートされる非決定性関数

サポートされる非決定性関数。

動的テーブルおよび変更追跡

動的テーブルの作成および変更追跡について

動的テーブルを作成する

動的テーブルを作成するには、 CREATE DYNAMIC TABLE コマンドを使用し、使用するクエリ、データのターゲットラグ、また リフレッシュ を実行するために使用するウェアハウスを指定します。

たとえば、 staging_table という名前のテーブルから、 product_idproduct_name の列を含む product という名前の動的テーブルを作成し、次を決定するとします。

  • product テーブル内のデータは、 staging_table 内のデータより最大で20分の遅延に設定します。

  • リフレッシュ(増分およびフル) に必要なコンピューティングリソースには、ウェアハウス mywh を使用します。

この動的テーブルを作成するには、次の CREATE DYNAMIC TABLE SQL ステートメントを実行します。

CREATE OR REPLACE DYNAMIC TABLE product
  TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

マテリアライズドビューの場合と同様に、動的テーブルの列は、動的テーブルの作成に使用される SELECT ステートメントで指定された列によって決定されます。式である列については、 SELECT ステートメントで列のエイリアスを指定する必要があります。

動的テーブルクエリで使用されるすべてのオブジェクトで変更追跡が有効になっていることを確認する必要があります。追加の詳細については、このトピック内の 動的テーブルおよび変更追跡 をご参照ください。

注釈

クエリが他の動的テーブルに依存している場合は、ターゲットラグタイムの選択に関するガイドラインとして、 動的テーブルが他の動的テーブルに依存している場合のデータのリフレッシュ方法 をご参照ください。

また、動的テーブルの最小 TARGET_LAG は1分であることに注意してください。

動的テーブルの作成に必要な権限

動的テーブルを作成するには、以下の権限が必要です。

  • テーブルの作成を予定しているデータベースとスキーマに対する USAGE。

  • テーブルの作成を予定しているスキーマに対する CREATE DYNAMIC TABLE。

  • 動的テーブルのクエリを予定している既存のテーブルとビューに対する SELECT。

  • テーブルのリフレッシュに使用する予定のウェアハウスに対する USAGE。

動的テーブルをクエリしたり、別の動的テーブルをクエリする動的テーブルを作成したりするには、以下の権限が必要です。

  • 動的テーブルに対する SELECT。

動的テーブルをドロップする

動的テーブルをドロップするには、 Snowsight または SQL コマンドのいずれかを使用します。

Snowsight
  1. Snowsightで、動的テーブルの詳細ページを開きます(手順)。

  2. ページの右上隅にある More メニューで、 Drop を選択します。

SQL
  • DROP DYNAMIC TABLE コマンドを使用します。

    たとえば、 product という名前の動的テーブルをドロップするには、

DROP DYNAMIC TABLE product;
Copy

ベーステーブルの列に対する変更の影響について

ベーステーブル、ビュー、および基になる動的テーブルの列は、時間の経過とともに変更される可能性があります。動的テーブル自体に影響を与える変更もあれば、影響が限定的かまったくない変更もあります。

動的テーブルに関連付けられた基になるオブジェクトが変更されると、以下の動作が適用されます。

変更

影響

  • 新しい列を追加する。

  • 既存の未使用の列を削除する。

なし。ベーステーブルに新しい列が追加されたり、未使用の列が削除されたりしても、何もアクションは発生せず、リフレッシュは以前と同様に継続されます。

  • 基になるベーステーブルが、同一の列名と型で再作成される。

  • 基になるベーステーブル列が、同一の名前と型で再作成される。

フルリフレッシュ/再初期化: 次のリフレッシュサイクルの間に、動的テーブルに不正確なデータや古いデータがないことを確実にするためにフルリフレッシュが実行されます。

  • 動的テーブルで使用される基になる列やその他の要素で、名前変更またはその他の方法による変更がある。

動的テーブルの状態は FAILING に変わります。変更に対応するために、動的テーブルを再作成する必要があります。動的なテーブルの状態に関する詳細については、 動的テーブルの状態 をご参照ください。

動的テーブルの制限とサポートされる関数

動的テーブルが従来のテーブルと異なるのは、特定のクエリコンストラクトや関数が許可されていないことです。また、検索最適化、クラスタリング、Query Acceleration Service(QAS)はサポートされていません。次のセクションでは、これらの制限について説明します。

動的テーブルで現在サポートされていないクエリコンストラクト

現在、動的テーブルのクエリでは以下のコンストラクトはサポートされていません。動的テーブルのクエリでこれらを指定すると、エラーが発生します。

  • 外部関数

  • 非決定性関数(動的テーブルでサポートされる非決定性関数 にリストされているものを除く)

  • 外部テーブル、ストリーム、およびマテリアライズドビューを含むソース

  • 動的テーブルやその他のサポートされていないオブジェクトのビュー

動的テーブルでサポートされる非決定性関数

動的テーブルでは、以下の非決定性関数がサポートされています。これらの関数はフルリフレッシュでのみサポートされていることに注意してください。

動的テーブルおよび変更追跡

動的テーブルは、基になるデータベースオブジェクトが変更されると更新されます。変更追跡は、動的テーブルで使用される基になるオブジェクトすべてで有効にする必要があります。

Snowflakeは、動的テーブルが作成されると、基になるオブジェクトすべての変更追跡の有効化を試行します。しかし、動的テーブルを作成するユーザーには、基になるオブジェクトすべての変更追跡を有効化するために必要な権限がない可能性があります。

動的テーブルをリフレッシュする際のエラーを回避するには、 SHOW VIEWSSHOW TABLES などのコマンドを使用し、 CHANGE_TRACKING 列を調べて、特定のデータベースオブジェクトで変更追跡が有効になっているかどうかを確認します。

ALTER TABLEALTER VIEW、および関連文書を使用して、特定のデータベースオブジェクトの変更追跡を有効にします。