带偏移的Hbase扫描

时间:2014-05-04 04:41:34

标签: hadoop hive hbase

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

1 个答案:

答案 0 :(得分:4)

你可以采取多种方式。最简单的是页面过滤器。以下是 HBase: The Definitive Guide 的代码示例,第150页。


private static final byte[] POSTFIX = new byte[] { 0x00 };
Filter filter = new PageFilter(15);
int totalRows = 0; byte[] lastRow = null; 
while (true) {
  Scan scan = new Scan(); 
  scan.setFilter(filter); 
  if (lastRow != null) {
    byte[] startRow = Bytes.add(lastRow, POSTFIX); 
    System.out.println("start row: " + Bytes.toStringBinary(startRow)); 
    scan.setStartRow(startRow);
  }

  ResultScanner scanner = table.getScanner(scan); 
  int localRows = 0;
  
  Result result;
  
  while ((result = scanner.next()) != null) {
     System.out.println(localRows++ + ": " + result); 
     totalRows++;

     lastRow = result.getRow();
  }

  scanner.close();

  if (localRows == 0) break;
}


System.out.println("total rows: " + totalRows);

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