带你读《2022技术人的百宝黑皮书》——ODPS SQL优化总结(1) https://developer.aliyun.com/article/1247150?groupCode=taobaotech
基础知识经验总结与沉淀
SQL的一些使用技巧
null
我们在进行=/<>/in/not in等判断时,null会不包含在这些判断条件中,所以在对null的处理时可以使用nvl或者coalesce函数对null进行默认转换。
select *
在数据开发或者线上任务时,尽可能提前对列进行剪裁,即使是全表字段都需要,也尽可能的把字段都写出来(如果实在觉得麻烦,可以使用数据地图的生成select功能),一是减少了数据运算中不必要的数据读取,二是避免后期因为原表或者目标表字段增加,导致的任务报错。
multi insert
读取同一张表,但是因为粒度不同,需要插入多张表时,可以考虑使用 from () tab insert overwrite A insert overwrite B 的方式,减少资源的浪费。当然,有些团队的数仓开发规范中会规定一个任务不能有两个目标表,具体情况可以视情况尽可能复用公共数据,如通过临时表的方式临时存储这部分逻辑。
分区限定
ODPS表大部分都是分区表,分区表又会根据业务规则分为增量表、全量表、快照表等。所以在做简单查询,或者数据探查时,一定要养成习惯先限定分区ds。经常会在jobhistory中看到很多好资源的任务都是因为分区限定不合理或者没有限定分区导致的。
limit的使用
临时查询或者数据探查时,养成习惯加上limit,会快速的查询出你想要的数据,且消耗更少的资源。
UDF函数的使用
尽可能把UDF的使用下沉到第一层子查询中,效率会有很大的提升。
行转列、列转行
collect_set 、lateral view函数可以实现行转列或者列转行的功能,好多大佬也都写过类似的ATA,可以参考。
带你读《2022技术人的百宝黑皮书》——ODPS SQL优化总结(3) https://developer.aliyun.com/article/1247147?groupCode=taobaotech