動的テーブル¶
動的テーブルは、定義されたクエリとターゲットの鮮度に基づいて自動的に更新されるテーブルで、手動更新やカスタムスケジュールを必要とせず、データ変換とパイプライン管理を簡素化します。
When you create a dynamic table, you define a query that specifies how data should be transformed from base objects. Snowflake handles the refresh schedule of the dynamic table and updates the table automatically to reflect the changes made to the base objects based on the query.
主な考慮事項と一般的なベストプラクティス¶
不変性制約:不変性制約を使用して、動的テーブルの更新を制御できるようにします。制約によって特定の行は静的な状態に保たれ、テーブルの残りの部分はインクリメンタルな更新が可能になります。マークされたデータへの不要な変更を防ぐ一方で、テーブルの他の部分には通常のリフレッシュが行われるようにします。詳細については、 不変性制約を持つ動的テーブルを作成する をご参照ください。
Performance considerations: Dynamic tables use incremental processing for workloads that support it, which can improve performance by recomputing only the data that has changed, rather than performing a full refresh. For more information, see ダイナミック・テーブルのパフォーマンスを最適化するベスト・プラクティス.
複雑な動的テーブルを分割する: パフォーマンスを向上させ、トラブルシューティングを簡素化するために、パイプラインをより小さく、焦点を絞った動的テーブルに分割します。詳細については、 動的テーブル作成のベストプラクティス をご参照ください。
動的テーブルの仕組み¶
Snowflakeは CREATE DYNAMIC TABLE ステートメントで指定された定義クエリを実行し、動的テーブルは自動リフレッシュプロセスによって更新されます。
The following diagram shows how this process computes the changes made to the base objects and merges them into the dynamic table by using compute resources associated with the table.
ターゲットラグ¶
*ターゲットラグ*を使用して、データの鮮度を設定します。通常、テーブルデータの鮮度は、ベーステーブルデータの鮮度からそれほど遅れることはありません。ターゲットラグを使えば、テーブルのリフレッシュ頻度やデータの最新性をコントロールできます。
For more information, see 動的テーブルのターゲット・ラグの理解.
Dynamic table refresh¶
動的テーブルは、指定したターゲットラグ内にリフレッシュすることを目的としています。たとえば、ターゲットラグを5分とすることで、動的テーブルのデータがベーステーブルのデータ更新から5分以上遅れないようにすることができます。リフレッシュモードはテーブル作成時に設定し、その後はスケジュールまたは手動でリフレッシュできます。
For more information, see 動的なテーブルの初期化とリフレッシュの理解 and 動的テーブルの手動更新.
動的テーブルを使用する場合¶
Dynamic tables are ideal for the following scenarios:
You want to materialize query results without writing custom code.
You want to avoid manually tracking data dependencies and managing refresh schedules. Dynamic tables enable you to define pipeline outcomes declaratively, without managing transformation steps manually.
You want to chain together multiple tables for data transformations in a pipeline.
You don't need fine-grained control over refresh schedules, and you only need to specify a target freshness for the pipeline. Snowflake handles the orchestration of data refreshes, including scheduling and execution, based on your target freshness requirements.
使用例¶
ゆっくりと変化するディメンション (SCDs): 動的テーブルを使用して、変更ストリームから読み取り、変更タイムスタンプで並べ替えられた記録ごとのキーに対してウィンドウ関数を使用することで、タイプ 1 およびタイプ 2 SCDs を実装できます。このメソッドでは、挿入、削除、更新の順番が前後しても処理できるため、 SCDs の作成が簡単になります。詳細については、 動的テーブルを使用して、ゆっくりと変化するディメンションを実装する をご参照ください。
結合と集約: 動的テーブルを使用して、低速な結合と集約を段階的に事前計算し、高速なクエリを可能にすることができます。
バッチからストリームへの遷移: 動的テーブルは、 ALTER DYNAMIC TABLE コマンドひとつでバッチからストリームへのシームレスな移行をサポートします。データ パイプ ラインの更新頻度を制御して、コストとデータの鮮度のバランスをとることができます。