MaxCompute Optimizer之表達式約化
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、機器學習、分散式、可視化、人工智慧等大數據領域。推薦閱讀:
※大數據雙創行動計劃丨校車的智慧在哪裡?
※大數據的價值,在「用」不在「大」
※擁抱20餘家主機廠,彩虹無線提供車聯網全產業鏈服務
※鹿豹座平台(1.1-1.7)大數據新聞每周精選
※大數據架構師技能
TAG:大數據 |