2013-03-03 85 views
0

我正在掃描上應用限定符過濾器以獲取所有讀取的項目。hbase限定符過濾器跳過其他列族

QualifierFilter readItems = new QualifierFilter(CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("read-1"))); 
readItems.isFamilyEssential(Bytes.toBytes("meta")); 

結果包含已讀項目,但它不包含其他列族。

結果只包含元列家族和讀取1限定符。

如何獲得所有CF並只讀取項目?

感謝

回答

1

目前,執行的操作是過濾器{}鍵值對_in {}鍵值由_out只保留鍵值的,其資格約束相匹配 - 這是不是你想要做什麼。如果限定符'read-1'不存在,您希望過濾出整行。您可以通過以下邏輯做到這一點(這是在Groovy,但應該是有意義)

def scan = new Scan() 
scan.addFamily('COLUMN_FAMILY'.bytes) 

def filter = new SingleColumnValueFilter('COLUMN_FAMILY'.bytes, 'read-1'.bytes, CompareFilter.CompareOp.NOT_EQUAL, new NullComparator()) 
filter.filterIfMissing = true 
scan.filter = filter 

這是一個良好的開端參數玩。我不確定你的'read-1'列中有什麼,但是,如果它是非空的,這應該做你想做的事情(或讓你更接近?)。

祝你好運!

+0

有沒有什麼東西只檢查限定符而不是它的實際值 – 2013-03-05 02:56:05

+0

我已經看過並嘗試過,但是從來沒有遇到過任何可以工作的東西(而且我花了不少時間在上面)我不知道 - 但 - 我不這麼認爲... – 2013-03-05 23:49:01

+0

檢查正確的限定符會很有效率,因爲它們在內部保持排序。所以我想我必須實現我自己的過濾器才能做到這一點。 – 2013-03-06 02:42:05