ダイナミック・テーブルのパフォーマンスを最適化するベスト・プラクティス

ダイナミックテーブルのパフォーマンスを最適化するには、システムを理解し、アイデアを試し、結果に基づいて反復する必要があります。例:

  1. コスト、データラグ、レスポンスタイムのニーズに基づき、データパイプラインを改善する方法を開発します。

  2. 以下のアクションを実施します。

    1. クエリを素早く開発するために、小さな固定データセットから始めます。

    2. 動いているデータを使ってパフォーマンスをテストします。

    3. データセットをスケールして、ニーズに合っていることを確認します。

  3. 調査結果に基づいてワークロードを調整します。

  4. パフォーマンスへの影響が最も大きいタスクに優先順位をつけて、必要に応じて繰り返します。

さらに、ダウンストリームラグを使用してテーブル間のリフレッシュ依存関係を効率的に管理し、必要なときにのみリフレッシュが行われるようにします。

注釈

クエリ時、動的テーブルは通常のSnowflakeテーブルと同様の動作をします。詳細については、 Snowflakeでのパフォーマンスの最適化 をご参照ください。

フルリフレッシュパフォーマンス

フルリフレッシュ動的テーブルは、 CREATE TABLE ... AS SELECT (CTAS とも呼ばれる) と同様の動作をします。他のSnowflakeクエリと同様に最適化することができます。

増分リフレッシュパフォーマンス

動的テーブルの最適な増分リフレッシュパフォーマンスを実現するには:

  • ソースと動的テーブルの両方について、リフレッシュ間の変更を最小限、理想的にはデータセット全体の5%未満に抑えます。

  • 行数だけでなく、変更されたマイクロパーティションの数も考慮してください。増分リフレッシュの作業量は、変更された行だけでなく、これらのマイクロパーティションのサイズに比例します。

  • クエリでは、結合、GROUPBYs、PARTITIONBYsなどのグループ化操作を最小限にします。大きな共通テーブル式(CTEs)を小さな部分に分割し、それぞれに動的テーブルを作成します。過剰な集約や結合を行うことで1つの動的テーブルを圧迫しないようにします。

  • テーブルの変更をクエリのキーに合わせることで、データの局所性を確保します(例:結合、GROUPBYs、PARTITIONBYs)。テーブルがこれらのキーで自然にクラスタリングされていない場合は、 自動クラスタリング を有効にしてください。