如果我有下表;
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行。
答案 0 :(得分:3)
对此进行更新。以防万一其他人现在尝试这个解决方案。
对我来说,它只能在行号之后使用括号,并且在查询周围使用where子句作为别名'rowid'的新SELECT语句在内部SELECT中不可用。我花了一段时间才弄明白。
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER(Order by id) as rowid FROM mytable
) t1
WHERE rowid > 0 and rowid <= 20;
答案 1 :(得分:2)
可以通过Myqsl
中的限制偏移轻松完成此操作。 Hive支持限制但不是偏移(不是100%肯定)
但是你可以通过
SELECT * FROM mytable
LIMIT 20;
它只会提供20条记录,但不会提供20-40条记录;
你可以在hive中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
答案 2 :(得分:0)
偏移功能。或更高版本。
SELECT * FROM mytable LIMIT [offset,] row_count;
您可以查询上述要求。