訂閱
糾錯
加入自媒體

一文詳解HiveSQL執(zhí)行計劃

2021-06-21 10:43
園陌
關注

案例三:哪條sql執(zhí)行效率高呢?

觀察兩條sql語句

SELECT
a.id,
b.user_name
FROM
test1 a
JOIN test2 b ON a.id = b.id
WHERE
a.id > 2;
SELECT
a.id,
b.user_name
FROM
(SELECT * FROM test1 WHERE id > 2) a
JOIN test2 b ON a.id = b.id;

這兩條sql語句輸出的結果是一樣的,但是哪條sql執(zhí)行效率高呢?

有人說第一條sql執(zhí)行效率高,因為第二條sql有子查詢,子查詢會影響性能;

有人說第二條sql執(zhí)行效率高,因為先過濾之后,在進行join時的條數(shù)減少了,所以執(zhí)行效率就高了。

到底哪條sql效率高呢,我們直接在sql語句前面加上 explain,看下執(zhí)行計劃不就知道了嘛!

在第一條sql語句前加上 explain,得到如下結果

hive (default)> explain select a.id,b.user_name from test1 a join test2 b on a.id=b.id where a.id >2;
OK
Explain
STAGE DEPENDENCIES:
 Stage-4 is a root stage
 Stage-3 depends on stages: Stage-4
 Stage-0 depends on stages: Stage-3
STAGE PLANS:
 Stage: Stage-4
   Map Reduce Local Work
     Alias -> Map Local Tables:
       $hdt$_0:a
         Fetch Operator
           limit: -1
     Alias -> Map Local Operator Tree:
       $hdt$_0:a
         TableScan
           alias: a
           Statistics: Num rows: 6 Data size: 75 Basic stats: COMPLETE Column stats: NONE
           Filter Operator
             predicate: (id > 2) (type: boolean)
             Statistics: Num rows: 2 Data size: 25 Basic stats: COMPLETE Column stats: NONE
             Select Operator
               expressions: id (type: int)
               outputColumnNames: _col0
               Statistics: Num rows: 2 Data size: 25 Basic stats: COMPLETE Column stats: NONE
               HashTable Sink Operator
                 keys:
                   0 _col0 (type: int)
                   1 _col0 (type: int)
 Stage: Stage-3
   Map Reduce
     Map Operator Tree:
         TableScan
           alias: b
           Statistics: Num rows: 6 Data size: 75 Basic stats: COMPLETE Column stats: NONE
           Filter Operator
             predicate: (id > 2) (type: boolean)
             Statistics: Num rows: 2 Data size: 25 Basic stats: COMPLETE Column stats: NONE
             Select Operator
               expressions: id (type: int), user_name (type: string)
               outputColumnNames: _col0, _col1
               Statistics: Num rows: 2 Data size: 25 Basic stats: COMPLETE Column stats: NONE
               Map Join Operator
                 condition map:
                      Inner Join 0 to 1
                 keys:
                   0 _col0 (type: int)
                   1 _col0 (type: int)
                 outputColumnNames: _col0, _col2
                 Statistics: Num rows: 2 Data size: 27 Basic stats: COMPLETE Column stats: NONE
                 Select Operator
                   expressions: _col0 (type: int), _col2 (type: string)
                   outputColumnNames: _col0, _col1
                   Statistics: Num rows: 2 Data size: 27 Basic stats: COMPLETE Column stats: NONE
                   File Output Operator
                     compressed: false
                     Statistics: Num rows: 2 Data size: 27 Basic stats: COMPLETE Column stats: NONE
                     table:
                         input format: org.apache.hadoop.mapred.SequenceFileInputFormat
                         output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat
                         serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
     Local Work:
       Map Reduce Local Work
 Stage: Stage-0
   Fetch Operator
     limit: -1
     Processor Tree:
       ListSink

<上一頁  1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

    掃碼關注公眾號
    OFweek人工智能網
    獲取更多精彩內容
    文章糾錯
    x
    *文字標題:
    *糾錯內容:
    聯(lián)系郵箱:
    *驗 證 碼:

    粵公網安備 44030502002758號