在分布式集群中,每张表的数据都会分散在集群多个节点上,所以当我们进行join时避免不了节点间数据网络传输带来额外的延迟和其他开销。为了加速查询,StarRocks设计了Colocation Join。
在Colocation Join中,StarRocks引入了Colocation Group(CG)和Colocation Group Schema(CGS)的概念,CGS是指CG的分桶键,分桶数以及副本数等信息。Colocation Join实现的核心就是将同一个Colocation Group中的表采用一致的CGS也即使用一致的分桶键(字段数量、顺序及字段类型一致即可,名称不需要一致)、一致的副本数量和一致副本放置方式,进而保证这些Table对应的分桶副本会落在相同一组BE节点上。这样如果join列为分桶键,则计算节点只需做本地join,而无需从其他节点获取数据,进而实现大表join的加速。
在表设计文档中,我们先不细述Colocation Join的原理和实现,仅简单说明一下使用方式。创建表
table12:
CREATE TABLE table12(
k1 int,
v1 int sum
)
DISTRIBUTED BY HASH(k1) BUCKETS 8
PROPERTIES(
"colocate_with" = "group1",
"replication_num" = "1"
);
在建表时,我们在PROPERTIES中指定属性"colocate_with