带偏移的Hbase扫描

Mar*_*ark 5 hadoop hbase hive

有没有办法扫描HBase表,例如前100个结果,然后获得下一个100等等......就像在SQL中我们使用LIMIT和OFFSET一样?我的行键是uuid

Aru*_*nam 5

您可以通过多种方式做到这一点。最简单的一种是页面过滤器。下面是来自HBase的代码示例:权威指南,第 150 页。

私有静态最终字节[] POSTFIX = 新字节[] { 0x00 };
过滤器 filter = new PageFilter(15);
int totalRows = 0; byte[] lastRow = null;
而(真){
  扫描 scan = new Scan(); 
  scan.setFilter(filter); 
  如果(最后一行!= null){
    byte[] startRow = Bytes.add(lastRow, POSTFIX); 
    System.out.println("起始行:" + Bytes.toStringBinary(startRow)); 
    scan.setStartRow(startRow);
  }?
  ResultScanner 扫描仪 = table.getScanner(scan); 
  int localRows = 0;
  ? 结果结果;
  ? while ((result = scanr.next()) != null) {
     System.out.println(localRows++ + ": " + result); 
     totalRows++;?
     lastRow = result.getRow();
  }?
  扫描仪.close();?
  如果(localRows == 0)中断;
}

?System.out.println("总行数:" + totalRows);

或者,您可以设置扫描时捕获所需的限制,然后将起始行更改为每次获取的上次扫描的最后一行 + 1。