2014-12-10 65 views
3

如果我有下面的表;Hadoop HIVE - 如何查詢部分行

table name : mytable 
columns : id, name, sex, age, score 
row1 : 1,Albert,M,30,70 
row2 : 2,Scott,M,34,60 
row3 : 3,Amilie,F,29,75 
... 
row100 : 100,Jim,M,35,80 

我要選擇他們的五倍。

1st iteration : row1 ~ row20 
2nd iteration : row21 ~ row40 
... 
5th iteration : row81 ~ row100 

如何查詢Hive?有沒有已知的查詢? 下面返回全部100行。

SELECT * FROM mytable; 

但我真的只想看到每次只有20行。

回答

2

它可以很容易地通過Myqsl限制偏移量。蜂巢支持限制,但不偏移(不是100%確定) 但是你可以通過

SELECT * FROM mytable 
LIMIT 20; 

限制你的輸出就會給只有20條記錄,而不是20-40;

您可以通過ROW_NUMBER在蜂巢

SELECT *,ROW_NUMBER over (Order by id) as rowid FROM mytable 
where rowid > 0 and rowid <=20; 

下一次你必須改變where子句中的條件。

SELECT *,ROW_NUMBER over (Order by id) as rowid FROM mytable 
    where rowid > 20 and rowid <=40; 

您也可以使用文本文件傳遞的ROWID變量或設置變量; run os command and set out put to hive variable

+0

它有幫助。謝謝Kishore Kumar Suthar。 – Dorr 2014-12-12 01:58:53

1

此更新。以防萬一其他人現在嘗試此解決方案。

對於我來說,它只能處理行號後的括號,並且在查詢周圍使用where子句作爲別名「rowid」的SELECT語句在內部SELECT中不可用。花了我一段時間才弄明白。

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER(Order by id) as rowid FROM mytable 
) t1 
WHERE rowid > 0 and rowid <= 20;