Hive 執行計畫

2021-09-25 03:34:31 字數 2614 閱讀 7694

執行語句

hive> explain select s.id, s.name from student s left outer join student_tmp st on s.name = st.name;
結果,紅色字型為我新增的注釋

hive> explain select s.id, s.name from student s left outer join student_tmp st on s.name = st.name;                         

okabstract syntax tree:

(tok_query (tok_from (tok_leftouterjoin (tok_tabref (tok_tabname student) s) (tok_tabref (tok_tabname student_tmp) st) (= (. (tok_table_or_col s) name) (. (tok_table_or_col st) name)))) (tok_insert (tok_destination (tok_dir tok_tmp_file)) (tok_select (tok_selexpr (. (tok_table_or_col s) id)) (tok_selexpr (. (tok_table_or_col s) name)))))

stage dependencies: 「這個sql將被分成兩個階段執行。基本上每個階段會對應乙個mapreduce job,stage-0除外。因為stage-0只是fetch結果集,不需要mapreduce job」

stage-1 is a root stage

stage-0 is a root stage

stage plans:

stage: stage-1

map reduce

alias -> map operator tree: 「map job開始」

s tablescan

alias: s 「掃瞄表student」

reduce output operator 「這裡描述map的輸出,也就是reduce的輸入。比如key,partition,sort等資訊。」

key expressions: 「reduce job的key」

expr: name

type: string

sort order: + 「這裡表示按乙個字段排序,如果是按兩個字段排序,那麼就會有兩個+(++),更多以此類推」

map-reduce partition columns: 「partition的資訊,由此也可以看出hive在join的時候會以join on後的列作為partition的列,以保證具有相同此列的值的行被分到同乙個reduce中去」

expr: name

type: string

tag: 0 「用於標示這個掃瞄的結果,後面的join會用到它」

value expressions: 「表示select 後面的列」

expr: id

type: int

expr: name

type: string

st tablescan 「開始掃瞄第二張表,和上面的一樣」

alias: st

reduce output operator

key expressions:

expr: name

type: string

sort order: +

map-reduce partition columns:

expr: name

type: string

tag: 1

reduce operator tree: 「reduce job開始」

join operator

condition map:

left outer join0 to 1 「tag 0 out join tag 1」

condition expressions: 「這裡也是描述select 後的列,和join沒有關係。這裡我們的select後的列是 s.id 和 s.name, 所以0後面有兩個字段, 1後面沒有」

0

1 handleskewjoin: false

outputcolumnnames: _col0, _col2

select operator

expressions:

expr: _col0

type: int

expr: _col2

type: string

outputcolumnnames: _col0, _col1

file output operator

compressed: false

globaltableid: 0

table:

input format: org.apache.hadoop.mapred.textinputformat

output format: org.apache.hadoop.hive.ql.io.hiveignorekeytextoutputformat

stage: stage-0

fetch operator

limit: -1

time taken: 0.216 seconds

hive執行計畫解析

3.sql執行計畫對映mr流程 4.執行計畫優化 2.1 大資料兩類sql框架 這兩種sql框架,概括了所有的大資料sql,幾乎不可能有第三種寫法,區別可能是業務複雜,寫的複雜點兒而已。2.2 解析sql執行計畫流程詳解 六步將普通的sql對映成了作業任務。重點是 邏輯執行計畫優化和物理執行計畫優化...

Hive 看懂Hive的執行計畫

一般執行計畫有兩個部分 stage dependencies 各個stage之間的依賴性 stage plan 各個stage的執行計畫 乙個stage並不一定是乙個mr,有可能是fetch operator,也有可能是move operator。乙個mr的執行計畫分為兩個部分 map operat...

ocacle 執行計畫 Oracle執行計畫

一 什麼是oracle執行計畫?執行計畫是一條查詢語句在oracle中的執行過程或訪問路徑的描述 二 怎樣檢視oracle執行計畫?因為我一直用的plsql遠端連線的公司資料庫,所以這裡以plsql為例 配置執行計畫需要顯示的項 工具 首選項 視窗型別 計畫視窗 根據需要配置要顯示在執行計畫中的列 ...