1. 程式人生 > >資料庫中Explain 執行過程的檢視

資料庫中Explain 執行過程的檢視

因為最近看Hive ,Hive 其實就是MapReduce的封裝,基於一個統一的查詢分析層,通過SQL語句的方式對HDFS上的資料查詢進行查詢,統計和分析,這個過程是一個MR過程,我們如何能夠通過檢視執行sql的過程來檢視MR這個過程,從而做到後續的一些優化之類的。

使用EXPLAIN  瞭解Hive是如何工作,第一個就是需要了解EXPLAIN功能

我們在hive shell 下面輸入EXPLAIN可以看到:

explain會把查詢語句轉化成stage組成的序列,主要由三方面組成:

        1:查詢的抽象語法樹

        2:plane中各個stage的依賴情況

       3:每個階段的具體描述:描述具體來說就是顯示出對應的操作運算元和與之操作的對應的資料,例如查詢運算元,filter運算元,fetch運算元等等。下面我來看一個具體的例子:

hive> explain [extended] --加上關鍵字extended,則顯示抽象語法樹
    > select * from student                
    > cluster by age;

 1.查詢的抽象語法樹(沒用,可以忽略)

 2.執行計劃計劃的不同階段之間的依賴關係(很重要)

OK
STAGE DEPENDENCIES:
  Stage-1 is a root stage
  Stage-0 is a root stage

3.每個場景的描述

STAGE PLANS:
  Stage: Stage-1
    Map Reduce
      Map Operator Tree:        //發生在job的 map 處理階段過程
          TableScan        //讀取表的資料
            alias: student      //表名為student,若select * from emp e;表有別名則顯示別名e
            Statistics: Num rows: 0 Data size: 74 Basic stats: PARTIAL Column stats: NONE
            Select Operator
              expressions: age (type: int), name (type: string)
              outputColumnNames: _col0, _col1
              Statistics: Num rows: 0 Data size: 74 Basic stats: PARTIAL Column stats: NONE
              Reduce Output Operator
                key expressions: _col0 (type: int)
                sort order: +
                Map-reduce partition columns: _col0 (type: int)
                Statistics: Num rows: 0 Data size: 74 Basic stats: PARTIAL Column stats: NONE
                value expressions: _col0 (type: int), _col1 (type: string)
      Reduce Operator Tree:      //發生在job的 reduce 處理階段過程
        Extract
          Statistics: Num rows: 0 Data size: 74 Basic stats: PARTIAL Column stats: NONE
          File Output Operator
            compressed: false
            Statistics: Num rows: 0 Data size: 74 Basic stats: PARTIAL Column stats: NONE
            table:
                                //說明輸入格式是TextInputFormat
                input format: org.apache.hadoop.mapred.TextInputFormat
                                //說明輸出格式是HiveIgnoreKeyTextOutputFormat
                output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
                serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe

  Stage: Stage-0
    Fetch Operator
      limit: -1                    //--job中沒有Limit 

Time taken: 0.085 seconds, Fetched: 36 row(s)

總結:

1,每個stage都是一個獨立的MR,複雜的hql語句可以產生多個stage,可以通過執行計劃的描述,看看具體步驟是什麼。 2,執行計劃有時預測資料量,不是真實執行,可能不準確