Hive的EXPLAIN命令(十四)

1. 前言

Hive本身是不會生成Java MapReduce算法程序的,而是生成一個表示“job執行計劃”的XML文件驅動執行內置的、原生的Mapper和Reducer模塊。換句話說,這些通用的模板函數類似於微型的語言翻譯程序,而這個驅動計算的“語言”是以XML形式編碼的。·

2. 基於詞頻統計分析EXPLAIN命令

SELECT word, count(1) AS count FROM
       > (SELECT explode(split(line, ' ')) AS word FROM wordcount) wc
       > GROUP BY word
       > ORDER BY count;

上述HQL語句的作用是統計一個表中出現的每種單詞的個數,並按照出現次數從小到大的順序輸出該單詞和相應的個數。
當我們在此HQL語句前加上EXPLAIN關鍵字時。首先,會打印出抽象語法樹,它表明Hive是如何將查詢解析成token(符號)和literal(字面值)的,是第一步將查詢轉化到最終結果的一部分。
在這裏插入圖片描述
我們大多數都不熟悉解析器和分詞器,所以簡單的研究一下輸出的信息,首先忽略掉TOK_這個前綴。
第一部分:
TOK_SUBQUERY表示HQL子查詢,TOK_TABNAME 指定所查詢的表的名稱,儘管查詢結果最終會將其輸出寫入到控制檯,但是Hive實際上會先將輸出寫入到一個臨時的文件中:
TOK_INSERT (TOK_DESTINATION (TOK_DIR TOK_TMP_FILE)
接下來是查詢語句,explode爲表生成函數,返回0到多行結果,每行都對應輸入的array數組中的一個元素;split爲內置函數,按照正則表達式pattern分割字符串s,並將分割後的部分以字符串數組的方式返回; TOK_TABLE_OR_COL指定line爲要查詢的列名;‘ ’爲每一行單詞之間的分隔符,word對生成的列進行重命名,wc對生成的表進行重命名。
第二部分:
還是寫入臨時文件,然後執行外部的查詢,查詢的列名改爲word而不是line,執行的聚合函數是count(1),計算行數;count是對count(1)這個函數生成的列進行的一個命名操作,
TOK_GROUPBY 按照word列進行分組,TOK_ORDERBY 按照count值進行排序。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章