MaxCompute Optimizer之表达式约化

文章转载自jiehong
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钉钉群讨论

阅读原文请点击

时间: 2024-08-15 19:02:44

MaxCompute Optimizer之表达式约化的相关文章

MaxCompute文章索引

概况介绍: MaxCompute 2.0 生态开放之路及最新发展 10年老兵带你看尽MaxCompute大数据运算挑战与实践 一分钟了解阿里云产品:大数据计算服务MaxCompute概述 数加平台如何通过Serverless 架构实现普惠大数据 淘宝大数据之路 应用案例: 日志分析: 云数据,大计算-海量日志数据分析与应用 <海量日志数据分析与应用>之数据采集 <海量日志数据分析与应用>之社交数据分析:好友推荐 <海量日志数据分析与应用>之报表分析与展现 <海量日

深入MaxCompute理解数据、运算和用户的大脑:基于代价的优化器

回顾大数据技术领域大事件,最早可追溯到06年Hadoop的正式启动,而环顾四下,围绕着数据库及数据处理引擎,业内充斥着各种各样的大数据技术.这是个技术人的好时代,仅数据库领域热门DB就有300+,围绕着Hadoop生态圈的大数据处理技术更是繁花似锦.在云栖社区2017在线技术峰会大数据技术峰会上,阿里云大数据计算平台架构师林伟做了题为<MaxCompute的大脑:基于代价的优化器>的分享,为大家分享阿里巴巴大数据计算服务的大脑--基于代价的优化器的设计和架构. MaxCompute简介 大数据

Vectorized Execution Engine in MaxCompute 2.0简介

文章转自ruanxi 前言 在<数据库系统中的Code Generation技术介绍>一文中,我们阐述了代码的CPU执行效率对于大规模分布式OLAP系统的重要性.现在简单总结如下: OLAP系统中查询往往比较复杂,比如多表Join, 各种聚合函数以及窗口函数,其中涉及大量的Hash计算(比如采用Hash Join, Hash Aggregation),排序(比如采用Merge-Sort Join)操作,CPU开销比较大. SSD等高性能存储硬件的使用,以及内存计算的普及(比如Spark中利用R

Catalyst Optimizer优化器

Spark SQL的优化器Catalyst是易于扩展的.它同时支持基于规则(rule-based)和基于代价(cost-based)的优化方法. 在它内部,Catalyst包含了一个表示树和操作树的规则的通用库.在此框架下,目前实现了针对关系查询处理(如,表达式,逻辑查询计划)的库,和在处理查询执行不同阶段(分析,逻辑优化,物理优化,代码生成)的一些规则. Tree 在Catalyst主要的数据类型就是由节点对象组成的树.每个节点都有一个节点类型和0至多个孩子.新节点类型都是Scala里面Tre

第五篇:Spark SQL Catalyst源码分析之Optimizer

/** Spark SQL源码分析系列文章*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将详细讲解Spark SQL的Optimizer的优化思想以及Optimizer在Catalyst里的表现方式,并加上自己的实践,对Optimizer有一个直观的认识. Optimizer的主要职责是将Analyzer给Resolved的Logical Plan根据不同的优化策略Batch,来对语法树进行优化

Spark SQL Catalyst源码分析之Optimizer

前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将详细讲解Spark SQL的Optimizer的优化思想以及Optimizer在Catalyst里的表现方式,并加上自己的实践,对Optimizer有一个直观的认识. Optimizer的主要职责是将Analyzer给Resolved的Logical Plan根据不同的优化策略Batch,来对语法树进行优化,优化逻辑计划节点(Logical Plan)以

MaxCompute助力ofo实现精细化运营:日订单超3200万、整体运行效率提升76%

摘要:ofo小黄车大数据BI系统负责人龙利民为大家分享了ofo的上云体验,重点分享了MaxCompute的应用实践,最后对阿里云提出了自己的建议需求. 关于ofo小黄车 共享经济不仅与技术相关,它还关乎人类共同命运,关乎可持续发展. 原文地址:http://click.aliyun.com/m/43964/ ofo小黄车大数据BI系统负责人龙利民为大家分享了ofo的上云体验,重点分享了MaxCompute的应用实践,最后对阿里云提出了自己的建议需求. 关于ofo小黄车 共享经济不仅与技术相关,它

MaxCompute 中的Code Generation技术简介

摘要: 前言 在<数据库系统中的Code Generation技术介绍>中,我们简单介绍了一下Code Generation技术及其在大规模OLAP系统,特别是大规模分布式OLAP系统中的重要性.MaxCompute采用了Code Generation技术来提高计算效率.在MaxCompute 前言 在<数据库系统中的Code Generation技术介绍>中,我们简单介绍了一下Code Generation技术及其在大规模OLAP系统,特别是大规模分布式OLAP系统中的重要性.M

各种优化器Optimizer的总结与比较

1.梯度下降法(Gradient Descent) 梯度下降法是最基本的一类优化器,目前主要分为三种梯度下降法: 标准梯度下降法(GD, Gradient Descent) 随机梯度下降法(SGD, Stochastic Gradient Descent) 批量梯度下降法(BGD, Batch Gradient Descent) class tf.train.GradientDescentOptimizer 使用梯度下降算法的Optimizer 标准梯度下降法(GD) 假设要学习训练的模型参数为