Snowflake で CTE (WITH 句で定義された共通テーブル式) を含むクエリを実行すると、結果がキャッシュされません。
ここでの問題は、Snowflake が設計どおりに機能するかどうか、または結果のキャッシュを強制するために何かを考慮する必要があるかどうかです。
Snowflake で CTE (WITH 句で定義された共通テーブル式) を含むクエリを実行すると、結果がキャッシュされません。
ここでの問題は、Snowflake が設計どおりに機能するかどうか、または結果のキャッシュを強制するために何かを考慮する必要があるかどうかです。
Snowflake は CTE に結果セット キャッシュを使用します。この単純なものを 2 回実行することで確認できます。履歴テーブルには、2 番目の実行にウェアハウスを使用しなかったことが示されているはずです。クエリ プロファイルをドリルダウンすると、2 番目の実行プランが単一ノードであり、クエリ結果の再利用であることが示されます。
with
my_cte(L_ORDERKEY) as
(select L_ORDERKEY from "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."LINEITEM")
select * from MY_CTE limit 10000;
Snowflake が結果セット キャッシュを使用しない特定の条件があります。より一般的なものの 1 つは、複数の実行で異なる結果を生成できる関数の使用です。たとえば、クエリに current_timestamp() が含まれている場合、それは実行されるたびに変化します。
結果セット キャッシュを使用するために満たす必要がある基準の完全なリストを次に示します。それでも、これらの基準をすべて満たしても、結果セット キャッシュの使用が保証されるわけではないことに注意してください。
https://docs.snowflake.com/en/user-guide/querying-persisted-results.html#retrieval-optimization