不変性制約の理解¶
不変性制約を使用すると、動的テーブルの一部を静的としてマークできます。不変性制約を定義すると、Snowflakeはリフレッシュ時にそれらの行をスキップします。これにより、特に大量の履歴データを含むテーブルのパフォーマンスが向上します。
動的テーブルを作成または変更するときは IMMUTABLE WHERE 句で不変性制約を定義します。句は、どの行が不変であるかを識別する条件または述語を指定します。
主な動作:
初期更新 :IMMUTABLE WHERE述語は、最初の更新中に無視されますが、後続のすべての更新には適用されます。
フルリフレッシュモード :述語は条件に一致しない行のみに再計算を制限します。
インクリメンタルリフレッシュ :ストリームとインクリメンタルリフレッシュの動的テーブルは、不変性制約を持つフルリフレッシュの動的テーブルから読み取ることができます。
クローニングと複製 :Snowflake が制限のないIMMUTABLE WHERE制約をコピーします
コンピューティングコストについては、 不変性制約のコンピューティングコスト をご参照ください。
不変性制約を使用する場合¶
不変性制約は、次のシナリオで役立ちます。
- 履歴データの再処理を回避する
動的テーブルに再処理したくない履歴データが含まれている場合は、古い行を不変としてマークします。
- フルリフレッシュモードの最適化
フル リフレッシュモード を使用する動的テーブルは通常、リフレッシュごとにすべての行を再計算します。不変性制約により、可変行のみに再計算が制限され、ほとんどのデータが履歴である場合の作業が大幅に削減されます。
- インクリメンタル下流リフレッシュを促進する
Pythonユーザー定義のテーブル関数などの一部のクエリ構成では、動的テーブルをフルリフレッシュモードで使用する必要があります。通常は、これにより下流のテーブルがインクリメンタルリフレッシュの恩恵を受けられなくなります。上流のテーブルに不変性制約がある場合でも、下流のテーブルはインクリメンタル処理の恩恵を受けることができます。
不変性でバックフィルを使用する¶
バックフィルは、不変性制約を拡張します。バックフィルは、既存のデータを再計算することなく動的テーブルに即座にコピーできるゼロコピー操作です。既存のパイプラインを移行したり、動的テーブル定義を変更したり、何年もの履歴データでテーブルを作成する際にコストがかかる初期化を回避したりするために使用します。
バックフィルされたデータは、将来のリフレッシュ中に変更されることはありません。
IMMUTABLE WHERE および BACKFILL FROM の両方で動的テーブルを作成する場合:
バックフィルは、ソーステーブルから 不変領域 をコピーします。不変領域は、
IMMUTABLE WHERE条件に一致する行で構成されます。クエリ定義は、 不変領域 を計算します。可変リージョンは、条件に一致しない行で構成されます。