動的テーブル¶
動的テーブルは、定義されたクエリとターゲットの鮮度に基づいて自動的に更新されるテーブルで、手動更新やカスタムスケジュールを必要とせず、データ変換とパイプライン管理を簡素化します。
動的テーブルを作成する際には、ベース・オブジェクトからどのようにデータを変換するかを指定するクエリを定義します。その後、Snowflakeはダイナミックテーブルの更新スケジュールを処理し、クエリに基づいてベースオブジェクトに加えられた変更を自動的に更新します。
動的テーブルの仕組み¶
動的テーブルは、変換クエリを定期的に実行する自動リフレッシュ・プロセスによって更新されます。このプロセスでは、ベースオブジェクトに加えられた変更を計算し、テーブルに関連付けられた計算リソースを使用して動的テーブルにマージします。

データの更新頻度と鮮度は、動的テーブルの作成時に指定されたターゲット・ラグによって決定されます。リフレッシュ・プロセスは、指定されたターゲット・ラグを使用して更新をスケジュールします。たとえば、ターゲット・ラグを5分に設定すると、動的テーブルのデータがベーステーブルの更新から5分以上遅れないようになります。
ほぼリアルタイムのデータ更新が必要ない場合は、ターゲットラグを長くしてコストを削減することができます。たとえば、動的テーブルのデータがベーステーブルの更新から最大1時間遅れていればよい場合、(5分ではなく)1時間のターゲット鮮度を指定してコストを削減できます。
詳細については、 動的テーブルのターゲット・ラグの理解 および 動的なテーブルの初期化とリフレッシュの理解 をご参照ください。
動的テーブルを使用する場合¶
動的テーブルは、次のようなシナリオに最適です。
データの依存関係を手動で追跡したり、更新スケジュールを管理したりするのは避けたいものです。
カスタムコードを記述することなく、複数のベーステーブルからクエリ結果を実体化する必要があります。
データ変換用の複数のテーブルをパイプラインで構築する必要があります。
更新スケジュールを細かく制御する必要はなく、パイプラインのターゲット鮮度を指定するだけです。
ストリームのソースとして動的テーブルを使用します。
使用例¶
ゆっくりと変化するディメンション (SCDs): 動的テーブルを使用して、変更ストリームから読み取り、変更タイムスタンプで並べ替えられた記録ごとのキーに対してウィンドウ関数を使用することで、タイプ 1 およびタイプ 2 SCDs を実装できます。このメソッドでは、挿入、削除、更新の順番が前後しても処理できるため、 SCDs の作成が簡単になります。詳細については、 動的テーブルを使用して、ゆっくりと変化するディメンションを実装する をご参照ください。
バッチからストリームへの遷移: 動的テーブルは、 ALTER DYNAMIC TABLE コマンドひとつでバッチからストリームへのシームレスな移行をサポートします。データ パイプ ラインの更新頻度を制御して、コストとデータの鮮度のバランスをとることができます。
キーポイント¶
Declarative SQL: 動的テーブルを使用すると、変換ステップを手動で管理することなく、パイプラインの結果を宣言的に定義できます。
自動リフレッシュ: Snowflakeは、ターゲット鮮度要件に基づいて、スケジュールや実行を含むデータリフレッシュのオーケストレーションを処理します。
パフォーマンスの最適化: 動的テーブルは、それをサポートするワークロードではインクリメンタル処理を使用し、完全な更新を実行するのではなく、変更されたデータのみを更新することでパフォーマンスを向上させることができます。