如何解决期望分布式表返回每个分片的结果,而不是聚合值
有一个用户标签表table_tag,对应的分布式表是table_tag_all,集群中有6个shard,sharding_key是intHash64(user_id).
通过设置参数distributed_product_mode='local'和distributed_group_by_no_merge=1,返回的结果是6个独立分片的值,而不是一个聚合值。 >
以下是两个测试。 测试 1 得到了正确的结果(count_1 的数量的 6 条记录),但测试 2 是聚合的(只有 2 条记录)。 如何让测试 2 返回 6 个分片的结果?
create table database.table_tag on cluster c1
(
user_id String,tag1 String,dt
)
order by user_id
partition by dt
setting index_granularity=128;
/* test 1: */
select
sum(case when tag1='1' then 1 else 0 end ) as count_1
from database.table_tag_all
where dt in ('202102','202101')
SETTINGS distributed_group_by_no_merge=1;
/* test 2: */
select count_1,count(1)
from (
select
user_id,sum(case when tag1='1' then 1 else 0 end ) as count_1
from database.table_tag_all
where dt in ('202102','202101')
group by user_id
SETTINGS distributed_group_by_no_merge=1;
) t1
group by count_1
SETTINGS distributed_group_by_no_merge=1;
/*
count_1 count()
0 1222122
1 33821
*/
解决方法
试试这个查询:
SELECT
shard_number,count_1,count()
FROM
(
SELECT
any(_shard_num) AS shard_number,countIf(tag1 = '1') AS count_1
FROM database.table_tag_all
WHERE dt in ('202102','202101')
GROUP BY user_id
)
GROUP BY
shard_number,count_1
SETTINGS distributed_group_by_no_merge = 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。