求问,starrocks怎么实现ck中的localQuery呀?有明细数据去重场景,希望把待去重id作为分桶键,然后去重的时候节点内去重即可呀?
ck中的localQuery节点内计算出的去重结果数值,可以减少很多网络传输
求问,starrocks怎么实现ck中的localQuery呀?有明细数据去重场景,希望把待去重id作为分桶键,然后去重的时候节点内去重即可呀?
ck中的localQuery节点内计算出的去重结果数值,可以减少很多网络传输
这个就是 colocate agg
那太好了,不过我在官方文档没找到colocate agg的相关资料,老师有空能辛苦帮忙举例说明下我需要怎么才能让我的聚合查询走colocate agg吗?
【场景】我的场景是分区的bitmap聚合表,表结构如下,按block_offset分桶,需要桶内求出bitmap的基数结果,然后各桶之间的数据进行求和即可
【表结构】
CREATE TABLE bitmap_table (
dt
varchar(65533) NOT NULL COMMENT “dt”,
dim1
varchar(65533) NOT NULL COMMENT “dim1”,
block_offset
bigint NOT NULL COMMENT “用户id的二进制低x位”,
user_bitmap
bitmap BITMAP_UNION NULL COMMENT “用户bitmap(剔除低x位后,其余位存储为bitmap)”
) ENGINE=OLAP
AGGREGATE KEY(dt
,dim1
,block_offset
)
COMMENT “bitmap_table”
PARTITION BY (dt
)
DISTRIBUTED BY HASH(block_offset
)
PROPERTIES (
“replication_num” = “3”,
“in_memory” = “false”,
“enable_persistent_index” = “false”,
“replicated_storage” = “true”,
“partition_live_number” = “100”,
“compression” = “LZ4”
);
【查询】
希望能走colocate agg,保障节点中直接计算出uv结果,然后节点间进行uv的求和
select
dim1
,sum(uv) as uv
from(
select
dim1
,block_offset
,bitmap_union_count(user_bitmap) as uv
from bitmap_table
group by dim1
,block_offset
) t1
group by dim1
你好,是说colocate agg可以直接参考colocate join是吗?
哦,没注意到你这个是单表不是join。
这个你可以explain看下里面的子查询是不是已经按你的期望进行了,因为这个schema和sql看起来节点之间并没有什么东西需要交换,毕竟已经按block_offset分桶了
好的,感谢大佬,我看了下执行计划,group by block_offset后,节点间的确只有结果数据的交换了,我这再实际测试下看看