2017-01-11 41 views
0

我在蜂房內部有一個表,我想從中獲取所有數據。問題是:一個查詢運行地圖縮小,另一個不是

select * from tbl; 

給了我比非常不同的結果:

select count(*) from tbl; 

這是爲什麼?第二個查詢似乎在運行hadoop map reduce,第一個查詢不會 - 它只是返回結果。該表格不是分區或分區,而是文本(csv)格式。

+0

還有和你一樣的問題:https://stackoverflow.com/questions/7466454/how-does-hive-decide-when-to-use-map-reduce-and-when-not-to被接受答案存在。 – maxteneff

回答

0

當您提交Hive查詢時,Hive會將查詢轉換爲一個或多個階段。階段可能是MapReduce階段,抽樣階段,合併階段,限制階段或Hive需要執行的其他可能任務。

select * from table_name;

這個查詢只需掃描整個表和轉儲屏幕上的輸出,因此你看到控制檯日誌輸出不同。

雖然select count(*) from table_name只是掃描Hive meta_information並從他們自己的結果。它也不運行任何MapReduce作業。

您可以在Hive控制檯上運行以下命令,並且您將能夠看到整個信息。

hive> describe formatted table_name;

表參數:

COLUMN_STATS_ACCURATE true 
numFiles    xx 
numRows     xxxxxxxx 

在Hadoop中,匯聚/有條件/算術運算等所需的處理引擎,處理和執行的結果,因此,只要您提交此類型的工作,它在內部會轉換成MapReduce程序中,MapReduce程序代表查詢執行,並將其結果呈現給您的屏幕上的Hive和Hive顯示,因此您會看到不同的結果。

您可以將EXPLAIN關鍵字放在查詢前面查看查詢計劃和其他信息。

請參考編程Hadoop Book,第10章瞭解更多關於使用Hive EXPLAIN功能的信息。

相關問題