如何在配置单元中设置limit子句的范围

von4xj4u  于 2021-06-02  发布在  Hadoop
关注(0)|答案(4)|浏览(482)

如何在配置单元中设置limit子句的范围,我尝试了下面的查询,但由于语法错误而失败。有人能帮忙吗

select * from table limit 1000,2000;
jgwigjjp

jgwigjjp1#

我不知道你想达到什么目的,但是。。。
仅当您使用的配置单元版本高于2.0.0时,才会返回查询结果集中的1001和2001记录

hive --version

(https://issues.apache.org/jira/browse/hive-11531)

j1dl9f46

j1dl9f462#

您可以使用行数窗口功能来设置范围限制。
下面的查询将只产生表中的前20条记录

hive> select * from 
        (
        SELECT *,ROW_NUMBER() over (Order by id) as rowid FROM <tab_name>
        )t 
    where rowid > 0 and rowid <=20;

使用between运算符指定范围

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;
iqih9akk

iqih9akk3#

limit子句用于设置结果集中行数的上限。由于此hql子句的用法不正确,因此出现语法错误。
查询可以按以下方式编写,以返回不超过2000行:

SELECT * FROM table LIMIT 2000;

您也可以这样写以返回不超过1000行:

SELECT * FROM table LIMIT 1000;

但是,不能将两者合并到同一个limit参数中。limit参数的值必须为常量。
我将试着对这些信息进行一点扩展,以帮助解决您的问题。如果您试图“分页”您的结果,以下可能是有用的。
首先,我建议不要使用hql进行分页,在大多数情况下,在应用程序逻辑端(查询大型结果集、缓存所需内容、使用应用程序逻辑分页)可以更有效地实现这种分页。如果您别无选择只能拉出行的范围,那么可以通过limit、order by和offset子句的组合来获得所需的效果。
限制:这会将结果集限制为最大行数
排序方式:这将根据一列或多列对结果集进行排序/排序
偏移量:这将在表中逻辑第一项之后的某一行开始结果集。
您可以组合这三个子句来有效地查询表的“页面”。例如,以下三个查询显示如何从表中获取前3个数据块,其中每个数据块包含1000行,目标表的“column1”用于确定逻辑顺序。

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;

每个查询都将“column1”声明为排序值,并带有order by。由于limit子句,查询将返回不超过1000行。每个结果集将从不同的行开始,因为每个查询的偏移量都以“页面大小”递增。

4ioopgfo

4ioopgfo4#

Limit in-hive随机给出n个记录。不是打印一系列的记录。你可以用 order by 结合极限来得到你想要的

相关问题