Caching 带有CTE的雪花查询似乎不会缓存结果

Caching 带有CTE的雪花查询似乎不会缓存结果,caching,snowflake-cloud-data-platform,common-table-expression,with-clause,Caching,Snowflake Cloud Data Platform,Common Table Expression,With Clause,当我执行一个包含由Snowflake中的WITH子句定义的CTE公共表表达式的查询时,结果不会被缓存 现在的问题是:Snowflake是这样设计的吗?或者我需要考虑一些东西来强制结果缓存吗?< /P> < P>雪花确实使用CTS的结果集缓存。您可以通过两次运行这个简单的程序来确认这一点。它应该在历史记录表中显示第二个没有使用仓库来运行。深入到查询概要文件应该会显示第二个概要文件的执行计划是一个节点,即查询结果重用 with my_cte(L_ORDERKEY) as (select L_ORD

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


现在的问题是:Snowflake是这样设计的吗?或者我需要考虑一些东西来强制结果缓存吗?< /P> < P>雪花确实使用CTS的结果集缓存。您可以通过两次运行这个简单的程序来确认这一点。它应该在历史记录表中显示第二个没有使用仓库来运行。深入到查询概要文件应该会显示第二个概要文件的执行计划是一个节点,即查询结果重用

with 
my_cte(L_ORDERKEY) as
(select L_ORDERKEY from "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."LINEITEM")
select * from MY_CTE limit 10000;
某些条件会使Snowflake不使用结果集缓存。其中一种更常见的方法是使用一个函数,该函数可以在多次运行时产生不同的结果。例如,如果查询包含当前的_时间戳,则每次运行时都会更改

以下是使用结果集缓存必须满足的所有条件的完整列表。即使这样,也要注意,满足所有这些条件并不能保证使用结果集缓存


是的,在你的简单案例中它是有效的。但是,如果外部语句包含一个GROUP BY,则它不包含:将my_cte作为select L_ORDERKEY,将*作为SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.LINEITEM选择L_ORDERKEY中的CNT,将my_cte组中的任意值乘以1,以限制10000;任何_值都不是确定性的。使用任何非确定性函数都不允许使用结果集缓存。谢谢,我没有意识到这一点!雪花应该将此添加到检索优化站点。