2013-03-06 1 views
1

우리는 hbase 테이블을 가지고 있으며 그것을 스캔해야합니다. 특정 열이 정확한 값을 갖고 정확한 접두사가있는 다른 열이있는 모든 행을 찾아야합니다. 다음과 같이 표시됩니다.ColumnPrefixFilter를 SingleColumnValueFilter로 스캔하고 모든 열을 가져 오는 방법은 무엇입니까?

SingleColumnValueFilter filterA = 
       new SingleColumnValueFilter(COLUMN_FAMILY, COLUMN_1, CompareFilter.CompareOp.EQUAL, Bytes.toBytes(2L)); 
Filter filterB = new ColumnPrefixFilter(COLUMN_2_PREFIX); 

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); 
filterList.addFilter(filterA); 
filterList.addFilter(filterB); 
Scan scan = new Scan(); 
scan.setFilter(filterList); 

개별적으로 필터가 작동합니다. filterACOLUMN_1의 값이 2L 인 행을 반환합니다. filterBCOLUMN_2이있는 행을 반환합니다. 그러나 함께 그들은 아무것도 반환하지 않습니다. 이 필터들을 함께 결합 할 수 있습니까? 아니면 내가 잘못한거야?

동일한 조건의 두 번째 질문 : ColumnPrefixFilter을 사용하고 모든 열을 가져올 수 있습니까? 나는 COLUMN_2이 존재하는 행을 찾고 다른 모든 열도 얻는다는 것을 의미합니까?

+0

아마도 바보 같은 질문이지만 두 조건을 모두 충족하는 행을 실제로 가지고 있는지 확인 했습니까? (OR 연산을 원한다면 연산자를 MUST_PASS_ONE으로 변경해야합니다.) –

+0

물론입니다. 두 조건을 모두 충족시키는 행이 있습니다. 나는'ColumnPrefixFilter'가 필터의 다른 컬럼과 작동하기를 원하지 않는다고 생각합니다. 'COLUMN_2' 컬럼으로 값을 필터링하기 위해'filterA'를 변경하면 코드가 잘 작동하기 때문입니다. – JarrLorck

답변

0

부분적으로 결정을 발견했습니다. ColumnPrefixFilter 대신 QualifierFilter을 사용할 수 있습니다. 그리고 작동합니다 :

Filter filterB = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(COLUMN_2_PREFIX)); 

하나의 열이있는 행이 있습니다. COLUMN_2. 그러나 필자는 필자가 필터링 한 것뿐만 아니라 모든 컬럼을 얻을 필요가 강하게 필요합니다.