Hadoop HIVE - 如何查询部分行

Dor*_*orr 5 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
Run Code Online (Sandbox Code Playgroud)

我想选择它们五次。

1st iteration : row1 ~ row20
2nd iteration : row21 ~ row40
...
5th iteration : row81 ~ row100
Run Code Online (Sandbox Code Playgroud)

如何查询 Hive?有任何已知的查询吗?下面返回所有 100 行。

SELECT * FROM mytable;
Run Code Online (Sandbox Code Playgroud)

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

小智 7

更新这一点。以防万一其他人现在尝试此解决方案。

对我来说,它只使用行号后的方括号和围绕查询的新 SELECT 语句使用 where 子句,因为别名“rowid”在内部 SELECT 中不可用。我花了一段时间才弄明白。

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


Kis*_*ore 3

它可以通过 中的 Limit Offset 轻松做到这一点Myqsl。Hive 支持限制,但不支持 Offset(不是 100% 确定)但是你可以通过以下方式限制你的输出

SELECT * FROM mytable
LIMIT 20;
Run Code Online (Sandbox Code Playgroud)

它只会给出 20 条记录,而不是 20-40 条;

ROW_NUMBER你可以在蜂巢中做

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

下次您必须更改 where 子句中的条件时。

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

您还可以使用文本文件传递 rowid 变量或设置变量;运行 os 命令并将其放入 hive 变量