【发布时间】:2022-07-25 18:14:37
【问题描述】:
我有大约 450M 行的 Snowflake 表,该表仅包含 2 个字段,_date 是 DATE 类型,Data 是 VARIANT 类型。集群键是 Date 并且事件平均分布在每一天
| Name | LINEAR(_DATE) | rows | bytes | automation clustering |
|---|---|---|---|---|
| DATEDEVENTS | LINEAR(_DATE) | 444,087,723 | 129228379136 | ON |
我正在尝试运行以下简单查询
select *
from datedevents
order by _DATE
limit 200
snowflake 正在执行全表扫描, 我不能只查询第一天第二天等。因为用例更复杂, 但是为什么雪花不能使用他的集群密钥来高效地执行这个操作并且不扫描所有数据呢?除了第一次约会、第二次约会等,我会一直坚持到他达到 200 人的限制
【问题讨论】:
-
一个答案可能是您的集群不是 100%,因此需要“其他分区”。这可以通过添加
EXPLAIN和WHERE _date > <minus N days>进行测试,然后查看将读取多少个分区。并检查 N 的一些值是否为 1,2,7,14 -
另一个答案可能是分区加载的优化器完全基于 WHERE 子句,您没有,因此所有分区都已加载。同样对于这个假设,如果您知道每天有 X 条消息(例如 10 倍或 15 倍)“只是为了安全”,我将完全设置 N 天的过滤限制。
-
查看我更新的答案,通过
in()进行修剪来解决
标签: snowflake-cloud-data-platform