動的テーブル¶
動的テーブルは、定義されたクエリとターゲットの鮮度に基づいて自動的に更新されるテーブルで、手動更新やカスタムスケジュールを必要とせず、データ変換とパイプライン管理を簡素化します。
動的テーブルを作成する際には、ベースオブジェクトからどのようにデータを変換するかを指定するクエリを定義します。Snowflakeは動的テーブルのリフレッシュスケジュールを処理し、クエリに基づいてベースオブジェクトに加えられた変更を反映するためにテーブルを自動的に更新します。
主な考慮事項と一般的なベストプラクティス¶
不変性制約:不変性制約を使用して、動的テーブルの更新を制御できるようにします。制約によって特定の行は静的な状態に保たれ、テーブルの残りの部分はインクリメンタルな更新が可能になります。マークされたデータへの不要な変更を防ぐ一方で、テーブルの他の部分には通常のリフレッシュが行われるようにします。詳細については、 不変性制約を持つ動的テーブルを作成する をご参照ください。
パフォーマンスの考慮事項: 動的テーブルは、ワークロードがそれをサポートする場合、インクリメント処理を使用します。これにより、完全なリフレッシュを実行するのではなく、変更されたデータのみを再計算することでパフォーマンスを向上させることができます。詳細については、 ダイナミック・テーブルのパフォーマンスを最適化するベスト・プラクティス をご参照ください。
複雑な動的テーブルを分割する: パフォーマンスを向上させ、トラブルシューティングを簡素化するために、パイプラインをより小さく、焦点を絞った動的テーブルに分割します。詳細については、 動的テーブル作成のベストプラクティス をご参照ください。
動的テーブルの仕組み¶
Snowflakeは CREATE DYNAMIC TABLE ステートメントで指定された定義クエリを実行し、動的テーブルは自動リフレッシュプロセスによって更新されます。
以下の図は、このプロセスがどのようにベースオブジェクトに加えられた変更を計算し、テーブルに関連付けられているコンピューティングリソースを使用して動的テーブルにマージするかを示しています。
ターゲットラグ¶
*ターゲットラグ*を使用して、データの鮮度を設定します。通常、テーブルデータの鮮度は、ベーステーブルデータの鮮度からそれほど遅れることはありません。ターゲットラグを使えば、テーブルのリフレッシュ頻度やデータの最新性をコントロールできます。
詳細については、 動的テーブルのターゲット・ラグの理解 をご参照ください。
動的テーブルのリフレッシュ¶
動的テーブルは、指定したターゲットラグ内にリフレッシュすることを目的としています。たとえば、ターゲットラグを5分とすることで、動的テーブルのデータがベーステーブルのデータ更新から5分以上遅れないようにすることができます。リフレッシュモードはテーブル作成時に設定し、その後はスケジュールまたは手動でリフレッシュできます。
詳細については、 動的なテーブルの初期化とリフレッシュの理解 および 動的テーブルの手動更新 をご参照ください。
動的テーブルを使用する場合¶
動的テーブルは次のようなシナリオに最適です。
カスタムコードを書かずにクエリ結果を実体化したい場合。
データの依存関係を手動で追跡したり、リフレッシュスケジュールを管理したりするのを避けたい場合。動的テーブルを使用すると、変換ステップを手動で管理することなく、パイプラインの結果を宣言的に定義できます。
データ変換のために複数のテーブルをパイプラインで連結したい場合。
リフレッシュスケジュールを細かく制御する必要はなく、パイプラインの目標鮮度を指定するだけですみます。Snowflakeは、目標の鮮度要件に基づいて、スケジューリングと実行を含むデータリフレッシュのオーケストレーションを処理します。
使用例¶
ゆっくりと変化するディメンション (SCDs): 動的テーブルを使用して、変更ストリームから読み取り、変更タイムスタンプで並べ替えられた記録ごとのキーに対してウィンドウ関数を使用することで、タイプ 1 およびタイプ 2 SCDs を実装できます。このメソッドでは、挿入、削除、更新の順番が前後しても処理できるため、 SCDs の作成が簡単になります。詳細については、 動的テーブルを使用して、ゆっくりと変化するディメンションを実装する をご参照ください。
結合と集約: 動的テーブルを使用して、低速な結合と集約を段階的に事前計算し、高速なクエリを可能にすることができます。
バッチからストリームへの遷移: 動的テーブルは、 ALTER DYNAMIC TABLE コマンドひとつでバッチからストリームへのシームレスな移行をサポートします。データ パイプ ラインの更新頻度を制御して、コストとデータの鮮度のバランスをとることができます。