hive沒有像MySQL那樣的limit start,end那樣的寫法實現分頁,所以需要使用別的方式來實現分頁。
以下是我想到的兩種方式:

一、借助唯一標識字段

如果分頁的表有唯一標識的字段,可以通過這個字段來實現分頁:

  • 獲取第一頁數據:
    注:同時需要記錄這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;

后續的頁數獲取同理。

二、使用row_number()函數

如果分頁的表沒有唯一標識的字段,可以通過row number()函數來實現分頁。

  • 使用row_number()函數來給這個表做個遞增的唯一標識:
    select * from (select row_number() over (order by xx) as rnum ,table.* from table)t where rnum betwneen 1 to 10;