主キーを使用して動的テーブルパイプラインを最適化する¶
Snowflakeは主キーを使用して、変更追跡列に依存することなく、動的テーブルの行レベルの変更を追跡できます。これにより、通常は下流の増分処理をブロックするフルリフレッシュ動的テーブルを含む、挿入上書きワークロードを実行するパイプラインの増分リフレッシュが可能になります。
主キーは、データのごく一部のみが実際に変更されるベーステーブルで INSERTOVERWRITE が実行される場合に特に効果的です。このような場合、主キーベースの変更追跡は、テーブル全体を再計算するのではなく、変更された行のみを処理します。主キーは、上書きされても維持される安定した行識別子を提供します。
概念的な背景については、 動的テーブルの主キーを理解する をご参照ください。
INSERTOVERWRITE ワークロードのパフォーマンスを改善する¶
INSERTOVERWRITE を通してベーステーブルが定期的に書き換えられる場合、標準の変更追跡列がリセットされ、ベーステーブルを消費する動的テーブルには、ベーステーブルのすべての行に対する挿入と削除のセットが表示されます。
次の例では、外部プロセスが定期的に dimension_table を書き換えますが、ほとんどの行は同じままです。
ディメンションテーブルが INSERTOVERWRITE によって書き換えられた場合、Snowflakeは主キーを使用して、どのディメンション行が実際に変更されたかを識別し、結合全体を再計算するのではなく影響を受けるファクトのみを更新します。
フルリフレッシュ動的テーブルの下流で増分リフレッシュを有効にする¶
通常、 REFRESH_MODE = INCREMENTAL を持つ動的テーブルでは REFRESH_MODE = FULL を持つ動的テーブルからの読み取りができません。フルリフレッシュ動的テーブルにシステム固有の一意のキーがある場合は、明示的にリフレッシュモードを INCREMENTAL に設定できます。
例:ベーステーブルの主キーを使用する¶
主キーを持つベーステーブルを作成し、 RELY プロパティを設定すると、Snowflakeはそれを行レベルの変更追跡に使用します。
ベーステーブルから読み込むフルリフレッシュ動的テーブルを作成します。ベーステーブルには信頼できる主キーがあるため、Snowflakeはベーステーブルから一意のキーを抽出し、動的テーブルの一意の制約として登録できます。
増分動的テーブルを下流に作成します。これは、上流のテーブルにシステム派生の信頼できる一意のキーがあるため機能します。
例:クエリ派生の主キーを使用する¶
動的テーブルのクエリに GROUP BY 句が含まれている場合、Snowflakeはグループ化列から一意のキーを自動的に取得します。下流テーブルは、この派生キーを主キーベースの変更追跡に使用し、増分リフレッシュを有効にすることができます。
GROUP BY は組み合わせごとに1行を保証するため、 daily_sales テーブルには (sale_day, product_id) に派生した一意のキーがあります。下流のテーブルは増分リフレッシュできます。
動的テーブルでシステムが派生した一意のキーをチェックする¶
動的テーブルに派生した一意のキーがあるかどうかを確認するには、 SHOW UNIQUE KEYS コマンドを使用します。
出力に一意のキーが含まれている場合、動的テーブルは主キーベースの変更追跡をサポートします。下流の動的テーブルはフルリフレッシュモードを使用している場合でも、 REFRESH_MODE = INCREMENTAL を使用してそこから読み込むことができます。
また、 REFRESH_MODE = INCREMENTAL で下流の動的テーブルを作成することで、サポートを確認することもできます。上流テーブルに信頼できる一意のキーがない場合、作成はエラーで失敗します。