MaxCompute SQL中避免一些消耗资源的操作有哪些?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
1.少用distinct,容易触发数据倾斜
2.count(distinct)处理的时间会很长可以转换成count()+ group by。因为如果原先只用count(distinct)来处理表的数据,只会开启一个reduce任务来完成所有的计算,而改成count/sum + group by后,除了count/sum会开启一个reduce计算之外,group by也会单独开启另一个reduce来计算,因此数据量大时可以明显提升查询速度。
3.尽量避免Order by,order by会触发全局排序,只能单点运行,效率低,如果业务允许,可以改成distribute by + sort by
4.将full outer join 改为left outer join + union all 并对小表使用上mapjoin。
5.多个表join时,join顺序很重要,优先选择join结果输出小的表先关联,能有效减少中间数据量,节省IO和计算资源。
6.读取相同源表时可以合并成一条sql,系统会优化只读取一次。