0

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

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

4

1 回答 1

1

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

于 2021-01-19T12:56:27.267 回答