動的テーブル

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

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

主な考慮事項と一般的なベストプラクティス

Immutability constraints: Use immutability constraints to let you control dynamic table updates. The constraints keep specific rows static while enabling incremental updates to the rest of the table. They prevent unwanted changes to marked data while they let normal refreshes occur for other parts of the table. For more information, see 動的テーブルで不変性制約を使用する.

パフォーマンスの考慮事項: 動的テーブルは、ワークロードがそれをサポートする場合、インクリメント処理を使用します。これにより、完全なリフレッシュを実行するのではなく、変更されたデータのみを再計算することでパフォーマンスを向上させることができます。詳細については、 ダイナミック・テーブルのパフォーマンスを最適化するベスト・プラクティス をご参照ください。

複雑な動的テーブルを分割する: パフォーマンスを向上させ、トラブルシューティングを簡素化するために、パイプラインをより小さく、焦点を絞った動的テーブルに分割します。詳細については、 動的テーブル作成のベストプラクティス をご参照ください。

動的テーブルの仕組み

Snowflakeは CREATE DYNAMIC TABLE ステートメントで指定された定義クエリを実行し、動的テーブルは自動リフレッシュプロセスによって更新されます。

以下の図は、このプロセスがどのようにベースオブジェクトに加えられた変更を計算し、テーブルに関連付けられているコンピューティングリソースを使用して動的テーブルにマージするかを示しています。

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

ターゲットラグ

*ターゲットラグ*を使用して、データの鮮度を設定します。通常、テーブルデータの鮮度は、ベーステーブルデータの鮮度からそれほど遅れることはありません。ターゲットラグを使えば、テーブルのリフレッシュ頻度やデータの最新性をコントロールできます。

詳細については、 動的テーブルのターゲット・ラグの理解 をご参照ください。

動的テーブルのリフレッシュ

動的テーブルは、指定したターゲットラグ内にリフレッシュすることを目的としています。たとえば、ターゲットラグを5分とすることで、動的テーブルのデータがベーステーブルのデータ更新から5分以上遅れないようにすることができます。リフレッシュモードはテーブル作成時に設定し、その後はスケジュールまたは手動でリフレッシュできます。

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

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

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

  • カスタムコードを書かずにクエリ結果を実体化したい場合。

  • データの依存関係を手動で追跡したり、リフレッシュスケジュールを管理したりするのを避けたい場合。動的テーブルを使用すると、変換ステップを手動で管理することなく、パイプラインの結果を宣言的に定義できます。

  • データ変換のために複数のテーブルをパイプラインで連結したい場合。

  • リフレッシュスケジュールを細かく制御する必要はなく、パイプラインの目標鮮度を指定するだけですみます。Snowflakeは、目標の鮮度要件に基づいて、スケジューリングと実行を含むデータリフレッシュのオーケストレーションを処理します。

使用例

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

  • 結合と集約: 動的テーブルを使用して、低速な結合と集約を段階的に事前計算し、高速なクエリを可能にすることができます。

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