使用示例数据在 Snowflake 中运行两个 SQL。
查询 1:
select * from "SNOWFLAKE_SAMPLE_DATA"."TPCDS_SF100TCL"."CUSTOMER" where c_birth_day='14' and c_birth_month='7' and c_birth_year='1989'
从持久化存储中提取的数据。
查询 2:更改过滤器值。预期是因为过滤器已更改,Snowflake 会再次从持久存储中提取。
select * from "SNOWFLAKE_SAMPLE_DATA"."TPCDS_SF100TCL"."CUSTOMER" where c_birth_day='15' and c_birth_month='7' and c_birth_year='1989'
但根据查询配置文件,它显示 100% 从缓存中扫描!这怎么可能。雪花是否会在不考虑过滤器的情况下从仓库缓存中的表中提取所有内容?
答案 0 :(得分:1)
仓库缓存存储第一次查询时使用的微分区,并将它们留在您的仓库中以备将来查询。如果您的下一个查询需要这些相同的微分区来完成其任务,它将使用仓库缓存,而不是再次获取微分区。
请注意,您的查询显示您的查询使用了所有微分区,这意味着您的第一个或第二个查询实际上都没有修剪表扫描中的任何微分区。这个实例中的仓库缓存是个好东西,性能可能比你第一次查询要好得多。
重要的是要了解缓存是获取的整个微分区,而不仅仅是在您的第一个查询中选择的记录。