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;
between 和 and 分页可以按照下面这个公式 between :( currentPage- 1)pageSize+1 ,and : (currentPagepageSize)
还有一种办法,如果表里有唯一标识字段也可以借助这个字段和 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;
举例:
获取第一页数据:
select * from table where type=2 order by id asc limit 10;
获取第二页数据:
需要获取第一页10条中最大的id为preId,作为下一页的条件。
int preId=select max(id) from table where type=2 order by id asc limit 10;
select * from table where type=2 and id >preId order by id asc limit 10;
获取第三页数据:
需要获取2页20条中最大的id为preId,作为下一页的条件。
int preId=select max(id) from table where type=2 order by id asc limit 20;
select * from table where type=2 and id >preId order by id asc limit 10;