首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用小写进行聚类

用小写进行聚类
EN

Stack Overflow用户
提问于 2022-04-03 19:25:30
回答 2查看 29关注 0票数 1

我试着按lower(event_name)对events表进行聚类,但是当我按事件名的小写检查用于查询的分区数时,它似乎不起作用--它使用的分区数与集群前相同。知道为什么我能做什么吗?

EN

回答 2

Stack Overflow用户

发布于 2022-04-05 04:30:25

如果您不给我们查询以及如何创建集群表,那么很难帮助您。尽管如此,让我尝试使用这些查询来展示集群是如何帮助您的(或者不是):

非群集表:扫描的64个分区中的64个。

代码语言:javascript
复制
select *
from wikimedia.public.wikidata_modern_people
where name like 'Alex%';

现在让我按名称对该表进行聚类:

代码语言:javascript
复制
create or replace temp table people_name_cluster
cluster by (name)
as
select *
from wikimedia.public.wikidata_modern_people

现在,这个查询只扫描16个分区中的一个:

代码语言:javascript
复制
select *
from people_name_cluster
where name like 'Alex%';

这是意料之中的,但是如果我们用lower(name)聚在一起呢?

代码语言:javascript
复制
create or replace temp table people_name_cluster_lower
cluster by (lower(name))
as
select *
from wikimedia.public.wikidata_modern_people

然后,该查询扫描16个分区中的2个:

代码语言:javascript
复制
select *
from people_name_cluster_lower
where name like 'Alex%';

但是,当我尝试使用lower(name)或正则表达式时,什么都不会被修剪。以下查询扫描16个分区中的16个:

代码语言:javascript
复制
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种:

代码语言:javascript
复制
select *
from people_name_cluster_lower
where regexp_like(name, 'Alex.*')
and name between 'A' and 'B';

从这些实验中得到的教训是:通过lower(string)进行聚类可能不会使事情变得更好。尝试通过正则表达式进行剪枝也可能没有优化。

票数 1
EN

Stack Overflow用户

发布于 2022-04-03 20:32:21

添加聚类键,不会使数据立即群集。重新排序一张桌子可能需要几个小时。

如果您想测试的是重新排序是否会产生影响,最快的方法是使用ORDER BY cluster_key_terms创建一个新的(临时)表,并测试订单是否改善了查询的剪枝。

考虑到增量整形/集群所需的学分,在单个操作中,数据比计算要多,而且“重写”将使用更多的磁盘。真正最便宜的测试方法是一次完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71729179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档