南大通用GBase8a多列动态重分布hash join参数_t_gcluster_join_multi_hash_optimize_level介绍

31 阅读3分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

参数名称: _t_gcluster_join_multi_hash_optimize_level

取值: [1|2]

默认值: 1

说明: 多列 hash 优化等级

  1. 只支持静态多列

  2. 支持静态和动态重分布多列。

修改方式: 可使用 set 语句修改值也可在配置文件中修改值。适用于 session、global范围均可。

详细解释及示例:

该参数控制2表join的行为,当两表join,且两表均为分布表,参与join的等值关联条件列非两表相同的hash分别列时:

取值为1时的执行计划策略为重分布,重分布按照等值条件中的最后一个等值条件进行数据重分布,

取值为2时的执行计划将其中一张表按照另一张表的hash分布列进行重分布,如果hash分布列为多列hash将以多列hash形式进行重分布

如下例:

1)当join两表一张表为多列hash,另一张表为随机分布表时:

 CREATE TABLE corrsub1 (
hcol1 int(11) DEFAULT NULL,
hcol2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
)  DISTRIBUTED BY('hcol1','hcol2')  – 多列hash分布表

CREATE TABLE corrsubr2 (
col1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
)  – 随机分布表

set _t_gcluster_join_multi_hash_optimize_level = 1 时执行计划

按照join等值列表中的最后一个关联列 t1表hcol2和t2表col2,对两表进行重分布

set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划

按照 t1表的多列hash分布列hcol1和hcol2,对t2表进行重分布

2)当两表均为随机分布表时:

CREATE TABLE corrsubr1 (
col1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
)  – 随机分布表

CREATE TABLE corrsubr2 (
col1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
)  – 随机分布表

set _t_gcluster_join_multi_hash_optimize_level = 1 时执行计划

按照t1表和t2表等值join列中的最后一个列进行t1和t2表的动态重分布

set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划

按照t1和t2表等值join列中的全部列进行动态重分布

3)需要注意:当两表分别为hash分布表,但join列表无法对上时,如果有单列hash表,会按照单列进行重分布:

 CREATE TABLE corrsub1 (
hcol1 int(11) DEFAULT NULL,
hcol2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
)  DISTRIBUTED BY('hcol1','hcol2')  – 多列hash分布表

 CREATE TABLE corrsub2 (
hcol1 int(11) DEFAULT NULL,
col2 varchar(10) DEFAULT NULL,
col3 varchar(10) DEFAULT NULL
)  DISTRIBUTED BY('hcol1')  – 单列hash分布表

set _t_gcluster_join_multi_hash_optimize_level = 2 时执行计划

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。