2013-03-06 32 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); 

獨立過濾器工作完美。 filterA返回COLUMN_1的值爲2L的行。 filterB返回COLUMN_2存在的行。但是他們一起沒有收益。 那麼我可以將這些過濾器組合在一起嗎?或者我做錯了嗎?

第二個問題具有相同的條件:我可以使用ColumnPrefixFilter並獲取所有列。我的意思是找到存在COLUMN_2的行並獲得所有其他列?

+0

可能是一個愚蠢的問題,但你有沒有證實你確實有行滿足兩個條件在一起? (除非你想要一個OR操作,然後你應該把操作符改爲MUST_PASS_ONE) – 2013-03-06 16:30:03

+0

當然可以。有行滿足這兩個條件。我懷疑'ColumnPrefixFilter'不想與過濾器中的其他列一起工作。因爲,如果要將'filterA'更改爲'COLUMN_2'列的過濾值,則代碼運行良好。 – JarrLorck 2013-03-06 20:01:22

回答

0

我找到了部分決定。我可以使用QualifierFilter而不是ColumnPrefixFilter。它的工作原理:

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

我得到的行有一列COLUMN_2。但我仍然強烈需要獲得所有專欄,而不僅僅是我篩選的一篇。

相關問題