目录

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()函数来给这个表做个递增的唯一标识:
    create table newtable as select row number(1) as id ,* from table;
  • 通过row number函数给表加了唯一标识之后,就可以利用第一个方法来进行分页。