Hbase:使用列筛选器扫描(获取具有特定列的行)
我正在尝试使用扫描获取行。我需要那些没有特定列的行。 我尝试了多种方法,但似乎都不管用 假设我想要列“fs”不存在的行。 我尝试了以下方法:-Hbase:使用列筛选器扫描(获取具有特定列的行),hbase,Hbase,我正在尝试使用扫描获取行。我需要那些没有特定列的行。 我尝试了多种方法,但似乎都不管用 假设我想要列“fs”不存在的行。 我尝试了以下方法:- SingleColumnValueFilter filter1 = new SingleColumnValueFilter( "f".getBytes(), Bytes.toBytes("fs"), CompareOp
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(
"f".getBytes(),
Bytes.toBytes("fs"),
CompareOp.NOT_EQUAL,
Bytes.toBytes(1)
);
假设“fs”存在,则其值为1
这是行不通的。
还尝试了这里提到的内容
但这也起了作用。in的建议没有错,但不适用于你的情况(正如@AdamSkywalker指出的)
但是您可以在范围[“0”、“fs”)和(“fs”、“z”]的顶部创建两个单独的过滤器。这些过滤器应该与和过滤器列表的组合规则相结合
可在HBase外壳中测试的示例代码:
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.filter.ColumnRangeFilter
import org.apache.hadoop.hbase.filter.SkipFilter
import org.apache.hadoop.hbase.filter.FilterList
import org.apache.hadoop.hbase.filter.FilterList.Operator
scan 'table', {FILTER => FilterList.new(FilterList::Operator::MUST_PASS_ONE,SkipFilter.new(ColumnRangeFilter.new(Bytes.toBytes("0"), true, Bytes.toBytes("fs"), false)),SkipFilter.new(ColumnRangeFilter.new(Bytes.toBytes("fs"), false, Bytes.toBytes("z"), true)))}
在Java API代码中,过滤器应如下所示:
SkipFilter range1 = new SkipFilter(new ColumnRangeFilter(Bytes.toBytes("0"), true, Bytes.toBytes("fs"), false));
SkipFilter range2 = new SkipFilter(new ColumnRangeFilter(Bytes.toBytes("fs"), false, Bytes.toBytes("z"), true))
FilterList filter = new FilterList(FilterList.Operator.MUST_PASS_ONE, range1, range2)
请注意,在此示例中,列名范围仅限于可打印的符号。如果使用字节数组作为列名,则应定义更大的范围。SkipFilter的建议是错误的,如果任何单元格不符合筛选条件,它将筛选整行。我想,具有“fs”列的行也有一些其他列,并将被筛选。是的他们还有其他专栏