hbase shell命令:如何使用QualifierFilter

时间:2013-01-11 17:19:59

标签: hadoop hbase

在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中的工作原理。

3 个答案:

答案 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