您好,登錄后才能下訂單哦!
小編給大家分享一下報表連hive時數據量比較大如何分頁查詢,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
Hive 提供了類似 Oracle 的 rownum 機制,類似這樣(效率比較差):
select * from (select row_number() over (order by create_time desc) as rownum,u.* from user u) mm where mm.rownum between 10 and 15;
還有一種辦法,如果表里有唯一標識字段也可以借助這個字段和 limit 實現。比如:
獲取第一頁數據:
注:同時需要記錄這 10 條中最大的 id 為 preId,作為下一頁的條件。
select * from table order by id asc limit 10;
獲取第二頁數據:
注:同時保存數據中最大的 id 替換 preId。
select * from table where id >preId order by id asc limit 10;
對于數據庫分頁, 這里曾經分析過存在的問題
大清單報表應當怎么做? 也給出了改善的思路,可以參考:
把取數和呈現做現兩個異步線程,取數線程發出 SQL 后就不斷取出數據后緩存到本地存儲中,呈現線程根據頁數計算出行數到本地緩存中去獲取數據顯示。這樣,只要已經取過的數據就能快速呈現,不會有等待感,還沒取到的數據需要等待一下也是正常可理解的;而取數線程只涉及一句 SQL,在數據庫中是同一個事務,也不會有不一致的問題。這樣,兩個問題都能得到解決。不過這需要設計一種可以按行號隨機訪問記錄的存儲格式,不然要靠遍歷把記錄數出來,那反應仍然會很遲鈍。
畫個圖感受感受:
②和③分別是兩個線程,一個負責取數緩存,一個負責讀緩存做報表呈現
看起來有點復雜,可直接用做好的工具:
海量清單與分組報表的實現
還能導出 Excel,也能打印。
看完了這篇文章,相信你對“報表連hive時數據量比較大如何分頁查詢”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。