2011-04-14 23 views
3

有沒有辦法在給定範圍內檢索行鍵而不實際檢索與該行鍵關聯的列/ CF?在範圍內獲取HBase行鍵而不檢索數據?

對於澄清:在我的例子,我們的表的行鍵是股票代碼名稱(如Google),在我們的web應用程序,我們希望來填充只使用我們在數據庫中的行鍵的自動完成構件。顯然,如果我們在用戶輸入'G'時檢索G和H之間所有股票的所有數據(而不是股票名稱),那麼我們將不必要地使我們的系統緊張。有任何想法嗎?

回答

0

可以使用addFamily(字節[]系列)或addFamily(字節[]家庭,字節[]預選賽)只獲得相關數據

0

一個辦法是維持這將對鍵另一個索引表爲所有股票的所有可能的FSA狀態。因此,下次每當用戶鍵入'G'時,您所要做的就是點擊該表並檢索可能是與G相關的所有值的逗號分隔列表。

1

我會創建一個名爲'空:',並存儲所有行的空值。現在,您可以請求加載「empty:」列。這並不理想,但它比裝載大量數據的列族要好。

3

根據官方文檔,您可以使用兩個過濾器的組合來最佳地檢索行鍵: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