簡體   English   中英

如何在hive中設置limit子句的范圍

[英]How to set range for limit clause in hive

如何在hive中設置limit子句的范圍,我已經嘗試過以下查詢但是語法錯誤失敗了。 有人可以請幫助

select * from table limit 1000,2000;

您可以使用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;

使用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;   

我不確定你想要達到的目的,但......

僅當您使用配置單元大於2.0.0的配置單元版本時,才會返回查詢結果集中的1001和2001記錄

hive --version

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

LIMIT子句用於設置結果集中行數的上限。 由於此HQL子句的使用不正確,您收到語法錯誤。

可以將查詢寫為以下內容以返回不超過2000行:

SELECT * FROM table LIMIT 2000;

您也可以這樣寫它以返回不超過1000行:

SELECT * FROM table LIMIT 1000;

但是,您無法將兩者結合到LIMIT的相同參數中。 LIMIT參數必須求值為常量值。

我會嘗試擴展這些信息,嘗試幫助解決您的問題。 如果您嘗試“分頁”結果,則可能會使用以下內容。

首先,我建議不要依賴HQL進行分頁,在大多數情況下,可以在應用程序邏輯方面更有效地實現(查詢大型結果集,緩存所需內容,使用應用程序邏輯分頁)。 如果您別無選擇,只能拉出行范圍,可以通過LIMIT,ORDER BY和OFFSET子句的組合獲得所需的效果。

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;

每個查詢都使用ORDER BY將'column1'聲明為排序值。 由於LIMIT子句,查詢將返回不超過1000行。 由於每個查詢的OFFSET增加了“頁面大小”,因此每個結果集將從不同的行開始。

Hive中的Limit隨機給出'n'個記錄。 它不是打印一系列記錄。 您可以結合限制使用order by來獲得您想要的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM