答案 0 :(得分:1)
SkipFilter中this answer的建议没有错,但不适用于您的情况(正如@AdamSkywalker指出的那样)。
但是你可以在SkipFilters之上创建两个单独的ColumnRangeFilters作为范围[" 0"," fs")和(" fs& #34;," z"]。这些过滤器应与FilterList和MUST_PASS_ONE FilterList的组合规则结合使用。
可以在HBase shell中测试的示例代码:
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)
请注意,在此示例中,列名称范围仅限于可打印符号。如果使用字节数组作为列名,则应定义更宽的范围。