博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Catalyst揭秘 Day5 optimizer解析
阅读量:6693 次
发布时间:2019-06-25

本文共 820 字,大约阅读时间需要 2 分钟。

Catalyst揭秘 Day5

optimizer解析

Optimizer是目前为止中catalyst中最重要的部分。主要作用是把analyzed logicalPlan变成optimized LogicalPlan。optimizer和analyzer都继承自RuleExecutor。所以表现形式上都差不多。在analyzer基础上理解起来会比较简单。

总体分析

Optimizer类似analyzer,里面有一系列的batches,里面包含了一系列的rules,每个rule都有个迭代次数。为什么有迭代次数呢,因为优化是不断的执行某一过程来改善行为,几乎所有复杂点的程序都会有这样的机制。

Snip20160724_162

Optimizer是怎么进行优化的,有两个级别,分为有算子和表达式级别的优化。因为作用对象是TreeNode,我们可以看到TreeNode有两个子类,QueryPlan和Expression。

Snip20160724_163

而在TreeNode中提供了一系列的树遍历方法,最重要的是transform方法。会把规则运用到所有的子节点,同时,我们从注释可以看到,在操作时不会修改原来的树,只会变成新的树。

Snip20160724_165

规则分析

当然,Optimizer最关键的还是rules的处理。我们简单看下。

Snip20160724_167

  1. 四个Push规则,会进行条件下推,更早的过滤掉不需要的元素。
  2. ColumnPrunning,列裁剪,直接选出想要的列,提前消除掉不需要的属性。
  3. CombineFilters、CombineLimits,把多个条件合并为一个条件,减少操作次数。

从总体优化思路看,该合并的合并,该裁剪的裁剪,该简化的进行进化。这块处理是catalyst的精华,现在了解的还比较初步,后面会结合实例,再深入分析下。

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

转载于:https://www.cnblogs.com/dt-zhw/p/5700717.html

你可能感兴趣的文章
基于Java语言构建区块链(三)—— 持久化 & 命令行
查看>>
iOS开发,轻松获取根控制器当前控制器的正确方式
查看>>
Akka系列(九):Akka分布式之Akka Remote
查看>>
CDH安装系统环境准备——系统版本和安装包下载地址指南
查看>>
一个灵活设置十六进制颜色值的方法
查看>>
JavaScript 工作原理之十四-解析,语法抽象树及最小化解析时间的 5 条小技巧...
查看>>
Java杂记9—NIO
查看>>
算法(四):图解狄克斯特拉算法
查看>>
css3动画属性整理
查看>>
如何针对性替换数组里的某几个对象
查看>>
git基础整理
查看>>
【前端】 form.get 方式上传对象数组给后台
查看>>
阿里智能工作软件机器人——码栈应用教程,让一切变得自动化
查看>>
Angular service 详解
查看>>
百度研发面经
查看>>
深度解析 Go 语言中「切片」的三种特殊状态
查看>>
ES6 - 函数扩展
查看>>
Linux中apt与apt-get命令的区别与解释(转)
查看>>
原生js 类名操作 增加 删除
查看>>
iOS 中多音频处理
查看>>