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



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

现在的问题是:这是雪花按设计工作的方式,还是我需要考虑一些东西来强制结果缓存?

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

最新更新