开发者社区> 海清> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

MaxCompute 费用暴涨之新增SQL分区裁剪失败

简介: 现象:因业务需求新增了SQL任务,这SQL扫描的表为分区表,且SQL条件里表只指定了一个分区,按指定的分区来看数据量并不大,但是SQL的费用非常高。费用比预想的结果相差几倍甚至10倍以上。 若只知道总体费用暴涨,但是没明确是什么任务暴涨,可以可以参考查看账单详情-使用记录文档,找出费用异常的记录。
+关注继续查看

现象:因业务需求新增了SQL任务,这SQL扫描的表为分区表,且SQL条件里表只指定了一个分区,按指定的分区来看数据量并不大,但是SQL的费用非常高。费用比预想的结果相差几倍甚至10倍以上。

若只知道总体费用暴涨,但是没明确是什么任务暴涨,可以可以参考查看账单详情-使用记录文档,找出费用异常的记录。

分析:我们先明确MaxCompute SQL后付费的计费公式:一条SQL执行的费用=扫描输入量 ️ SQL复杂度 ️ 0.3(¥/GB)。

变量主要是输入量和复杂度,但实际上复杂度最高也就为4,由复杂度引起的费用暴涨是比较罕见,我们不妨先把排查重点放在输入量上。

排查:
查看Logview的inputs信息

image

如上图会发现input的分区量是14个,这个与预想的(SQL条件中只指定一个分区)不一致。问题就出在这里,此时基本可以判断这个SQL的分区并没有裁剪好,也就是说最终输入量不是一个分区而是多个或者全表。

输入的分区量和预计的不一致,排除SQL中确实没有对分区设置条件这因素,那么就是分区裁剪失效了。
已知的分区裁剪失效场景主要有:分区条件用了自定义函数进行裁剪;在 Join 关联时的 Where 条件中也有可能会失效。

执行explain sql语句;看执行结果,读取的分区都有哪些,如执行explain select seller_id from xxxxx_trd_slr_ord_1d where ds=rand(); 结果如下:

看上图中红框的内容,表示读取了表 xxxxx_trd_slr_ord_1d 的 1344 个分区,即该表的所有分区,如果直接执行这个sql,最终会因为全表扫描导致输入量增加从而费用增加。

关于分区裁剪失败场景(使用函数或者跟join关联有关的场景)分析可以参考文档《分区剪裁合理性评估》。大家在执行sql前如果对分区的裁剪有疑虑,不妨执行一次explain sql语句;再执行SQL语句。

关于分区条件用自定义函数导致分区裁剪失效的解决方案,有两种方式:

  • 在编写UDF的时候,UDF类上加入Annotation。@com.aliyun.odps.udf.annotation.UdfProperty(isDeterministic=true)

    >注意: com.aliyun.odps.udf.annotation.UdfProperty定义在odps-sdk-udf.jar文件中。您需要把引用的odps-sdk-udf版本提高到0.30.x或以上。
    
  • 在SQL语句前设置Flag:set odps.sql.udf.ppr.deterministic = true;,此时SQL中所有的UDF均被视为deterministic。该操作执行的原理是做执行结果回填,但是结果回填存在限制,即最多回填1000个Partition。

    因此,如果UDF类加入Annotation,则可能会导致出现超过1000个回填结果的报错。此时您如果需要忽视此错误,可以通过设置Flag:`set odps.sql.udf.ppr.to.subquery = false;`全局关闭此功能。关闭后,UDF分区裁剪也会失效。
    

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云 MaxCompute 2020-8 月刊
MaxCompute商业化发布数据备份恢复和数据科学Mars两项重要功能,同时公测发布MaxCompute查询加速。秒级恢复误删除数据,分布式加速 Python 数据科学栈,自动识别短查询作业并加速处理,满足报表分析、即席查询场景的使用要求尽在8月刊。
9060 0
阿里云 MaxCompute 2020-6 月刊
MaxCompute备份与恢复功能(公测)发布,提供持续备份用户修改/删除历史数据,支持快速恢复,持续保护数据安全。 该功能适用于广泛的企业级客户,尤其适用于对数据保护有强需求、担心数据误删除以及担心数据被恶意删除的客户。
9320 0
阿里云 MaxCompute 2020-5 月刊
MaxCompute迁移工具MMA2.0新版本发布,MMA2.0不仅在技术架构上做了重构,在功能上也有重大升级,提升了迁移效率和运行稳定性的同时,在操作体验上也更加自动化和智能化。更多5月产品动态,欢迎阅读MaxCompute5月刊。
550 0
阿里云 MaxCompute 2020-4 月刊
4月MaxCompute审计日志发布,可通过历史事件及明细查询、实时行为事件分析,满足您实时审计、问题回溯分析等需求。同时,MaxCompute在支持实时消费监控告警的基础上新发布支持对按量付费单个SQL作业的消费进行控制,帮您更好的监控消费。更多4月的新功能与新解决方案,欢迎阅读4月刊。
1067 0
阿里云 MaxCompute 2020-3 月刊
MaxCompute3月新发功能,新增文档,精彩直播回放,尽在 MaxCompute 3月刊。
4639 0
阿里云 MaxCompute 2020-2 月刊
MaxCompute2020年2月刊为您带来Python UDF 支持Python 3 ,MaxCompute存储格式全面升级AliORC等九项最新发布功能。欢迎阅读。
367 0
阿里云 MaxCompute 2020-1 月刊
您好,MaxCompute 2020.1月刊如期而至,在疫情肆虐的日子里,祝福每一位开发者,平安健康,一切顺利。
1338 0
阿里云 MaxCompute 2019-12 月刊
2019年12月刊,您将了解到 MaxCompute推出更加灵活的预付费资源模型-非预留计算资源,让您在成本不变的情况下使用更多弹性的计算资源;同时,MaxCompute 支持使用开源地理空间函数,更多详情请阅读本月刊。
2604 0
阿里云 MaxCompute 2019-12 月刊
2019年12月刊中,您将了解到 MaxCompute推出更加灵活的预付费资源模型-非预留计算资源,让您在成本不变的情况下使用更多弹性的计算资源;同时,MaxCompute 支持使用开源地理空间函数,更多详情请阅读本月刊。
8052 0
阿里云 MaxCompute 2019-11 月刊
Tableau官方支持MaxCompute数据源,MaxCompute提供了对SQL查询任务结果的动态脱敏功能, 数据迁移工具全新发布等精彩内容尽在 11月刊,欢迎阅读。
10666 0
+关注
海清
阿里云数加培训讲师, 最擅长MaxCompute、大数据开发套件。
35
文章
1
问答
来源圈子
更多
MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。
+ 订阅
相关文档: MaxCompute
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载