有沒有辦法在給定範圍內檢索行鍵而不實際檢索與該行鍵關聯的列/ CF?在範圍內獲取HBase行鍵而不檢索數據?
對於澄清:在我的例子,我們的表的行鍵是股票代碼名稱(如Google),在我們的web應用程序,我們希望來填充只使用我們在數據庫中的行鍵的自動完成構件。顯然,如果我們在用戶輸入'G'時檢索G和H之間所有股票的所有數據(而不是股票名稱),那麼我們將不必要地使我們的系統緊張。有任何想法嗎?
有沒有辦法在給定範圍內檢索行鍵而不實際檢索與該行鍵關聯的列/ CF?在範圍內獲取HBase行鍵而不檢索數據?
對於澄清:在我的例子,我們的表的行鍵是股票代碼名稱(如Google),在我們的web應用程序,我們希望來填充只使用我們在數據庫中的行鍵的自動完成構件。顯然,如果我們在用戶輸入'G'時檢索G和H之間所有股票的所有數據(而不是股票名稱),那麼我們將不必要地使我們的系統緊張。有任何想法嗎?
可以使用addFamily(字節[]系列)或addFamily(字節[]家庭,字節[]預選賽)只獲得相關數據
一個辦法是維持這將對鍵另一個索引表爲所有股票的所有可能的FSA狀態。因此,下次每當用戶鍵入'G'時,您所要做的就是點擊該表並檢索可能是與G相關的所有值的逗號分隔列表。
我會創建一個名爲'空:',並存儲所有行的空值。現在,您可以請求加載「empty:」列。這並不理想,但它比裝載大量數據的列族要好。
查看過濾器(http://hbase.apache.org/book/client.filter.html),特別是KeyOnlyFilter。過濾器的描述(http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/package-summary.html)是
過濾器將只返回每個KV的關鍵部分(該值將被重寫爲空)。
爲了限制特定範圍內的密鑰,使用Scan(rowStart,rowEnd)構造函數。
根據官方文檔,您可以使用兩個過濾器的組合來最佳地檢索行鍵:KeyOnlyFilter和FirstKeyOnlyFilter。 (我認爲「FirstKeyOnlyFilter」只會返回一次密鑰,即使是大而複雜的行)。如果您只想在給定範圍內使用按鍵,則可以將該範圍添加到掃描儀。
下面是一些示例代碼:
FilterList filters = new FilterList(FilterList.Operator.MUST_PASS_ALL,
new FirstKeyOnlyFilter(),
new KeyOnlyFilter());
Scan s = new Scan(filters);
// in order to limit the scan to a range
s.setStartRow(startRowKey); // first key in range
s.setStopRow(stopRowKey); // key value after the last key in the range
來源: https://hbase.apache.org/book.html#perf.hbase.client.rowkeyonly