MaxCompute的优化避免一些消耗资源的操作是什么?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
避免一些消耗资源的操作,比如: 少用distinct,容易触发数据倾斜 count(distinct)处理的时间会很长可以转换成count()+ group by。因为如果原先只用count(distinct)来处理表的数据,只会开启一个reduce任务来完成所有的计算,而改成count/sum + group by后,除了count/sum会开启一个reduce计算之外,group by也会单独开启另一个reduce来计算,因此数据量大时可以明显提升查询速度。 尽量避免Order by,order by会触发全局排序,只能单点运行,效率低,如果业务允许,可以改成distribute by + sort by 将full outer join 改为left outer join + union all 并对小表使用上mapjoin。 多个表join时,join顺序很重要,优先选择join结果输出小的表先关联,能有效减少中间数据量,节省IO和计算资源。 读取相同源表时可以合并成一条sql,系统会优化只读取一次。 (5) 尽量使用内置的UDF函数和窗口函数:内置UDF在实现时做了很多优化,运行快,省资源,窗口函数本身能处理很多复杂问题。 (6) 尽可能保证表达式两边的数据类型一致:如果发生隐式转换容易造成精度问题,比如string和bigint都转成double来相等比较,悲观情况下,可能触发数据倾斜。这时要cast显式转换一下 工作中还用到的: - 数据量达到千万级别的,尽量固化分区,不在查询sql里面进行动态分区,减少资源使用 - sql行数较长的,尽量拆分成工作流任务,可以优化性能和排查问题的难易度。 - 维度表要放到mapjoin里,加大资源利用率 - 数据倾斜较高的表,先落地成临时表 - 每日全量推送任务的,如果表级数据量较高的,分析是否可以改成增量模式。 https://blog.csdn.net/qq_33439938/article/details/108558941