如何根据HBase shell中的行模式扫描行?

时间:2016-04-29 07:21:47

标签: nosql hbase hbasestorage

我想使用符合某种模式的行扫描HBase shell中的HTable中的行。

例如,我有以下表格数据:

    row:r1_t1  column:cf:a, timestamp=1461911995948,value=v1
    row:r2_t2  column:cf:a, timestamp=1461911995949,value=v2
    row:s1_t1  column:cf:a, timestamp=1461911995950,value=q1
    row:s2_t2  column:cf:a, timestamp=1461911995951,value=q2

根据以上数据,我想找到包含' t1'的行。 :

    row:r1_t1  column:cf:a, timestamp=1461911995948,value=v1
    row:s1_t1  column:cf:a, timestamp=1461911995950,value=q1

我知道我可以使用PrefixFilter扫描表,但是此方法采用以指定过滤器开头的行。

    scan 'test', {FILTER => "(PrefixFilter('s')"}

是否有基于过滤行名称中间模式匹配的行扫描表的类似方法?

1 个答案:

答案 0 :(得分:3)

hbase(main):003:0> scan 'test', {ENDROW => 't1'}

通常,使用PrefixFilter可能会很慢,因为它会在到达前缀之前执行表扫描。

也可以将RowFilter与SubstringComparator一起使用 如下所示

可以RowFilter使用SubstringComparator,如下所示

hbase(main):003:0> import org.apache.hadoop.hbase.filter.CompareFilter
hbase(main):005:0> import org.apache.hadoop.hbase.filter.SubstringComparator
hbase(main):006:0> scan 'test', {FILTER => org.apache.hadoop.hbase.filter.RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'),SubstringComparator.new("searchkeyword"))}