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))}
有效比较运算符:
- 相等的
- 更大的
- 大于或等于
- 少
- 小于或等于
- 不行
- 不平等