简体   繁体   English

具有多种过滤条件的HBase Scan api

[英]HBase Scan api with multiple filtering conditions

I am very new to HBase api and seeing some strange results when doing the following. 我是HBase api的新手,在执行以下操作时看到了一些奇怪的结果。

We are trying to scan based on multiple filters. 我们正在尝试基于多个过滤器进行扫描。 I want to pass all the filter conditions. 我想通过所有过滤条件。 I am using the below code. 我使用以下代码。

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
Filter pageFilter = new PageFilter(5000);
filterList.addFilter(pageFilter);
SingleColumnValueFilter filterOne = new SingleColumnValueFilter(Bytes.toBytes(COLUMN_FAMILY),
                Bytes.toBytes(COLUMN_NAME1), CompareOp.EQUAL, Bytes.toBytes(value1));
filterList.addFilter(filterOne);
SingleColumnValueFilter filterTwo = new SingleColumnValueFilter(Bytes.toBytes(COLUMN_FAMILY),
                Bytes.toBytes(COLUMN_NAME2), CompareOp.EQUAL, Bytes.toBytes(value2));
filterList.addFilter(filterOne);
filterList.addFilter(filterTwo);

//Scan
Scan scan = new Scan();
scan.setFilter(filterList);
Result result;
try {
            scanner = hTable.getScanner(scan);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
while ((result = scanner.next()) != null) {
  //print the result.
}
//If I am adding multiple SingleColumnValueFilter and I am not doing a addCoulmn() to the scan I am not getting any result even though there are records.

//If I am adding a column to scan then I am seeing results. Initially the result set is matching my filter condition but if I am running for bigger hbase data set then I am seeing bad results.

//If I am adding multiple addCoulmn() to my scan then I am not seeing any result

I try to look for proper example but none of them seem to be working. 我试着寻找合适的例子,但它们似乎都没有起作用。 Any help in this direction is greatly appreciated. 非常感谢在这方面的任何帮助。 Thanks in advance. 提前致谢。

You specified a FilterList where all the filter must pass (like a "AND" behavior). 您指定了FilterList ,其中所有过滤器必须通过(如“AND”行为)。 In the list of filter, you have 2 SingleColumnValueFilter which are contradictory : they say that the column COLUMN_FAMILY:COLUMN_NAME must be equal to value1 and value2 at the same time. 在过滤器列表中,您有2个SingleColumnValueFilter是矛盾的:他们说列COLUMN_FAMILY:COLUMN_NAME必须同时等于value1和value2。 I think that's why you don't get result with the context of your 1st and 3rd comment. 我认为这就是为什么你没有得到第一和第三评论背景的结果。

Concerning your 2nd comment, I think you have to keep in mind that the SingleColumnValueFilter are applied only if the column exists in the Scan. 关于您的第二条评论,我认为您必须记住,只有在扫描中存在该列时才应用SingleColumnValueFilter It may be the explanation of what you see. 这可能是你所看到的解释。 Check the setFilterIfMissing(boolean) method : https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#setFilterIfMissing-boolean- 检查setFilterIfMissing(boolean)方法: https//hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html#setFilterIfMissing-boolean-

Hope it helps 希望能帮助到你

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM