簡體   English   中英

HIVE:“SELECT * from”工作的“限制”是如何工作的?

[英]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()更多參考gitCodeConfig這里

在引擎蓋下,配置單元中的“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM