前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MaxCompute SQL调优

MaxCompute SQL调优

作者头像
曼路
发布2022-01-06 15:30:34
1.5K0
发布2022-01-06 15:30:34
举报
文章被收录于专栏:浪淘沙浪淘沙

SQL成本计算=读取IO数据量*SQL复杂度

所以,SQL调优可以从两方面入手:①减少数据量;②降低SQL复杂度

一、减少数据量

1.表分区优化

(1)创建分区表

(2)分区裁剪、避免全表扫描。

(3)分区尽量使用常量、减少分区字段函数使用

(4)分区按层级顺序裁剪

(5)写入静态分区,优化数据存储;减少动态分区,防止小文件过多。

2.列裁剪、条件过滤

(1)避免使用select * ,查询需要的列

(2)使用Limit N

(3)使用条件过滤,pushdown.

3.源表合并

(1)合并不同SQL,一读多计算

(2)子查询合并

二、优化SQL复杂度

1.JOIN连接,MapJoin优化(SELECT /* + MAPJOIN(b) */)

运行原理:

①小表数据全部加载内存;

②读取大表的每个Task加载一份小表数据。

限制条件:

​​​

使用场景:

①大表关联小标;

②使用不等值条件,例如or;

③系统内部自动优化为MapJoin;

④普通join连接可能发生数据倾斜(原因:null值、缺省值、大Key值;数据分发不合理等),可以显示指定mapjoin:

增加源表作为大表的并发度:set odps.sql.mapper.split.size = 128;

增加子查询作为大表并发度:set odps.sql.joiner.instances = 1111;

2.Full outer join 全连接优化

(1)使用限制

①只能使用meger join,不能使用map join

②出现数据倾斜,很难通过参数调节解决。

(2)解决方案

①将full outer join 转化为left outer join + union all

②将小表设置为mapjoin

3.JOIN条件过滤

4.类型转换

(1)尽可能保证表达式两边的类型一致(Cast转换)

(2)隐式转换(尽量少使用隐式转换,防止数据倾斜等问题)

5.聚合运算优化

(1)减少使用distinct

会导致数据膨胀,网络传输和处理的数据量暴增;CPU、IO、内存资源消耗增加;也可能导致数据倾斜。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-01-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、减少数据量
  • 二、优化SQL复杂度
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档