大部分寫的hivesql,最後基本上都可以落到兩個角度:1.單錶分析:group by+聚合函式,2.多表關聯查詢,區別只是有的業務邏輯簡單一些,有的複雜一些而已:
執行計畫的生成步驟:
其中analyzer會和metainfo進行資訊交換,去做一些關聯查詢校驗的工作:表存不存在,欄位存不存在,字段拼寫是否正確等等,最終校驗完之後生成query block。
謂詞下推和map join都發生在邏輯計畫優化處,也就是logical optimizer。
一般執行計畫會分成三個部分:
獲得sql語句執行計畫的方式:
explain [extended|cbo|ast|dependency|authorization|locks|vectorization|analyze] sql query使用dependency引數,會返回query sql中所使用的表,會過濾掉臨時表。
使用authorization引數,會返回輸入輸出相關資訊以及當前執行的使用者等資訊。
在 explain 語句中使用extended會產生有關計畫中運算子的額外資訊。通常是物理資訊,如檔名。
hive 查詢將轉換為stage的序列(它更為定向的順迴圈圖形)。乙個stage並不一定是乙個mr,有可能是fetch operator,也有可能是move operator或者是rename operator甚至是和metastore 做互動
乙個mr的執行計畫分為兩個部分:
map operator tree:map端的執行計畫,map端的reduce會出現在這裡,名為reduce output operator。
reduce operator tree:reduce端的執行計畫。
有時候會因為沒有reduce 操作,導致沒有執行計畫沒有reduce operator tree,比如說select * from table_a where pt='xx' and city_name = 'xx市'
一些常見的operator:
tablescan 讀取資料,常見的屬性 alias,後面跟表名,如果表有別名,則顯示別名。
select operator 選取操作
joinoperator 完成join操作的運算元
group by operator 分組聚合, 常見的屬性 aggregations、mode , 當沒有keys屬性時只有乙個分組。
reduce output operator 輸出結果給reduce , 常見的屬性 sort order
fetch operator 客戶端獲取資料 , 常見屬性 limit
常見的屬性的取值及含義:
aggregations(聚合函式) 用在group by operator中,對應取值有:count(),sum()
mode 用在group by operator中,其對應取值分別為:1.hash 用雜湊函式提前聚合;mergepartial 合併之前的聚合結果;final:?;complete:沒有map端提前的聚合,所有操作都在reduce端處理。
如果把hive.map.aggr=false,那將groupby放到reducer才做,它對應的mode是complete.
sort order 用於reduce output operator中
+ 正序排序
』 『(空格) 不排序
++按兩列正序排序,如果有兩列
+- 正反排序,如果有兩列
-反向排序
如此類推
oracle執行計畫相關概念
oracle執行計畫相關概念 1.什麼是執行計畫?為什麼要了解執行計畫?為了執行一條sql語句,oracle可能必須要執行某些步驟的操作,每一步驟可能是從資料庫中物理檢索資料行,或者用某種方法準備資料行,供發出語句的使用者使用。oracle用來執行語句的這些步驟的組合即為執行計畫。執行計畫是sql優...
hive sql檔案的執行方法
1 執行不帶引數的hql檔案 hive f 檔名.字尾 例項 hive f chensq test1.hql 2 執行帶1個普通引數的hql檔案 直接在hive中執行 select count from 使用者名稱.表名 c where c.列名 01 hql檔案內容 select count fr...
oracle 清除相關物件的執行計畫
什麼時候 shared pool 裡面的 shared sql area 被 清除flush 幾種情況 1.相關表 cluster index 等,跟物件相關的,執行過analyze 語句後,oracle會清除原來的快取。2.相關物件被修改過,那麼這個sql area 就變成無效狀態,下一次讀的時候...