[英]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.