由於MaxCompute SQL本身不提供類似數據庫的select * from table limit x offset y的分頁查詢邏輯。但是有很多用戶希望在一定場景下能夠使用獲取類似數據庫分頁的邏輯,對查詢結果進行分頁/分批獲取結果,本文將介紹幾種方法,來實現上述場景。

1. 藉助row_number()函數作爲遞增唯一標識進行過濾查詢

通過row_number()對數據進行排序及唯一標識編號,然後根據該標識選取每次查詢的分頁範圍。

2. 利用Java SDK的InstanceTunnel在下載結果時進行分批下載

MaxCompute JavaSDK提供了SQLTask + InstanceTunnel直接導出select的數據集的方法,具體可以參考《使用 Instance Tunnel 獲取 Maxcompute Instance 的執行結果》

該案例中,提供了通過InstanceTunnel來下載用戶自定義SELECT查詢的方法。

這裏通過了SQLTask提交了1條自定義select查詢,然後使用InstanceTunnel.DownloadSession直接對該查詢結果進行下載。其中,openRecordReader方法支持指定本次讀取記錄的起始位置和讀取數量,通過openRecordReader(start,long)的參數設定,可實現分批下載的邏輯。

例如,將上面例子中openRecordReader (0, count)修改爲用戶想獲取的起始位置和獲取記錄數量:

參考內容:MaxCompute SDK Java Doc的InstanceTunnel.DownloadSession類的openRecordReader方法。

由於MaxCompute所處理表的數據量往往都非常大,以上的方法一般不建議使用在報表的交互分頁查詢場景上。對於交互時查詢有需求的用戶,可以考慮通過MaxCompute的交互式分析(Lightning)來查詢。

3. 利用MaxCompute交互式分析(Lightning)的limit/offset語法實現分頁

MaxComput SQL不支持limit/offset語法,但開發者可以藉助MaxCompute交互式分析(Lightning)來使用limit/offset。

MaxCompute交互式分析能夠在相同的權限體系下,以PostgreSQL協議和語法快速查詢MaxCompute數據。利用PostgreSQL的limit offset語法可以實現與數據庫查詢相同的分頁效果。

-------------------------------

本文作者:聖遠

原文鏈接:https://yq.aliyun.com/articles/696953?utm_content=g_1000052496

本文爲雲棲社區原創內容,未經允許不得轉載。

聲明:該文觀點僅代表作者本人,搜狐號系信息發佈平臺,搜狐僅提供信息存儲空間服務。
相關文章