在hbase shell中运行以下命令,尝试让 QualifierFilter 正常工作:
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.filter.QualifierFilter
import org.apache.hadoop.hbase.filter.BinaryComparator
下面有错误:
hbase(main):011:0> scan 'test', { FILTER => QualifierFilter.new(CompareFilter.CompareOp.GREATER, 'dummy')}
NoMethodError: undefined method `CompareOp' for Java::OrgApacheHadoopHbaseFilter::CompareFilter:Class
有人可以分享hbase QualifierFilter在bhase shell中的工作原理。
答案 0 :(得分:6)
HBase控制台为JRuby-based
,您必须使用::
代替.
进行静态参考。
尝试该命令:
hbase(main):011:0> scan 'test', { FILTER => QualifierFilter.new(CompareFilter::CompareOp::GREATER, 'dummy')}
答案 1 :(得分:2)
尝试
scan 'test', { FILTER => "QualifierFilter(>, 'regexstring:dummy*')" }
请查看TestParseFilter.java了解更多示例。
答案 2 :(得分:0)
如果要搜索确切的列名,则可以在HBase shell中发出这两个命令:
import org.apache.hadoop.hbase.filter.QualifierFilter
scan 'orgtable2', {FILTER => "QualifierFilter(=,'binary:lan')"}
wich将仅显示lan
表的orgtable2
列作为包含该列的唯一记录。
更有可能,您可能希望显示存在lan
列(列族cf1
)的行的所有列。在这种情况下,请使用DependantColumnFilter
:
import org.apache.hadoop.hbase.filter.DependentColumnFilter
scan 'orgtable2', {FILTER => "DependentColumnFilter('cf1','lan')"}
如果您还想在与lan
列关联的值上应用条件,请使用5参数签名:
import org.apache.hadoop.hbase.filter.DependentColumnFilter
scan 'orgtable2', {FILTER => "DependentColumnFilter('cf1','lan',false,=,'binary:fre')"}
因此,上一次扫描将返回存在“ lan”列且其关联值等于fre
的行的所有列。第三个参数是dropDependentColumn
,如果设置为true,则将阻止lan
列显示在结果中。更多详细信息here。