動的テーブルの管理について

動的テーブルの管理には通常、次のタスクが含まれます。

タスク

説明

動的テーブルのリストと動的テーブルの情報の表示

動的テーブルのリストと表示。

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

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

動的テーブルのウェアハウスまたはターゲットラグの変更

動的テーブルの変更。

動的テーブルのリストと動的テーブルの情報の表示

データベース内の動的テーブルをリストし、それらの動的テーブルに関する情報を表示するには、 Snowsight または SQL コマンドのいずれかを使用します。

Snowsightを使用した動的テーブルのリストと詳細表示

スキーマ内の動的テーブルをリストし、動的テーブルの情報を表示します。

  1. Snowsight にサインインします。

  2. Data » Databases を選択します。

  3. データベースとスキーマを選択します。

  4. Schema Details で、 Dynamic Tables タブを選択します。

    Dynamic Tables を展開すると、データベースオブジェクトエクスプローラーで動的テーブルのリストを表示することもできます。

  5. 特定の動的テーブルに関する情報を表示するには、動的テーブルをデータベースオブジェクトエクスプローラーで選択するか、 Dynamic Tables タブにある動的テーブルのリストで選択します。

    このページのタブには、以下を含む テーブルの詳細ページ と同じ情報が表示されます。

    • 動的テーブルの定義と、動的テーブルを操作するために付与された権限

    • 動的テーブルの列に関する情報

    • 動的テーブルにあるデータの最大100行のプレビュー

    さらに、動的テーブルの詳細ページには、動的テーブルの情報を表示するためのタブがあります。

SQL コマンドを使用した動的テーブルのリストと詳細表示

  • 現在のデータベース(現在データベースが使用されていない場合はアカウント)内の動的テーブルをリストするには、 SHOW DYNAMIC TABLES コマンドを使用します。

    たとえば、データベース mydb 内とスキーマ myschema 内にある product_ で始まる名前の動的テーブルをリストするには、次の SQL ステートメントを実行します。

    SHOW DYNAMIC TABLES LIKE 'product_%' IN SCHEMA mydb.myschema;
    
    Copy

    コマンドの完全な構文については、 SHOW DYNAMIC TABLES をご参照ください。

  • 動的テーブルの列に関する情報を出力するには、 DESCRIBE DYNAMIC TABLE コマンドを使用します。

    たとえば、 product という名前の動的テーブルの列をリストアップするには、

    DESC DYNAMIC TABLE product;
    
    Copy

TABLES ビュー の結果には動的テーブルも含まれています。

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

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

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

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

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

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

DROP DYNAMIC TABLE product;
Copy

動的テーブルのデータ共有

動的テーブルは共有可能なオブジェクトです。動的テーブルを共有するには、データ共有プロバイダーが動的テーブルに対する権限を共有に付与します。これにより、データ共有コンシューマーがその権限を使用できるようになります。

動的テーブルとデータを共有する方法

プロバイダーは、直接共有またはリストを使用して、選択した動的テーブルを他のSnowflakeアカウントと共有できます。これにより、物理的に移動することなくアカウント間でデータを共有できます。このプロセスでは、プロバイダーのアカウント内にデータベースの 共有 を作成し、プロバイダーのアカウント内にデータベースアクセス権限を付与し、アクセス権限を付与して、共有に他のオブジェクトを追加します。詳細については、 Secure Data Sharingについて および Snowflakeでのデータ共有とコラボレーション をご参照ください。

データ共有プロバイダーは、次の例に示すように、単一の動的テーブルに SELECT 権限を付与するか、データベース内のすべての動的テーブルに SELECT 権限を付与するかを選択できます。

GRANT SELECT ON ALL DYNAMIC TABLES IN SCHEMA mydb.public TO SHARE share1;

GRANT SELECT ON DYNAMIC TABLE mydb.public TO SHARE share1;
Copy

詳細については、 GRANT <権限> ... TO SHARE をご参照ください。

共有データをインジェストするための動的テーブルの作成

共有データをインジェストするための動的テーブルを作成するには、次を実行します。

  1. 正しい権限 を持っていることを確認し、共有からデータベースを作成して権限を付与します。

    CREATE DATABASE shared_db FROM SHARE provider_account.share1;
    
    Copy
  2. 共有データベースに 権限を付与 します。

  3. 共有動的テーブルを作成します。

    CREATE OR REPLACE DYNAMIC TABLE <dt_name>
      TARGET_LAG = '1 day'
      WAREHOUSE = <warehouse_name>
      AS
        SELECT * FROM shared_db.public.mydb;
    
    Copy

    注釈

    変更追跡は、動的テーブルで使用される基になるオブジェクトすべてで有効にする必要があります。共有データをインジェストするために動的テーブルを使用するには、データ共有プロバイダーは共有オブジェクトで change_tracking を有効にする必要があります。 変更の追跡を有効にする をご参照ください。

動的テーブルを使用して共有データをインジェストする場合、クエリは共有動的テーブルまたは上流の動的テーブルを参照する共有セキュアビューから選択できません。

動的テーブルのウェアハウスまたはターゲットラグの変更

動的テーブルのウェアハウスまたはターゲットラグを変更するには、 ALTER DYNAMIC TABLE コマンドを使用します。

たとえば、動的テーブル product のウェアハウスを my_other_wh に変更するには、次を実行します。

ALTER DYNAMIC TABLE product SET
  WAREHOUSE = my_other_wh;
Copy

以下の図は、中断、再開、および手動リフレッシュの操作を他の動的テーブルとの上流と下流の関係で表しています。

動的テーブル間の関係。中断、再開、手動リフレッシュの説明に使用されます。

この図は、動的テーブルで構築されたシンプルな宣言型データパイプラインを示しています。小川を流れる水と同じように、動的テーブルパイプラインのデータは、ルートから下流にある末端の動的テーブルに向かって流れます。

  • DT2 は、 DT1 の 下流 として説明されます(その動的テーブルに依存するため)。また、 DT3 の 上流 として説明されます(その動的テーブルに依存するため)。

  • DT3 は、DT2 と DT1 の両方の下流にあります。これは、DT2 に直接依存し、 DT1 に間接的に依存するためです。

  • DT1 は他の動的テーブルの直接的または間接的な上流にあります。

下流ターゲットラグの詳細および使用例については、 ターゲットラグについて をご参照ください。

動的テーブルの最適ターゲットラグの決定

動的テーブルの最適なターゲットラグタイムを決定するには、 Snowsight または SQL コマンドのいずれかを使用します。

Snowsight:
  1. 動的テーブルの詳細ページ で、 Refresh History タブを選択します。

  2. タブの上部に表示されている、実際の最大ラグタイムを確認します。このメトリックは、各リフレッシュの実際のラグタイムに基づいています。

SQL:
  • INFORMATION_SCHEMA の DYNAMIC_TABLE_REFRESH_HISTORY テーブル関数を使用します。この関数は、リフレッシュにかかった時間やスキップされたリフレッシュなど、動的テーブルの各リフレッシュに関する情報を返します。

選択したラグタイムは、自動リフレッシュプロセスによって決定されるリフレッシュスケジュールに影響します。自動リフレッシュプロセスは、動的テーブルのタイムラグに最適なスケジュールを選択します。

増分リフレッシュまたはフルリフレッシュのいずれが使用されているかの判断

動的テーブルのリフレッシュに増分リフレッシュとフルリフレッシュのどちらが使用されているかを判断するには、 Snowsight または SQL コマンドを使用します。

Snowsight:
  • 動的テーブルの詳細ページ に移動します。

    ページ上部の基本詳細には、そのテーブルで増分リフレッシュが使用されているか、フルリフレッシュが使用されているかが示されます。

SQL:
  • SHOW DYNAMIC TABLES を使用し、出力の REFRESH_MODE の値を確認します。

    REFRESH_MODE_REASONには、REFRESH_MODEの選択に関する詳細が含まれています。

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

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

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

変更

影響

  • 新しい列を追加する。

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

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

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

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

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

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

動的テーブルの状態は FAILED に変わります。変更に対応するために、動的テーブルを再作成する必要があります。

自動中断の動作について

注釈

リフレッシュエラーが5回続くと、動的テーブルは中断されます。リフレッシュエラーによって中断される動的テーブルは、ユーザーのアクションではなくシステムによって中断されるため、一般的に 自動中断 と呼ばれます。

中断された動的テーブルに依存する動的テーブルも中断されます。SCHEDULING_STATE は動的テーブルの現在の状態を説明します。

  • 動的テーブルのスケジューリング状態を表示するには、 DYNAMIC_TABLE_GRAPH_HISTORY テーブル関数を呼び出し、 SCHEDULING_STATE 列を調べます。