2014-12-10 73 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;