簡體   English   中英

用於缺少列的記錄的Hbase掃描過濾器或列值為空

[英]Hbase Scan Filter for Records that are Missing Column or the Column Value is null

我在col系列(CF)中有3個cols {col1,col2,col3}。 我想寫一個掃描,我選擇所有行col1='val1' and col2='val2' and (col3 is missing or col3 is null)

在Java中這樣做 - 抱歉,我對hbase完全不了解;-)

我在網上找到答案時遇到了很多麻煩。 我終於明白了,而且很簡單 - 只是沒有答案:

    Scan scanner = new Scan();

    SingleColumnValueFilter filter = new SingleColumnValueFilter(
        Bytes.toBytes( "some family" ),
        Bytes.toBytes( "some column" ),
        CompareFilter.CompareOp.EQUAL,
        Bytes.toBytes( "" )
    );
    filter.setFilterIfMissing( false );

    scanner.setFilter( filter );
    return scanner;

解決方案的關鍵部分是將setFilterIfMissing設置為false並與空字符串進行比較。

我認為以下代碼可以幫助您:

    FilterList filterList = new FilterList();
    SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("someFamily"), Bytes.toBytes("col1"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("val1"));
    filter1.setFilterIfMissing(true);
    filterList.addFilter(filter1);

    SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("someFamily"), Bytes.toBytes("col2"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("val2"));
    filter2.setFilterIfMissing(true);
    filterList.addFilter(filter2);

    SingleColumnValueFilter filter3 = new SingleColumnValueFilter(Bytes.toBytes("someFamily"), Bytes.toBytes("col3"), CompareFilter.CompareOp.EQUAL, new NullComparator());
    filter3.setFilterIfMissing(false);
    filterList.addFilter(filter3);

    Scan scan = new Scan();
    scan.setFilter(filterList);
    ResultScanner resultScanner = table.getScanner(scan);
    for (Result res : resultScanner) {
        System.out.println(res);
    }
    resultScanner.close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM