在doris中,默认的join方式主要是两种,一种是Broadcast Join,另外一种是Shuffle Join。但是在doris中还支持其他的Join方式,例如:Colocate Join和Bucket Shuffle Join,这些join在执行是优先顺序默认是:Colocate Join -> Bucket Shuffle Join -> Broadcast Join -> Shuffle Join。 那么这些join都有哪些特点呢?这篇文章我们来介绍下Colocation Join。
Colocation Join是doris中提供的一种join方式,它把一些表统一组织成一个group群组,所以这个Join的方式更适配于在规划表的时候使用。
举个例子,比如我们先现在有a,b,c三个表,这三个表在后续的业务中呢,我们需要使用到a表join b表。这时候我们可以把a表和b表放到同一个group里面,这样子doris会把a表的数据和B表的数据分片分布到同一个BE节点上,这时候我们如果进行查询的时候,只需要在本地进行join即可,几乎没有网络数据传输,这样子也达到了加快数据查询的目的。
那么如何使用Colocation Join呢,就是我们在前面介绍的,在规划的阶段,也就是创建表的时候,就为当前表指定group即可。例如:
CREATE TABLE `user_login_logs` ( `log_id` int(11) NULL COMMENT "", `log_msg` varchar(255) NULL COMMENT "", `client_ip` varchar(20) NULL COMMENT "", `service_name` varchar(20) NULL COMMENT "", `log_cts` datetime NULL COMMENT "" ) ENGINE=OLAP DUPLICATE KEY(`log_id`, `log_msg`) COMMENT "OLAP" PARTITION BY RANGE(`log_cts`) () DISTRIBUTED BY HASH(`client_ip`) BUCKETS 10 PROPERTIES ( "replication_allocation" = "tag.location.default: 1", "dynamic_partition.enable" = "true", "dynamic_partition.time_unit" = "DAY", "dynamic_partition.time_zone" = "Asia/Shanghai", "dynamic_partition.start" = "-7", "dynamic_partition.end" = "3", "dynamic_partition.prefix" = "p", "dynamic_partition.replication_allocation" = "tag.location.default: 1", "dynamic_partition.buckets" = "32", "dynamic_partition.create_history_partition" = "false", "dynamic_partition.history_partition_num" = "-1", "dynamic_partition.hot_partition_num" = "0", "dynamic_partition.reserved_history_periods" = "NULL", "in_memory" = "false", "storage_format" = "V2", "colocate_with" = "group1" );
值需要在properties里面指定: "colocate_with" = "group1" 即可。
如果某些表是之前创建的,那么我们可以直接修改下表信息,新增分组,例如:
ALTER TABLE tbl SET ("colocate_with" = "group1");
然后在查询的时候,doris会根据join的优化顺序选择Colocation Join。
最后附上查看所有的group信息的命令:
SHOW PROC '/colocation_group';
具体的含义如下:
序号 | 字段 | 含义 |
1 | GroupId | 一个 Group 的全集群唯一标识,前半部分为 db id,后半部分为 group id。 |
2 | GroupName | Group 的全名。 |
3 | TabletIds | 该 Group 包含的 Table 的 id 列表。 |
4 | BucketsNum | 分桶数。 |
5 | ReplicationNum | 副本数。 |
6 | DistCols | Distribution columns,即分桶列类型。 |
7 | IsStable | 该 Group 是否稳定 |
还没有评论,来说两句吧...