[英]HIVE: How does 'LIMIT' on 'SELECT * from' work under-the-hood?
只是想知道如何限制以下簡單查詢的工作
select * from T limit 100
想象一下表T有1300萬條記錄
請問以上查詢:
1.首先將所有1300萬加載到內存中並在結果集中僅顯示100條記錄?
2.僅加載100並給出100條記錄的結果集
現在正在搜索它已經有一段時間了,大多數頁面只討論使用“LIMIT”而不是Hive如何處理它。
任何有用的回應贊賞。
如果未應用優化程序,則hive最終會掃描整個表。 但Hive通過作為HIVE-2925的一部分發布的hive.fetch.task.conversion來優化這一點,以簡化簡單條件下的簡單查詢,而根本不運行MR / Tez。
支持的值為none,minimal和more。
none :禁用hive.fetch.task.conversion(使用HIVE-8389在Hive 0.14.0中添加的值)
minimal :SELECT *,分區列上的FILTER(WHERE和HAVING子句), 僅限LIMIT
更多 :SELECT,FILTER,LIMIT only(包括TABLESAMPLE,虛擬列)
您的問題更可能發生在設置最小值或更多值時發生的情況。 它只掃描添加的文件並讀取行,直到達到leastRows()更多參考gitCode , Config和這里
在引擎蓋下,配置單元中的“SELECT”發出FETCH任務而不是生成mapreduce任務。 可以把它想象成一個hadoop fs -get這里需要注意的是FETCH任務僅適用於SELECT *,如果你要選擇一個列,則獲取可能不起作用。
資料來源: https : //vcfvct.wordpress.com/2016/02/18/make-hive-query-faster-with-fetch-task/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.