Hadoop HIVE - 如何查询部分行

时间:2014-12-10 23:28:06

标签: 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行。

3 个答案:

答案 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)

Hive 2.0支持

偏移功能。或更高版本。

SELECT * FROM mytable LIMIT [offset,] row_count;

您可以查询上述要求。

  1. SELECT *从ID限制为0.2的mytable订单中
  2. SELECT *从ID限制为20,20的mytable订单中
  3. SELECT *从ID限制为40,20的mytable订单中
  4. SELECT *从ID限制为60,20的mytable订单中
  5. SELECT *从ID限制为80,20的mytable订单//返回第81至第100条记录