[英]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
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.