動的テーブル

動的テーブルは、定義されたクエリとターゲットの鮮度に基づいて自動的に更新されるテーブルで、手動更新やカスタムスケジュールを必要とせず、データ変換とパイプライン管理を簡素化します。

動的テーブルを作成する際には、ベース・オブジェクトからどのようにデータを変換するかを指定するクエリを定義します。その後、Snowflakeはダイナミックテーブルの更新スケジュールを処理し、クエリに基づいてベースオブジェクトに加えられた変更を自動的に更新します。

動的テーブルの仕組み

動的テーブルは、変換クエリを定期的に実行する自動リフレッシュ・プロセスによって更新されます。このプロセスでは、ベースオブジェクトに加えられた変更を計算し、テーブルに関連付けられた計算リソースを使用して動的テーブルにマージします。

ベース・オブジェクトと動的テーブル間の自動リフレッシュ・プロセスの視覚的表現

データの更新頻度と鮮度は、動的テーブルの作成時に指定されたターゲット・ラグによって決定されます。リフレッシュ・プロセスは、指定されたターゲット・ラグを使用して更新をスケジュールします。たとえば、ターゲット・ラグを5分に設定すると、動的テーブルのデータがベーステーブルの更新から5分以上遅れないようになります。

ほぼリアルタイムのデータ更新が必要ない場合は、ターゲットラグを長くしてコストを削減することができます。たとえば、動的テーブルのデータがベーステーブルの更新から最大1時間遅れていればよい場合、(5分ではなく)1時間のターゲット鮮度を指定してコストを削減できます。

詳細については、 動的テーブルのターゲット・ラグの理解 および 動的なテーブルの初期化とリフレッシュの理解 をご参照ください。

動的テーブルを使用する場合

動的テーブルは、次のようなシナリオに最適です。

  • データの依存関係を手動で追跡したり、更新スケジュールを管理したりするのは避けたいものです。

  • カスタムコードを記述することなく、複数のベーステーブルからクエリ結果を実体化する必要があります。

  • データ変換用の複数のテーブルをパイプラインで構築する必要があります。

  • 更新スケジュールを細かく制御する必要はなく、パイプラインのターゲット鮮度を指定するだけです。

  • ストリームのソースとして動的テーブルを使用します。

使用例

  • ゆっくりと変化するディメンション (SCDs): 動的テーブルを使用して、変更ストリームから読み取り、変更タイムスタンプで並べ替えられた記録ごとのキーに対してウィンドウ関数を使用することで、タイプ 1 およびタイプ 2 SCDs を実装できます。このメソッドでは、挿入、削除、更新の順番が前後しても処理できるため、 SCDs の作成が簡単になります。詳細については、 動的テーブルを使用して、ゆっくりと変化するディメンションを実装する をご参照ください。

  • バッチからストリームへの遷移: 動的テーブルは、 ALTER DYNAMIC TABLE コマンドひとつでバッチからストリームへのシームレスな移行をサポートします。データ パイプ ラインの更新頻度を制御して、コストとデータの鮮度のバランスをとることができます。

キーポイント

  • Declarative SQL: 動的テーブルを使用すると、変換ステップを手動で管理することなく、パイプラインの結果を宣言的に定義できます。

  • 自動リフレッシュ: Snowflakeは、ターゲット鮮度要件に基づいて、スケジュールや実行を含むデータリフレッシュのオーケストレーションを処理します。

  • パフォーマンスの最適化: 動的テーブルは、それをサポートするワークロードではインクリメンタル処理を使用し、完全な更新を実行するのではなく、変更されたデータのみを更新することでパフォーマンスを向上させることができます。