雪花中的结果缓存大小

时间:2021-06-03 18:17:10

标签: snowflake-cloud-data-platform

Snowflake 中的结果缓存非常有用。

我尝试的一个用例是在数据仓库中批量加载后运行用户的查询,以便缓存结果。并且在 2-3 小时后,当业务用户使用最小的仓库运行相同的查询时,数据将从缓存中返回。

但我需要了解结果缓存的卷容量是多少。我们能否知道结果缓存可以存储多少行。

假设用户查询拉取了一百万行。雪花将所有的百万行存储在结果缓存中。或者说 1 亿行。

一旦容量被破坏,数据将存储在哪里。我们如何知道容量以及何时被破坏

1 个答案:

答案 0 :(得分:1)

结果集缓存的大小没有实际限制。时间限制是自上次使用结果集以来的 24 小时:

<块引用>

每次重复使用查询的持久结果时,Snowflake 都会重置 结果的 24 小时保留期,最多 31 从第一次执行查询的日期和时间算起的天数。后 31 天,结果被清除,下次查询是 提交,一个新的结果被生成并持久化。

https://docs.snowflake.com/en/user-guide/querying-persisted-results.html

一些额外的注意事项:

  1. 运行相同的查询并不能保证使用结果集缓存。必须满足 8 个条件,即使如此也不能保证使用结果集缓存。 https://docs.snowflake.com/en/user-guide/querying-persisted-results.html#retrieval-optimization
  2. 为了保证使用结果集缓存,而不是在 24 小时内运行相同的查询,您可以运行 select * from table(result_scan('019caf93-0500...'));
  3. 如果您不对结果集进行任何处理/过滤,而只是执行 select *,则它甚至不需要正在运行的仓库。
  4. 请注意,如果您像 #2 一样运行查询,如果基础表中的数据发生更改,则不会更改结果。再次运行生成结果集的原始语句会这样做(表更改是第 1 点中的 8 个标准之一),但不太可能重用结果。
  5. 如果您使用 result_scan 函数,您可以像对待任何表一样对待它,并将它与其他表连接起来、过滤它、在其上运行函数等。除了简单的未过滤选择之外,执行任何其他操作都需要一个正在运行的仓库。仓库大小可能比最初用于创建结果集的大小要小得多。例如,一个复杂的查询可以消化结果,然后有人可以通过 result_scan 函数使用结果集来按行过滤或针对主查询的预处理结果执行更简单的查询。