クエリ作ったらやること
- パフォーマンスチェックのためクエリプロファイルで以下を確認すること
- スピルして無いこと
- プルーニングされていること
参考: Snowflake を使うときに初心者に気をつけてほしいこと
Tips
- 試行錯誤は仮テーブルか一時テーブルを使う
- 永続テーブルの場合は一定期間FailSafeにデータが溜まり続けてしまうため。 参考: Fail Safe みてない
関連用語
- Spill / スピル: データがメモリから溢れる状態のこと
- Snowflake メモリで処理ができなくなったらにディスクにデータをスピルし、次にリモートストレージにスピルします。つまり、スピルしている場合は、クエリかwearhouseを見直した方が良い
- スピルの状態クエリプロファイルから確認可能
- マイクロパーティショニング: 行データを格納するファイル
Snowflakeはテーブルのクエリに対して次のアクションを実行できます:
- まず、クエリに不要なマイクロパーティションをプルーニングします。
- 次に、残りのマイクロパーティション内の列ごとにプルーニングします。
- プルーニング: 不必要なデータの読み取りを削減すること
- snowflakeにおけるプルーニングの特徴
Snowflakeはパーティションの列状スキャンを使用するため、クエリが1列でのみフィルターする場合、パーティション全体はスキャンされません。
言い換えれば、スキャンされたマイクロパーティションと列指向データの比率が選択された実際のデータの比率に近いほど、テーブルで実行されるプルーニングはより効率的です。
参考: クエリプルーニング
-
データクラスタリング
- クラスタ化の目的は不必要なデータの読み取りを削減(プルーニング)するため
-
列指向: 列方向にデータをまとめているため、特定の列をまとめて処理することが得意
- 特定の行を抜き出して更新、削除するのは苦手