Snowflakeのキャッシュ
# | キャッシュ名 | キャッシュ対象 | 使用可能なユーザー | 保存レイヤー | 有効期間 |
---|---|---|---|---|---|
1 | 結果キャッシュ | クエリの結果 | クエリが実行された同じロールのすべてのユーザー | Snowflake | 24時間 |
2 | メタデータキャッシュ | テーブルに関する情報 | すべてのユーザー | Snowflake | 常に |
3 | データキャッシュ | クエリ結果のファイルヘッダとカラムデータ | 同じ仮想ウェアハウスを実行したユーザー | ウェアハウス(SSD) | ウェアハウスの稼働中 |
コンパイルキャッシュは存在せず常にコンパイルが必要
キャッシュを使用しないようにするためには??
- 結果キャッシュ
USE_CACHED_RESULT
をFALSE
に
- メタデータキャッシュ
- 方法無し
- データキャッシュ
- ウェアハウスのSUSPENDなど
注意事項
結果キャッシュ
https://docs.snowflake.com/ja/user-guide/querying-persisted-results.html#retrieval-optimization
通常、次の条件の すべて が満たされる場合、クエリ結果が再利用されます。
- 新しいクエリは、以前に実行したクエリと構文的に一致する。
- クエリには、実行時に評価する必要のある関数が含まれていない(例: CURRENT_TIMESTAMP() および UUID_STRING())。 CURRENT_DATE() 関数はこのルールの例外です。CURRENT_DATE() は実行時に評価されますが、 CURRENT_DATE() を使用するクエリは、クエリ再利用機能を引き続き使用できます。
- クエリには、 ユーザー定義関数(UDFs) または 外部関数 が含まれていない。
- クエリ結果に寄与するテーブルデータが変更されていない。
- 以前のクエリの永続化された結果が引き続き利用可能である。
- キャッシュされた結果にアクセスするロールには、必要な権限がある。
- クエリが SELECT クエリの場合、クエリを実行するロールには、キャッシュされたクエリで使用されるすべてのテーブルに必要なアクセス権限が必要です。
- クエリが SHOW クエリの場合、クエリを実行するロールは、キャッシュされた結果を生成したロールと一致する必要があります。
- 結果の生成方法に影響する構成オプションが変更されていない。
- テーブル内にある他のデータ変更によって、テーブルのマイクロパーティションが変更されていない(例: 再クラスタ化または統合化)。
これらの条件をすべて満たしても、Snowflakeがクエリ結果を再利用することは 保証されません。
参照
関連しているかもしれない記事
- Snowflakeのデータキャッシュの無効化
- SnowPro Advanced Architect対策メモ
- Snowflakeでログイン履歴を確認する
- Snowflakeのアクセス制御や権限管理
- S3(外部ステージ)からSnowflakeにデータロードする