Catalyst揭祕 Day5 optimizer解析

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_163orm

而在TreeNode中提供了一系列的樹遍歷方法,最重要的是transform方法。會把規則運用到全部的子節點,同時,咱們從註釋能夠看到,在操做時不會修改原來的樹,只會變成新的樹。
Snip20160724_165對象

規則分析

固然,Optimizer最關鍵的仍是rules的處理。咱們簡單看下。繼承

Snip20160724_167

  1. 四個Push規則,會進行條件下推,更早的過濾掉不須要的元素。
  2. ColumnPrunning,列裁剪,直接選出想要的列,提早消除掉不須要的屬性。
  3. CombineFilters、CombineLimits,把多個條件合併爲一個條件,減小操做次數。

從整體優化思路看,該合併的合併,該裁剪的裁剪,該簡化的進行進化。這塊處理是catalyst的精華,如今瞭解的還比較初步,後面會結合實例,再深刻分析下。ip

欲知後事如何,且聽下回分解!

DT大數據天天晚上20:00YY頻道現場授課頻道68917580it

相關文章
相關標籤/搜索