java hbase的scan分页_HBase分页查询

public List> getPageData(String tableName,String startRowKey,String endRowKey,int pageNo,int pageSize,boolean rowkeyOnly){

List> rtnList = new ArrayList<>();

try(Table table = conn.getTable(TableName.valueOf(tableName))){

Scan scan = new Scan();

Filter pgfilter = new PageFilter(pageSize);

//记录上一页最后一条rowkey

byte[] lastRow = null;

//[start,end)

if(!StringUtils.isBlank(startRowKey))

scan.withStartRow(Bytes.toBytes(startRowKey),true);

if(!StringUtils.isBlank(endRowKey))

scan.withStopRow(Bytes.toBytes(endRowKey),false);

if(rowkeyOnly){

List filters = new ArrayList<>();

Filter keyFilter = new FirstKeyOnlyFilter();

filters.add(keyFilter);

filters.add(pgfilter);

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL,filters);

scan.setFilter(filterList);

}else

scan.setFilter(pgfilter);

int pageIdx = 1;

while (pageIdx <= pageNo){

//非第一页,更上一页最后一个rowkey+0x00作为startRowkey

if(lastRow != null){

byte[] pageStartRowKey = Bytes.add(lastRow, new byte[]{ 0X00 });

scan.withStartRow(pageStartRowKey,true);

}

ResultScanner scanner = table.getScanner(scan);

int localRows = 0;

Result result;

if(pageIdx == pageNo){

while ((result = scanner.next() )!= null){

HashMap map = new LinkedHashMap();

map.put("rowkey", Bytes.toString(result.getRow()));

if(rowkeyOnly == false){

Cell[] cells = result.rawCells();

// 遍历取出cell

if (cells.length>0) {

for (Cell cell : cells) {

String field = Bytes.toString(CellUtil.cloneQualifier(cell));

String fieldVal = Bytes.toString(CellUtil.cloneValue(cell));

map.put(field, fieldVal);

}

}

}

rtnList.add(map);

}

}else {

while ((result = scanner.next()) != null){

localRows ++;

lastRow = result.getRow();

}

}

pageIdx++;

scanner.close();

//这一页没有记录了,表示没有查到数据,跳出while

if(localRows == 0) break;

}

}catch (Exception e){

logger.error("scan " + tableName +",{STARTROW=>" +startRowKey + ", STOPROW=>" + endRowKey + "},error !\n",e);

throw new MyCheckException("hbase scan failed!"+e.getMessage());

}

return rtnList;

}

注:如果使用多个Filter的话,PageFilter最后添加


版权声明:本文为weixin_42311265原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。