当我在 Snowflake 中执行包含 CTE(由 WITH 子句定义的公用表表达式)的查询时,结果不会被缓存。
现在的问题是:这是 Snowflake 的设计方式,还是我需要考虑一些东西来强制结果缓存?
当我在 Snowflake 中执行包含 CTE(由 WITH 子句定义的公用表表达式)的查询时,结果不会被缓存。
现在的问题是:这是 Snowflake 的设计方式,还是我需要考虑一些东西来强制结果缓存?
Snowflake 确实使用 CTE 的结果集缓存。您可以通过运行这个简单的两次来确认这一点。它应该在历史表中显示第二个没有使用仓库运行。深入查询配置文件应该显示第二个的执行计划是单个节点,查询结果重用。
with
my_cte(L_ORDERKEY) as
(select L_ORDERKEY from "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."LINEITEM")
select * from MY_CTE limit 10000;
有某些条件使 Snowflake 不使用结果集缓存。最常见的一种是使用可以在多次运行中产生不同结果的函数。例如,如果查询包含 current_timestamp(),则每次运行时都会更改。
以下是使用结果集缓存必须满足的所有条件的完整列表。即便如此,有一点需要注意的是,满足所有这些标准并不能保证使用结果集缓存。
https://docs.snowflake.com/en/user-guide/querying-persisted-results.html#retrieval-optimization