我一直對HBase中的過濾器如何工作感到困惑(或者,大體上等同於HappyBase--我用它來與HBase進行交互)。我混亂的根源是,我似乎無法控制過濾器的功能。HBase中的過濾器:設計用於按行或按列還是兩者過濾數據?
某些過濾器(如SingleColumnValueFilter
)會導致不根據其某列的值排放行。這是有道理的 - 在我看來,這是過濾器應該是的。但是,像FirstKeyOnlyFilter
這樣的其他過濾器似乎不是按行方向進行過濾,而是過濾出呈現給請求者的數據 - 即,它們過濾列爲,如columns
參數。不僅如此,它們似乎影響其他過濾器是否可以訪問數據。
也許我只是用它們錯了。但是,對我來說,一個「過濾器」應該根據對其屬性進行操作的輸出來移除項目,例如「找到我身高超過7英尺的所有人!」但至少在HBase中,FirstKeyOnlyFilter
的行爲似乎更類似於「讓我的每個人都離開耳朵,沒有別的東西!」此外,如果我有以下過濾器:
SingleColumnValueFilter('body', 'height', =, 'regexstring:^over7ft$') AND FirstKeyOnlyFilter
,FirstKeyOnlyFilter
似乎限制第一個過濾器訪問列族:column「body:height」。
這是什麼設計選擇?上面的過濾器看起來像是在說:「讓我身高七英尺高的每個人都明白我的名字!」而是說的更像是「如果名字高7英尺,讓我明白我的名字!」。一行中的第一個關鍵字沒有列,只有名稱可以說有一個「高度」。
我在做什麼錯?這是HappyBase的一個特點,還是與HBase本身一樣?
有趣。但是,如果我想減少網絡I/O但不一定從數據庫讀取數據呢?即,「回到我身邊所有的行鍵,其中該行已比照:x的C值」 – eriophora
我已經更新了答案 –
@eriophora回答您的評論以上:使用columnvalue過濾器和FirstKeyOnlyFilter並傳遞參數「必須全部匹配」到您的掃描對象。 – halil