Optimizer是目前为止中catalyst中最重要的部分。主要做用是把analyzed logicalPlan变成optimized LogicalPlan。optimizer和analyzer都继承自RuleExecutor。因此表现形式上都差很少。在analyzer基础上理解起来会比较简单。大数据
Optimizer相似analyzer,里面有一系列的batches,里面包含了一系列的rules,每一个rule都有个迭代次数。为何有迭代次数呢,由于优化是不断的执行某一过程来改善行为,几乎全部复杂点的程序都会有这样的机制。优化
Optimizer是怎么进行优化的,有两个级别,分为有算子和表达式级别的优化。由于做用对象是TreeNode,咱们能够看到TreeNode有两个子类,QueryPlan和Expression。orm
而在TreeNode中提供了一系列的树遍历方法,最重要的是transform方法。会把规则运用到全部的子节点,同时,咱们从注释能够看到,在操做时不会修改原来的树,只会变成新的树。对象
固然,Optimizer最关键的仍是rules的处理。咱们简单看下。继承
从整体优化思路看,该合并的合并,该裁剪的裁剪,该简化的进行进化。这块处理是catalyst的精华,如今了解的还比较初步,后面会结合实例,再深刻分析下。ip
DT大数据天天晚上20:00YY频道现场授课频道68917580it