動的テーブルクエリのパフォーマンス¶
このセクションでは、クエリ時に良好なパフォーマンスを得るためのパイプラインの設計方法について説明します。データは、さまざまなシステムを経由して、さまざまな形態をとります。
ソースデータ:最初に、データは実世界のエンティティによって生成され、最前線のシステムに収集されます。このデータは、ETL プロセスを経て、Snowflakeに インジェスト されます。
生データ: インジェスト後、データはSnowflakeテーブルに格納され、分析により適した形式に 変換 されます。
モデル化されたデータ: これらの変換は、 分析 のためにコンシューマーが慣れ親しんだ概念を提示するモデルのセットになります。
あなたの パイプライン は以下のステップで構成されています。動的テーブルは変換ステップで機能しますが、パイプライン全体のコンテキストでそのパフォーマンスを考慮する必要があります。
マテリアライゼーションの理解¶
分析クエリの性能は、生データからモデル化されたデータへの変換の設計と実装によって決まります。これらの変換を生データに対する一連の表示として定義することは技術的には正しいのですが、パフォーマンスとコストのニーズを満たさない可能性があります。
これに対処するために、データモデルの一部またはすべてを、 マテリアライズ して、結果を事前に計算し、すばやくアクセスできるように保存し、最新の状態に保つ必要があるかもしれません。動的テーブルはこのマテリアライゼーションを簡単にしますが、どのモデルをマテリアライズするかを決めなければなりません。
マテリアライゼーションの境界¶
変換のマテリアライズされた部分とマテリアライズされていない部分の区分は、 マテリアライゼーションの境界 と呼ばれます。マテリアライゼーションの境界を決定する際、一般的には以下の要素が関係します。
ラグまたは鮮度: 提供するデータの鮮度、つまり結果がどれだけ古いか。マテリアライゼーションの境界は通常、この要素に強い影響を与えません。
応答時間:より多くのパイプラインをマテリアライズすることで、応答時間が短縮されます。鮮度は常にクエリの応答時間と同じぐらいですが、それより長くなることもあります。
コスト。ワークロードに関連するコストは以下の通りです。
マテリアライゼーションのコスト:このコストは、ソースのデータ量と変換の複雑さによって変化します。
分析中の非マテリアライズされた変換のコンピューティングコスト:このコストは、分析クエリの数とその複雑さによって変化します。
ストレージのコスト:このコストには生データとマテリアライズされたデータの両方が含まれます。
より多くのモデリングデータをマテリアライズすることで、応答時間が短縮され、分析コストが下がりますが、マテリアライゼーションのコストが上がる可能性があります。最適なマテリアライゼーションの境界を見つけるには、上記の要素のバランスを取る必要があります。通常、応答時間の要件を満たす最小限のデータ量をマテリアライズすることで、良い結果を得ることができます。
マテリアライズする方法¶
マテリアライゼーションの境界を設定したら、それに従って動的テーブルや表示を作成できます。他のSnowflakeクエリと同様に、マテリアライズされていない変換のパフォーマンスを最適化することができます。クエリを実行すると、通常のテーブルと動的テーブルは同様に動作し、正規化、事前集約、クラスタリングなどの標準的なテクニックを使用してパフォーマンスを向上させることができます。
その他のアイデアについては、 クエリパフォーマンスのチェックリスト をご参照ください。