如何在hive中设置limit子句的范围

时间:2018-05-01 15:24:26

标签: hadoop hive

如何在hive中设置limit子句的范围,我已经尝试过以下查询但是语法错误失败了。有人可以帮忙吗

从表格限制1000,2000中选择*;

4 个答案:

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

https://issues.apache.org/jira/browse/HIVE-11531

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

Hive中的

Limit随机提供'n'个记录。它不是打印一系列记录。 您可以将order by与限制结合使用以获得您想要的内容