我试着按lower(event_name)对events表进行聚类,但是当我按事件名的小写检查用于查询的分区数时,它似乎不起作用--它使用的分区数与集群前相同。知道为什么我能做什么吗?
发布于 2022-04-05 04:30:25
如果您不给我们查询以及如何创建集群表,那么很难帮助您。尽管如此,让我尝试使用这些查询来展示集群是如何帮助您的(或者不是):
非群集表:扫描的64个分区中的64个。
select *
from wikimedia.public.wikidata_modern_people
where name like 'Alex%';现在让我按名称对该表进行聚类:
create or replace temp table people_name_cluster
cluster by (name)
as
select *
from wikimedia.public.wikidata_modern_people现在,这个查询只扫描16个分区中的一个:
select *
from people_name_cluster
where name like 'Alex%';这是意料之中的,但是如果我们用lower(name)聚在一起呢?
create or replace temp table people_name_cluster_lower
cluster by (lower(name))
as
select *
from wikimedia.public.wikidata_modern_people然后,该查询扫描16个分区中的2个:
select *
from people_name_cluster_lower
where name like 'Alex%';但是,当我尝试使用lower(name)或正则表达式时,什么都不会被修剪。以下查询扫描16个分区中的16个:
select *
from people_name_cluster_lower
where lower(name) like 'alex%';
select *
from people_name_cluster_lower
where name regexp('^Alex.*');
select *
from people_name_cluster_lower
where regexp_like(name, 'Alex.*');然后,这个查询扫描16种中的2种:
select *
from people_name_cluster_lower
where regexp_like(name, 'Alex.*')
and name between 'A' and 'B';从这些实验中得到的教训是:通过lower(string)进行聚类可能不会使事情变得更好。尝试通过正则表达式进行剪枝也可能没有优化。
发布于 2022-04-03 20:32:21
添加聚类键,不会使数据立即群集。重新排序一张桌子可能需要几个小时。
如果您想测试的是重新排序是否会产生影响,最快的方法是使用ORDER BY cluster_key_terms创建一个新的(临时)表,并测试订单是否改善了查询的剪枝。
考虑到增量整形/集群所需的学分,在单个操作中,数据比计算要多,而且“重写”将使用更多的磁盘。真正最便宜的测试方法是一次完成。
https://stackoverflow.com/questions/71729179
复制相似问题