【问题标题】:How to set start and end row key HBASE如何设置开始和结束行键 HBASE
【发布时间】:2016-10-11 09:40:28
【问题描述】:

如果我有像

这样的行键
a_c
b_c
j_f
f_d
d_c

我应该得到所有匹配 _c 的行。如何在此处设置开始和停止行键。我试图从开始和停止行键中获取扫描结果,而不是使用 rowfilter 或其他过滤器类型。

【问题讨论】:

    标签: hadoop hbase


    【解决方案1】:

    如果您不想使用RowFilter,可以编写自己的过滤器函数。但是如果你自己写不了过滤函数又不想用RowFilter,我建议你用PrefixFilter

    Java 示例:

    byte[] prefixF= Bytes.toBytes("_c");
    Scan scan = new Scan(prefixF));
    PrefixFilter prefixFilter = new PrefixFilter(prefixF);
    scan.addFilter(prefixFilter);
    ResultScanner resultScanner = table.getScanner(scan);
    

    以上代码等于hbase> scan 'YourTablename', { FILTER => "PrefixFilter('_c')"}

    【讨论】:

    • 感谢您的回答。我不想使用任何自定义过滤器甚至行过滤器的原因是所有都涉及全表扫描。这就是我试图用开始和停止行键解决的原因。是否可以使用一些正则表达式获得带有开始和停止行键的扫描结果?
    • 扫描函数使您可以设置starRowstopRowScan(byte[] startRow, byte[] stopRow) 为指定的行范围创建扫描操作。它还允许您设置startRowfilter,您应该使用Filter hbase 类:Scan(byte[] startRow, Filter filter) 。我认为可以使用startRowstopRow 创建一个forScan 类的函数,并且在函数内部,您应该使用regex(Pattern, Match 来过滤结果。如果您找到其他解决方案,请告诉我:)
    【解决方案2】:

    您可以使用 Hbase STARTROW 和 ENDROW 过滤器。它基本上扫描行键范围之间的数据(ENDROW 除外)。

     scan 'table_name', {STARTROW=>"<start_row_key>", ENDROW=>"<end_row_key>"}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多