如何在hive中设置limit子句的范围,我已经尝试过以下查询但是语法错误失败了。有人可以帮忙吗
从表格限制1000,2000中选择*;
答案 0 :(得分:2)
您可以使用 Row_Number 窗口功能并设置范围限制。
查询下方只会显示表
中的前20条记录 hive> select * from
(
SELECT *,ROW_NUMBER() over (Order by id) as rowid FROM <tab_name>
)t
where rowid > 0 and rowid <=20;
使用 运算符指定范围
hive> select * from
(
SELECT *,ROW_NUMBER() over (Order by id) as rowid FROM <tab_name>
)t
where rowid between 0 and 20;
要从 20到40 获取行,然后增加下限/上限值
hive> select * from
(
SELECT *,ROW_NUMBER() over (Order by id) as rowid FROM <tab_name>
)t
where rowid > 20 and rowid <=40;
答案 1 :(得分:2)
我不确定你想要达到的目的,但是......
只有在使用hive hive版本大于2.0.0时才会返回查询结果集中的1001和2001记录
hive --version
答案 2 :(得分:1)
LIMIT子句用于设置结果集中行数的上限。由于此HQL子句的使用不正确,您收到语法错误。
可以按以下方式编写查询,以返回不超过2000行:
SELECT * FROM table LIMIT 2000;
您也可以这样写它以返回不超过1000行:
SELECT * FROM table LIMIT 1000;
但是,您无法将两者合并为LIMIT的相同参数。 LIMIT参数必须求值为常数值。
我会尝试扩展这些信息,尝试帮助解决您的问题。如果您正试图分页&#34;您的结果以下可能有用。
首先我建议不要依赖HQL进行分页,在大多数情况下,可以在应用程序逻辑方面更有效地实现(查询大结果集,缓存所需内容,使用应用程序逻辑分页)。如果您别无选择,只能拉出行范围,可以通过LIMIT,ORDER BY和OFFSET子句的组合获得所需的效果。
LIMIT:这会将结果集限制为最大行数
ORDER BY:这将根据一列或多列
对结果集进行排序/排序OFFSET:这将在表格中的逻辑第一个条目之后的某一行开始您的结果集。
您可以将这三个条款结合起来,以有效地查询&#34;页面&#34;你的桌子。例如,以下三个查询显示如何从表中获取前3个数据块,其中每个块包含1000行,目标表&#39; column1&#39;用于确定逻辑顺序。
SELECT title as "Page 1", column1, column2, ... FROM table
ORDER BY column1 LIMIT 1000 OFFSET 0;
SELECT title as "Page 2", column1, column2, ... FROM table
ORDER BY column1 LIMIT 1000 OFFSET 1000;
SELECT title as "Page 3", column1, column2, ... FROM table
ORDER BY column1 LIMIT 1000 OFFSET 2000;
每个查询都声明&#39; column1&#39;作为ORDER BY的排序值。由于LIMIT子句,查询将返回不超过1000行。由于OFFSET增加了&#34;页面大小&#34;每个结果集将从不同的行开始。对于每个查询。
答案 3 :(得分:0)
Limit
随机提供'n'个记录。它不是打印一系列记录。
您可以将order by
与限制结合使用以获得您想要的内容