2

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

4

3 回答 3

6

HBase 控制台是JRuby-based,您必须使用,::而不是.用于静态参考。

试试那个命令:

hbase(main):011:0>  scan 'test', { FILTER => QualifierFilter.new(CompareFilter::CompareOp::GREATER, 'dummy')}
于 2013-01-14T20:59:24.470 回答
2

尝试

scan 'test', { FILTER => "QualifierFilter(>, 'regexstring:dummy*')" }

查看TestParseFilter.java以获得更多示例。

于 2016-01-23T11:35:43.083 回答
0

如果您正在搜索确切的列名,您可以在 HBase shell 中发出这两个命令:

import org.apache.hadoop.hbase.filter.QualifierFilter
scan 'orgtable2', {FILTER => "QualifierFilter(=,'binary:lan')"}

这将只显示包含该列的唯一记录的表列lanorgtable2

更有可能的是,您可能希望显示存在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列显示在结果中。更多细节在这里

于 2020-10-07T19:20:39.660 回答