问题现象
使用
tableau
工具拉取字段,在没有
group by
字段时,捕捉
tableau
下发给
8a MPP
的
sql
发现,在不指定
group by
的情况下会生成
group by 1.10000000000000001
,
sql
会根据生成的临时字段增加一步执行操作,浪费大量时间。
解决方法:
group by 只存在 const 类型的元素,hash redistribute 会对 const 进行 Hash 数
据重分布,导致全部将数据分布到相同的节点上,严重影响性能。
需要设置常量 group by 的优化参数 _t_gcluster_optimizer_group_const 来控
制此功能状态,可以通过
explain
执行计划查看执行情况。
0:表示优化功能关闭(默认值),会对 group by 的 const 进行 hash 重分布
1:表示功能开启,不对常量进行重分布
注:
select count(1) from t1 group by 'a'; 常量列要带上单引号
select a from t1 group by 1; group by 中的 1 表示按投影列的第一个元素
(
a)进行重分布