使用 CTE 的雪花查询似乎不会缓存结果

Snowflake queries with CTE seems not to cache results

当我在 Snowflake 中执行包含 CTE(由 WITH 子句定义的常见 table 表达式)的查询时,结果未被缓存。

现在的问题是:Snowflake 是按设计工作的,还是我需要考虑强制结果缓存?

Snowflake 确实使用 CTE 的结果集缓存。您可以通过 运行 将这个简单的问题重复两次来确认这一点。它应该在历史记录中显示 table 第二个没有使用仓库到 运行。向下钻取查询配置文件应该显示第二个的执行计划是单个节点,查询结果重用。

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