HBase complex过滤器不返回所有列

时间:2016-03-16 14:47:30

标签: hbase

int foo ()

上面的代码有一些奇怪的结果。 HBase扫描程序将返回正确过滤的结果(通过列表中的两个过滤器),但filterOnA的列不会被结果中的服务器传回。只有filterOnB的CF的KV在那里。

我尝试过很多像val scan = new Scan() val hBaseConf = HBaseConfiguration.create() val hUsers = new HTable(hBaseConf, "users") val filterOnA = new SingleColumnValueFilter(Constants.CF_META, Bytes.toBytes("id"), CompareFilter.CompareOp.NOT_EQUALS, Bytes.toBytes("##")) val filterOnB = new FamilyFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("some_value"))) val filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL) filterList.addFilter(filterOnA) filterList.addFilter(filterOnB) hUsers.getScanner(scan.setFilter(filterList)) 这样的东西,但这会导致扫描仪为空。对于满足两个过滤器的所有KV,扫描仪是否应该默认返回所有列?

我想知道复合滤波器逻辑是否具有“智能”功能。足以处理2个不同的CF在单独的位置/区域服务器上应用的2个过滤器。

1 个答案:

答案 0 :(得分:0)

SingleColumnValueFilter按列的给定值过滤行,但然后您应用FamilyFilter,所以我希望只返回此CF的KV。第一个过滤器不会过滤您想要的列,但它是否考虑行的限制(通过该过滤器)。然后家庭过滤器只选择他"some_value" CF,而不是另一个。