文档章节

MaxCompute Optimizer之表达式约化

_夜枫
 _夜枫
发布于 2017/03/17 11:39
字数 413
阅读 8
收藏 0

Optimizer是MaxCompute处理SQL任务的优化器,它的主旨于在根据关系代数的等价描述将中间的执行计划进一步地等价变换,以生成代价更优的执行计划。Optimizer内部有很多优化器,此文章将会介绍其中一种优化器--表达式约化(ExpressionReduction)。

接下来根据一个具体的例子来描述:


如表table_src (foo STRING, bar BIGINT)

SELECT foo like '%ood',  concat('hello', 'world'), avg(bar) over (partition by concat(foo, 'day')) FROM table_src 
WHERE foo = 'good' and datediff(to_date('2016-07-01', 'yyyy-mm-dd'), to_date('2016-06-30', 'yyyy-mm-dd'), 'dd') = 1


ExpressionReduction可以针对所有存在的表达式进行计算,而目前主要在三种操作符进行优化:Select、Filter和Window。

  • Select: 是指对数据进行映射,生成的执行计划中会有个Project操作符
  • Filter: 是指对数据进行过滤,生成的执行计划中会有个Filter操作符
  • Window: 是指先对进行数据分类,而后在同一类中进行聚合处理

对于优化的方式有两种:一种是表达式本身是确定性,可以计算成常量;另一种是依赖前置操作符获得引用谓词,从而使得表达式计算成常量。

_


foo like '%ood' 表达式是利用前置操作符获得foo = 'good'的引用谓词进行计算
concat('hello', 'wold') 是个确定性表达式,而计算成常量

此优化可以把这些可约化的表达式的计算代码由原来的O(n)减少至O(1),从而减少了计算的成本。

 

欢迎加入MaxCompute钉钉群讨论

42559c7dde62e4d333c90e02efdf416257a4be27

本文转载自:https://yq.aliyun.com/articles/61609

_夜枫
粉丝 10
博文 506
码字总数 0
作品 0
朝阳
后端工程师
私信 提问
大数据计算服务MaxCompute 5月新功能发布一览

5月MaxCompute又发布哪些新功能,优化了哪些产品体验呢?小编带你一起看~ 【新功能】 MaxCompute提供全表扫描的设置操作 以开关的形式,通过设置允许或禁止全表扫描。true为允许,false为禁止...

晋恒
2018/06/12
0
0
MaxCompute2.0新功能介绍

摘要: 在过去的两年内,MaxCompute进行了翻天覆地的重构,从1.0版本全面升级到了2.0版本。而大家或许对于MaxCompute 2.0的一些新特性并不了解,在本文中,MaxCompute技术专家秋鹏就为大家详...

xx暖忆
2018/10/24
0
0
MaxCompute助力ofo实现精细化运营:日订单超3200万、整体运行效率提升76%

摘要: ofo小黄车大数据BI系统负责人龙利民为大家分享了ofo的上云体验,重点分享了MaxCompute的应用实践,最后对阿里云提出了自己的建议需求。 关于ofo小黄车 共享经济不仅与技术相关,它还关...

阿里云云栖社区
2018/03/16
20
0
MaxCompute - ODPS重装上阵 第四弹 - CTE,VALUES,SEMIJOIN

摘要: MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务。 MaxCompute除了持续优化性能外,也致力于提...

阿里云云栖社区
2018/01/15
59
0
CBO对于Oracle SQL执行计划的影响(之二)

初试化参数对于执行计划的影响 有几个初试化参数对于多表连接的执行计划有重要的关系。 在Oracle 8 release 8.0.5中引入了两个参数OPTIMIZERMAXPERMUTATIONS 和 OPTIMIZERSEARCHLIMIT optim...

郑加威
2017/01/22
8
0

没有更多内容

加载失败,请刷新页面

加载更多

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
今天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
今天
27
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
今天
63
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
今天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
今天
59
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部