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