问题现象
使用 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)进行重分布
Tableau 性能优化:避免常量GROUP BY与_t_gcluster_optimizer_group_const参数
当使用Tableau工具且未指定GROUP BY字段时,会生成临时的GROUP BY1.10000000000000001,导致不必要的性能损耗。解决方案是通过设置_t_gcluster_optimizer_group_const参数来控制是否对常量GROUP BY进行Hash重分布。参数值为0表示关闭优化,会进行Hash重分布;值为1表示开启优化,常量不会被重分布。注意SQL语句中常量列需带引号,GROUP BY中的1表示按投影列第一元素重分布。
726

被折叠的 条评论
为什么被折叠?



