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