1. Snowflakeのアーキテクチャの基礎
Snowflakeはストレージとコンピュート(仮想ウェアハウス)を完全に分離したクラウドデータウェアハウスです。
- ストレージ層: データそのものや、クエリ結果のキャッシュ、メタデータなどが格納される。
- コンピュート層(ウェアハウス): 実際にSQLクエリを実行したり、データの集計・分析処理を行う仮想マシン群。
2. クエリ実行時のキャッシュの種類
Snowflakeには主に3種類のキャッシュがあります。
a. Result Cache(クエリ結果キャッシュ)
- 直近24時間以内に実行した全く同じクエリに対し、同じデータ・同じ権限であれば、計算結果だけを返す。
- データの読み込みや演算を再実行せず、保存されたクエリ結果セットを即座に返す。
- この場合、仮想ウェアハウス(コンピュート)は不要。=> 今回の設問のポイント
b. Local Disk Cache(ローカルディスクキャッシュ)
- 仮想ウェアハウス内で直近に利用したデータ(マイクロパーティション)を物理的にキャッシュし、パフォーマンス向上を図る。
c. Metadata Cache(メタデータキャッシュ)
- テーブルの統計情報や、データのどこが更新されたかなどを管理し、効率的なクエリ実行を補助。
3. Result Cache(クエリ結果キャッシュ)の特徴と要件
- 同じSQL、同じデータ(更新なし)、同じロール・権限、同じセッションパラメータであれば、有効。
- クエリの結果セットが24時間以内にキャッシュとして保持される。
- キャッシュが有効な場合、仮想ウェアハウスを起動せずとも結果が即時返却される。
- コストの節約と高速なレスポンスを両立可能。
4. 仮想ウェアハウスの必要性と例外
- Result Cache利用時: 仮想ウェアハウスは「不要」(Compute Costが発生しない)。
- Result Cacheが使えない場合:
- データが更新された
- 違うSQLやパラメータ、権限で実行
- 24時間経過後
- これらの場合は仮想ウェアハウスが起動し、計算・データアクセスのコストが発生。
5. 運用上のポイント
- BIツールやアプリケーションが同じクエリを繰り返し実行する場合、結果キャッシュ活用によるコスト削減が期待できる。
- データの更新やテーブルの変更が発生した場合は、キャッシュが自動的に無効になり、再度計算が必要。
まとめ
- Result Cache(クエリ結果キャッシュ)は、完全一致した条件下では仮想ウェアハウスなしで結果返却が可能。
- Snowflakeの「ストレージとコンピュートの分離」を象徴する機能の一つ。
参考リンク(公式ドキュメント)
- Query Result Caching — Snowflake Documentation
- Using Persisted Query Results — Snowflake Documentation
この範囲をしっかり理解しておけば、Snowflakeの運用コスト最適化やパフォーマンス設計にも役立ちます。