2017-09-25 62 views
0

只是想知道如何做限制工作,爲下面的簡單查詢HIVE:'SELECT * from'上的'LIMIT'如何在內部工作?

select * from T limit 100 

試想一下表T有13萬條記錄

請問上面的查詢:
1.第一負荷共13多萬元建成的內存&在結果集中只顯示100條記錄?只有100 &
2.負載給出結果集的100條記錄

正在尋找它很長一段時間,現在,大部分的網頁只談使用「限制」,但不涉及如何配置單元用它的下引擎蓋。

讚賞有用的回覆。

+0

**(1)**運行一個思想實驗和驗證你的建議(記住,我們是處理分佈式系統)**(2)**建議一個技術測試來指示實際的算法。 –

+0

這有什麼關係?它最好是隨機的,除非你包括一個順序的子句,在這一點上你知道答案。 – Andrew

+1

「2.僅裝載100個」...它會如何加載它們?來自哪裏?如果你有1000臺機器,每臺機器只有1條記錄呢?所有機器將運行相同的'SELECT * LIMIT 100'查詢 –

回答

1

如果沒有施加優化器,蜂房結了掃描整個表。但是蜂房優化 這與釋放的HIVE-2925部分hive.fetch.task.conversion,爲了緩解 用簡單的條件,簡單的查詢,而不是在所有 運行MR/TEZ。

支持的值是none,minimal和更多。

:禁用hive.fetch.task.conversion(在蜂房0.14.0加入值HIVE-8389)

最小:SELECT *,上分區列FILTER(WHERE和HAVING子句) ,僅限制

:SELECT,FILTER,僅限制(包括TABLESAMPLE,虛擬列)

你的問題更利當最小或更多設置時,會發生什麼情況。 它只是通過掃描添加的文件和讀取行,直到達到 leastRows()更多是指gitCodeConfighere

+0

,所以你的意思是說它只加載100內存? –

+0

是的,檢查在這裏https://github.com/apache/hive/blob/release-1.2.1/ql/src/java/org/apache/hadoop/hive/ql/exec/FetchTask.java#L146 – rbyndoor