如果我有下表;
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)
它可以通过 中的 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 变量
| 归档时间: |
|
| 查看次数: |
9500 次 |
| 最近记录: |