在hbase shell上执行ValueFilter或ColumnFilter

时间:2012-09-28 05:53:42

标签: hbase

有人可以告诉我如何从hbase shell命令行执行限定符过滤器或ValueFilter吗?

3 个答案:

答案 0 :(得分:7)

它与您在任何编程语言中编码的方式非常相似,例如: -

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.util.Bytes
scan 'tableName', {COLUMNS=>['CF:qualifier1', 'CF:qualifier2'], LIMIT=>10,
FILTER=>SingleColumnValueFilter.new(Bytes.toBytes('CF'),
Bytes.toBytes('qualifier1'), CompareFilter::CompareOp.valueOf('EQUAL'),
Bytes.toBytes('value'))}

您显然必须根据您使用的工具更改参数。

答案 1 :(得分:7)

您可以像在Java中一样实例化任何过滤器(使用JRuby语法),并提供过滤器:

filter = ...
scan 'mytable', FILTER => filter

但是,直接在shell中实例化过滤器可能很麻烦,因此更简单的方法是使用Filter Language将过滤器作为字符串提供。例如,要在扫描中包含值等于'myvalue'的所有列,您将使用:

scan 'mytable', FILTER => "ValueFilter(=, 'binary:myvalue')

您可以将this document检查为“过滤语言”参考。

答案 2 :(得分:5)

此外,要扫描特定列以查找子字符串,您可以执行以下操作:

scan 'myTable', { COLUMNS => 'cf:abc', FILTER => "ValueFilter(=, 'substring:myvalue')"}