Filter 如何在hbase中使用原子计数器上的过滤器

Filter 如何在hbase中使用原子计数器上的过滤器,filter,hbase,Filter,Hbase,我正在使用incr增加表中的计数器列。现在我需要在scan中过滤某些记录,使计数器小于某个值(例如1)。get显示hbase外壳中特定行键的计数器值(即4),如下所示: column=q:counter, timestamp=1419403701427, value=\x00\x00\x00\x00\x00\x00\x00\x04 现在,如果使用扫描过滤器进行过滤,则从扫描中排除此记录,如下所示 {FILTER=> "SingleColumnValueFilter('q','count

我正在使用
incr
增加表中的计数器列。现在我需要在
scan
中过滤某些记录,使计数器小于某个值(例如1)。
get
显示hbase外壳中特定行键的计数器值(即4),如下所示:

column=q:counter, timestamp=1419403701427, value=\x00\x00\x00\x00\x00\x00\x00\x04 
现在,如果使用扫描过滤器进行过滤,则从扫描中排除此记录,如下所示

{FILTER=> "SingleColumnValueFilter('q','counter',<,'binary:1',true,true)" , COLUMNS=>['q:counter'] }

{FILTER=>“SingleColumnValueFilter('q','counter',对于HBase,列值只是一个
字节[]
,因此使用HBase Shell进行查询有点棘手,因为标准的筛选语言会将所有内容转换为字符串:

要使其与整数/长数一起工作,我们必须将其视为与JAVA一样:将值转换为
byte[]
,并将其提供给带有CompareOp的SingleColumnValueFilter

  • 首先,您必须将所需的库导入HBase Shell

    import java.lang.Long import org.apache.hadoop.hbase.util.Bytes import org.apache.hadoop.hbase.filter.SingleColumnValueFilter import org.apache.hadoop.hbase.filter.CompareFilter import org.apache.hadoop.hbase.filter.BinaryComparator
  • 对于整型列,解决方案稍微简单一些(无需长时间解析)。要查找值小于二进制值20的行,请执行以下操作:20
    \x00\x00\x00\x14

    scan "your_table", {LIMIT => 10, FILTER => SingleColumnValueFilter.new(Bytes.toBytes('Family'), Bytes.toBytes('Column'), CompareFilter::CompareOp.valueOf('LESS'), BinaryComparator.new(Bytes.toBytes(Long.parseLong("20"))))} scan "your_table", {LIMIT => 10, FILTER => SingleColumnValueFilter.new(Bytes.toBytes('Family'), Bytes.toBytes('Column'), CompareFilter::CompareOp.valueOf('LESS'), BinaryComparator.new(Bytes.toBytes(20)))} 扫描“your_table”{LIMIT=>10,FILTER=>SingleColumnValueFilter.new(Bytes.toBytes('Family')、Bytes.toBytes('Column')、CompareFilter::CompareOp.valueOf('LESS')、BinaryComparator.new(Bytes.toBytes(20))}
  • 有效比较运算符:

    • 相等的
    • 更大的
    • 大于或等于
    • 小于或等于
    • 不行
    • 不平等