動的テーブルのターゲット・ラグの理解

動的テーブルのリフレッシュは、データがどれだけ古くてもよいかを決定する ターゲットラグ によってトリガーされます。固定ターゲットラグを設定するか、動的テーブルをDOWNSTREAMに設定し、リフレッシュのタイミングをそれに依存する動的テーブルに応じさせることができます。

動的テーブルのターゲット・ラグは、直接上流の動的テーブルではなく、グラフのルートの動的テーブルを基準として測定されます。動的テーブルに接続されているテーブルのグラフを見るには、 動的テーブルに接続されたテーブルのグラフ表示 をご参照ください。

Snowflakeは、動的テーブルの実際のラグをターゲットラグ以下に保つようにリフレッシュをスケジュールします。各リフレッシュの所要時間は、クエリ、データパターン、ウェアハウスサイズによって異なります。ターゲットラグを選択する際には、ルートへ チェーンの動的テーブル をそれぞれリフレッシュするのに必要な時間を考慮してください。そうしないと、一部のリフレッシュがスキップされ、実際のラグが大きくなる可能性があります。

ターゲット・ラグのタイプ

次のいずれかの方法でターゲットラグを指定します。ターゲットラグは、動的テーブルのリフレッシュ頻度に反比例します。

  1. 鮮度の測定: テーブルのコンテンツがベーステーブルの更新から遅れる最大時間を定義します。

    以下の例では、 my_dynamic_table を、1時間ごとにリフレッシュし、鮮度を維持するようにセットしています。

    ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = '1 hour';
    
    Copy
  2. 下流 :下流テーブル(このテーブルに依存するテーブル)がリフレッシュされる時に、動的テーブルがオンデマンドでリフレッシュされるように指定します。この更新は下流テーブルの 作成時の初期化手動リフレッシュ または スケジュールされた更新 によってトリガーされます。

    refresh_modedownstream に設定されているとき、動的テーブルのリフレッシュスケジュールは、その下流の依存関係の最も要求の厳しい(短い)ラグによって駆動されます。たとえば、ある下流の依存テーブルが10分以上経過していないデータを必要とし、別の下流の依存テーブルが1時間以上経過していないデータを必要とする場合、この動的テーブルのリフレッシュスケジュールは10分ごとになります。これが下流の依存関係の最小のラグであるためです。

    以下の例では、 my_dynamic_table が、ダウンストリームの動的テーブルのターゲット・ラグに基づいてリフレッシュするようにセットされています。my_dynamic_table に依存する動的テーブルがない場合、リフレッシュされません。

    ALTER DYNAMIC TABLE my_dynamic_table SET TARGET_LAG = DOWNSTREAM;
    
    Copy

    下流ターゲットラグの例については、 例:動的テーブルチェーンのターゲットラグ をご参照ください。

Snowflakeがリフレッシュをスケジュールする方法

Snowflakeでは、リフレッシュが完了するまでの時間を確保するため、リフレッシュのスケジュールをターゲットラグより少し早めに設定しています。たとえば、ターゲットラグを5分に設定した場合、テーブルは5分ごとよりも頻繁にリフレッシュされる可能性があります。実際のリフレッシュ間隔は、指定されたラグよりも短くなる場合が多いです。

注釈

ターゲットラグはターゲットであり、保証ではありません。Snowflakeはデータをターゲットラグ内に収めようとしますが、ウェアハウスのサイズ、データ量、クエリの複雑さなどの要因により、実際のラグはターゲットを超える可能性があります。

ワークロードに合わせてターゲットラグを調整する際のガイダンスについては、 動的テーブルのウェアハウスまたはターゲット・ラグの変更 をご参照ください。ターゲットラグの最適化については、 適切なターゲットラグの特定 をご参照ください。

上流と下流の関係がターゲット・ラグに与える影響

以下の図は、中断、再開、および手動リフレッシュの操作を他の動的テーブルとの上流と下流の関係で表しています。

動的テーブル間の関係。中断、再開、手動リフレッシュの説明に使用されます。

この図は、動的テーブルで構築されたシンプルな宣言型データパイプラインを示しています。

  • DT2 は、そのダイナミックテーブルに依存しているため、 DT1ダウンストリーム として記述され、それに依存している DT3アップストリーム として記述されます。

  • DT3 は、 DT2DT1 の両方の下流にあります。これは、 DT2 に直接依存し、 DT1 に間接的に依存するためです。

  • DT1 は他の動的テーブルの直接的または間接的な上流にあります。

例:動的テーブルチェーンのターゲットラグ

動的テーブル (DT2) が、別の動的テーブル (DT1) から内容を読み込んで実体化する次の例を考えてみましょう。このシナリオでは、レポートはクエリを介して DT2 のデータを消費します。

2つの動的テーブルの簡単な例: DT2 は DT1 に基づいて定義されています。

各動的テーブルがラグをどのように指定するかによって、次のような結果が考えられます。

DT1

DT2

リフレッシュの結果

TARGET_LAG = DOWNSTREAM

TARGET_LAG = 10minutes

DT2 は少なくとも毎10分ごとに更新されます。DT1 はラグを DT2 から推測し、 DT2 が更新を要求するたびに更新されます。

TARGET_LAG = 10minutes

TARGET_LAG = DOWNSTREAM

このシナリオは避ける必要があります。レポートクエリはデータを受け取りません。DT1 は頻繁に更新され、 DT2 は更新されません。なぜなら、 DT2 をベースとするダイナミックテーブルがないからです。

TARGET_LAG = 5minutes

TARGET_LAG = 10minutes

DT2 は、最大5分前の DT1 からのデータで約10分ごとに更新されます。

TARGET_LAG = DOWNSTREAM

TARGET_LAG = DOWNSTREAM

DT1DT2 も、どちらもダウンストリームラグがあるため、定期的にリフレッシュされることはありません。また、ラグが定義されたダウンストリームコンシューマーもありません。