2014-12-19 1 views
1

하나 이상의 열에서 hbase의 범위 필터를 사용하고 싶습니다. And/Or Conditions를 구현하는 SingleColumnValueFilter를 사용할 수 있지만 두 개의 다른 열에 대해 동일한 필터 조건을 실행하려고합니다.열 값 범위 Hbase의 필터 0.94

예 : myhbase 표는

rowkey,cf:bidprice,cf:askprice,cf:product 

나는 (cf:bidprice>10 and cf:bidprice<20) or (cf:askprice>10 and cf:askprice<20) 모든 행을 필터링 할.

답변

1

나는 그것을 이해했다고 생각합니다. 아래 코드 스 니펫은 예제 구현입니다.

byte[] startRow=Bytes.toBytes("startrow"); 
byte[] endRow=Bytes.toBytes("stoprow"); 

SingleColumnValueFilter bidPriceGreaterFilter=new SingleColumnValueFilter("q".getBytes(), "bidprice".getBytes(), CompareFilter.CompareOp.GREATER_OR_EQUAL, "12345".getBytes()); 
SingleColumnValueFilter bidPricelesserFilter=new SingleColumnValueFilter("q".getBytes(), "bidprice".getBytes(), CompareFilter.CompareOp.LESS_OR_EQUAL, "12346".getBytes()); 
SingleColumnValueFilter askPriceGreaterFilter=new SingleColumnValueFilter("q".getBytes(), "askprice".getBytes(), CompareFilter.CompareOp.GREATER_OR_EQUAL, "12345".getBytes()); 
SingleColumnValueFilter askPricelesserFilter=new SingleColumnValueFilter("q".getBytes(), "askprice".getBytes(), CompareFilter.CompareOp.LESS_OR_EQUAL, "12346".getBytes()); 

FilterList andFilter1= new FilterList(FilterList.Operator.MUST_PASS_ALL); 
andFilter1.addFilter(bidPriceGreaterFilter); 
andFilter1.addFilter(bidPricelesserFilter); 

FilterList andFilter2= new FilterList(FilterList.Operator.MUST_PASS_ALL); 
andFilter2.addFilter(askPriceGreaterFilter); 
andFilter2.addFilter(askPricelesserFilter); 

FilterList finalFilterList=new FilterList(FilterList.Operator.MUST_PASS_ONE); 
finalFilterList.addFilter(andFilter1); 
finalFilterList.addFilter(andFilter2); 

Scan scan = new Scan(startRow,endRow); 
scan.setFilter(finalFilterList);