【问题标题】:How to do a hbase range scan?如何进行 hbase 范围扫描?
【发布时间】:2020-07-06 22:29:11
【问题描述】:

我有一个带有 rowkey 的 hbase 表,例如 row1, row2, row3 .... 和 rowN ,我想要的是从 row100 到 row200 获取带有 rowkey 的行,如何编写查询子句或将 hbase 表设计为使查询更快?

【问题讨论】:

    标签: hbase


    【解决方案1】:

    这适用于 ASCII 行键。请注意,ENDROW 是独占的。

    以下应该是一个好的开始:

     scan 'mytable', {STARTROW => 'row100', ENDROW => 'row201'}
    

    在 Java 中(参见apidocs):

    Scan scan = new Scan(Bytes.ToBytes("row100"),Bytes.toBytes("row201"); 
    scan.setFilter(colFilter);
    scan.setOtherStuff...
    
    ResultScanner scanner = table.getScanner(scan);
    for (Result result = scanner.next(); result != null; result = scanner.next()) {
        ....
    }
    

    表格设计应该是一个单独的问题,您应该添加更多关于您的数据、访问模式和其他需求的信息。

    【讨论】:

    • 如果rowkey中没有数字怎么办,比如rowkey的格式是AAA,BBB,BBC,DDD....,所以我们不知道rowkey的位置100和200,那么如何获取它们之间的行呢?
    • 对于 STARTROW 这不是问题。对于 ENDROW,您可以在您需要的最后一个字符之后使用第一个下一个字符。看看:ascii-code.com 这也可以通过编程方式完成。
    【解决方案2】:

    从 HBase 2 开始,使用:

    Scan scan = new Scan().withStartRow(Bytes.ToBytes("row100")).withStopRow(Bytes.toBytes("row201"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      相关资源
      最近更新 更多