参考:
有人使用过 Snowflake 搜索优化并获得了优于集群键的好处吗? 请分享任何用例、成本与性能。
欣赏见解
一般来说,对于点查找查询,搜索优化服务 (SOS) 比集群更有利,点查找查询是使用等式或 IN 过滤条件从非常大的表中检索 1 行或几行的查询类型。
由于表中只能有一个聚簇键,因此 SOS 还可以帮助优化聚簇表中非聚簇键列的搜索。
但是与集群不同,SOS 增加了存储成本,该成本保存启用了 SOS 的每个表的搜索访问路径数据
雪花搜索优化旨在找到“大海捞针”,而数据聚类旨在减少返回的数据,而不是找到极少量的行。
我(至少)有两个搜索优化服务和集群发挥作用的用例。
我有一个 1.3 TB 的表,包含数十亿行,80% 的查询获取当月的数据,50% 的查询在本周获取。剩下的 20% 中,大多数获取了一个月左右的数据,但最多是 15 年前。
集群键使数据按交易日期进行物理排序,并且在 90% 的情况下,查询在几秒钟内运行。然而,集群只能很好地发挥作用,因为大多数查询都包含一个过滤器,例如:
where TRANSACTION_DATE between :START and :END;
典型的查询返回数十亿行中的数千甚至数十万行。
另一个表(同样是 TB 大小)使用针对键组合的 EQUALITY 搜索进行查询。与之前的用例不同,分析师在整个历史记录中搜索行(所有 20 年的数十亿行),典型的 WHERE 子句如下所示:
where AGE_GROUP = ‘GEN-Z’
and INCOME_BRACKET = :INCOME
and REGION = :REGION
and GENDER = ‘MALE’
and M_STATUS in (‘MARRIED’, ‘COHABITING’)
要点是:
用例 1(集群)可以返回 100,000 行,但由于数据都是按 DATE 查询和(更重要的是)存储的,因此大多数查询会获取大约 10 个微分区。所有这些都“聚集在一起”。
用例 2 搜索优化服务,通常返回 < 1,000 rows (from 70,000 micro partitions), but these were from across the entire table history.
查询越有选择性,响应越快。
我写了一篇关于我的经验的博客文章:https://www.analytics.today/blog/snowflake-search-optimization-service-best-practices
希望这有帮助。