動的テーブル¶
動的テーブルは、定義されたクエリとターゲットの鮮度に基づいて自動的に更新されるテーブルで、手動更新やカスタムスケジュールを必要とせず、データ変換とパイプライン管理を簡素化します。
動的テーブルを作成する際には、ベースオブジェクトからどのようにデータを変換するかを指定するクエリを定義します。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 不変性制約の理解.
Performance considerations: Dynamic tables use incremental processing for workloads that support it, which can improve performance by processing only changed data instead of recomputing entire tables. Performance depends on your query patterns and data organization. For guidance on optimizing dynamic table performance, see 動的テーブルのパフォーマンスおよび最適化.
複雑な動的テーブルを分割する: パフォーマンスを向上させ、トラブルシューティングを簡素化するために、パイプラインをより小さく、焦点を絞った動的テーブルに分割します。詳細については、 動的テーブル作成のベストプラクティス をご参照ください。
動的テーブルの仕組み¶
Snowflakeは CREATE DYNAMIC TABLE ステートメントで指定された定義クエリを実行し、動的テーブルは自動リフレッシュプロセスによって更新されます。
以下の図は、このプロセスがどのようにベースオブジェクトに加えられた変更を計算し、テーブルに関連付けられているコンピューティングリソースを使用して動的テーブルにマージするかを示しています。
ターゲットラグ¶
Use target lag to set how fresh you want your data to be. Usually, the table data freshness won't be more than that far behind the base table data freshness. With target lag, you control how often the table refreshes and how up-to-date the data stays. Target lag affects refresh frequency and compute costs.
For more information, see 動的テーブルのターゲット・ラグの理解. For guidance on balancing data freshness with performance, see 動的テーブルのパフォーマンスの最適化.
動的テーブルのリフレッシュ¶
動的テーブルは、指定したターゲットラグ内にリフレッシュすることを目的としています。たとえば、ターゲットラグを5分とすることで、動的テーブルのデータがベーステーブルのデータ更新から5分以上遅れないようにすることができます。リフレッシュモードはテーブル作成時に設定し、その後はスケジュールまたは手動でリフレッシュできます。
詳細については、 動的なテーブルの初期化とリフレッシュの理解 および 動的テーブルの手動更新 をご参照ください。
動的テーブルを使用する場合¶
動的テーブルは次のようなシナリオに最適です。
カスタムコードを書かずにクエリ結果を実体化したい場合。
データの依存関係を手動で追跡したり、リフレッシュスケジュールを管理したりするのを避けたい場合。動的テーブルを使用すると、変換ステップを手動で管理することなく、パイプラインの結果を宣言的に定義できます。
データ変換のために複数のテーブルをパイプラインで連結したい場合。
リフレッシュスケジュールを細かく制御する必要はなく、パイプラインの目標鮮度を指定するだけですみます。Snowflakeは、目標の鮮度要件に基づいて、スケジューリングと実行を含むデータリフレッシュのオーケストレーションを処理します。
使用例¶
ゆっくりと変化するディメンション (SCDs): 動的テーブルを使用して、変更ストリームから読み取り、変更タイムスタンプで並べ替えられた記録ごとのキーに対してウィンドウ関数を使用することで、タイプ 1 およびタイプ 2 SCDs を実装できます。このメソッドでは、挿入、削除、更新の順番が前後しても処理できるため、 SCDs の作成が簡単になります。詳細については、 動的テーブルを使用して、ゆっくりと変化するディメンションを実装する をご参照ください。
Joins and aggregations: To enable fast queries, you can use dynamic tables to incrementally precompute slow joins and aggregations. For guidance on optimizing these operators for incremental refresh, see インクリメンタルリフレッシュ向けにクエリを最適化する.
バッチからストリームへの遷移: 動的テーブルは、 ALTER DYNAMIC TABLE コマンドひとつでバッチからストリームへのシームレスな移行をサポートします。データ パイプ ラインの更新頻度を制御して、コストとデータの鮮度のバランスをとることができます。