甘道夫 HBase(0.96以上版本)過濾器Filter詳解及執行個體代碼__HBase

來源:互聯網
上載者:User
說明: 本文參考官方 Ref Guide, Developer API和眾多部落格,並結合實測代碼編寫,詳細總結HBase的Filter功能,並附上每類Filter的相應代碼實現。 本文盡量遵從 Ref Guide中“9.4. Client Request Filters”的行文順序,便於讀者對比查看,但內容比官方文檔更加詳實。
***2014年7月18日更新,新增PageFilter和SkipFilter。***
歡迎轉載,請註明來源: http://blog.csdn.net/u010967382/article/details/37653177 目錄: 引言 -- 參數基礎 1. 結構(Structural)過濾器--FilterList 2.列值過濾器--SingleColumnValueFilter         2.1.第一種建構函式情況 -- 比較的關鍵字是字元數組         2.2.第二種建構函式情況 -- 比較的關鍵字是比較子ByteArrayComparable 3.索引值中繼資料         3.1. 基於列族過濾資料的FamilyFilter         3.2. 基於限定符Qualifier(列)過濾資料的QualifierFilter         3.3. 基於列名(即Qualifier)首碼過濾資料的ColumnPrefixFilter         3.4. 基於多個列名(即Qualifier)首碼過濾資料的MultipleColumnPrefixFilter         3.5. 基於列範圍(不是行範圍)過濾資料ColumnRangeFilter 4. RowKey 5. PageFilter 6. SkipFilter 7. Utility--FirstKeyOnlyFilter 8. 取得查詢結果 引言 -- 參數基礎
有兩個參數類在各類Filter中經常出現,統一介紹下: (1)比較子 CompareFilter.CompareOp 比較子用於定義比較關係,可以有以下幾類值供選擇: EQUAL                                  相等
GREATER                              大於
GREATER_OR_EQUAL           大於等於
LESS                                      小於
LESS_OR_EQUAL                  小於等於
NOT_EQUAL                        不等於

(2)比較子  ByteArrayComparable 通過比較子可以實現多樣化目標匹配效果,比較子 有以下子類可以使用: BinaryComparator               匹配完整位元組數組 
BinaryPrefixComparator     匹配位元組數組首碼 
BitComparator
NullComparator
RegexStringComparator    Regex匹配
SubstringComparator        子串匹配

1. 結構(Structural)過濾器--FilterList FilterList 代表一個 過濾器鏈 ,它可以包含一組即將應用於目標資料集的過濾器 ,過濾器間具有“與”   FilterList.Operator.MUST_PASS_ALL   和“或”  FilterList.Operator.MUST_PASS_ONE  關係。
官網執行個體代碼, 兩個 “ 或” 關係的 過濾器 的寫法: FilterList list = new FilterList(FilterList.Operator.MUST_PASS_ONE);   //資料只要滿足一組過濾器中的一個就可以 SingleColumnValueFilter filter1 = new SingleColumnValueFilter( cf, column, CompareOp.EQUAL, Bytes.toBytes("my value") ); list.add(filter1); SingleColumnValueFilter filter2 = new SingleColumnValueFilter( cf, column, CompareOp.EQUAL, Bytes.toBytes("my other value") ); list.add(filter2); Scan scan = new Scan(); scan.setFilter(list); 2. 列值過濾器--SingleColumnValueFilter SingleColumnValueFilter 用於測試 列值 相等 (CompareOp.EQUAL ), 不等 (CompareOp.NOT_EQUAL),或單側範圍 (e.g., CompareOp.GREATER)建構函式: (1)比較的關鍵字是一個字元數組 SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareFilter.CompareOp compareOp, byte[] value)
(2)比較的關鍵字是一個比較子(比較子下一小節做介紹) SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareFilter.CompareOp compareOp,  ByteArrayComparable comparator)
2.1.第一種建構函式情況 -- 比較的關鍵字是字元數組 官網範例程式碼, 檢查列值和字串'my value' 相等: SingleColumnValueFilter filter = new SingleColumnValueFilter( cf, column, CompareOp.EQUAL, Bytes.toBytes("my value") ); scan.setFilter(filter);
個人實測代碼:         HTable table = HBaseDAO.getHTable("147patents");         FilterList filterList =  new FilterList(FilterList.Operator.MUST_PASS_ALL);  
        SingleColumnValueFilter filter =  new SingleColumnValueFilter(                 Bytes.toBytes("patentinfo"),                 Bytes.toBytes("CREATE_TIME"),                 CompareOp.EQUAL,                 Bytes.toBytes("2013-06-08")                 );         filterList.addFilter(filter);         Scan scan =  new Scan();         scan.setFilter(filterList);         ResultScanner rs = table.getScanner(scan);          for (Result r : rs) {             System.out.println("Scan: " + r);         }         table.close();  
注意:還是大寫問題,HBase的列名必須大寫。
2.2.第二種建構函式情況 -- 比較的關鍵字是比較子 ByteArrayComparable 該章節主要是針對 SingleColumnValueFilter的 第二種建構函式使用方式做了一些舉例: (1)支援值比較的Regex -- RegexStringComparator 官網範例程式碼: RegexStringComparator  comp = new  RegexStringComparator("my.");   //任意以my打頭的值 SingleColumnValueFilter filter = new SingleColumnValueFilter( cf, column, CompareOp.EQUAL, comp ); scan.setFilter(filter);
個人實測代碼:         HTable table = HBaseDAO.getHTable("147patents");         FilterList filterList =  new FilterList(FilterList.Operator.MUST_PASS_ALL);                  RegexStringComparator comp =  new RegexStringComparator("2013-06-1.");                  SingleColumnValueFilter filter =  new SingleColumnValueFilter(                 Bytes.toBytes("patentinfo"),                 Bytes.toBytes("CREATE_TIME"),                 CompareOp.EQUAL,                 comp                 );         filterList.addFilter(filter);         Scan scan =  new Scan();         scan.setFilter(filterList);         ResultScanner rs = table.getScanner(scan);          for (Result r : rs) {             System.out.println("Scan: " + r);         }         table.close();  

(2)檢測一個子串是否存在於值中( 大小寫不敏感 ) -- SubstringComparator 官網範例程式碼: SubstringComparator comp = new  SubstringComparator("y val");   // looking for 'my value' SingleColumnValueFilter filter = new SingleColumnValueFilter( cf, column, CompareOp.EQUAL, comp ); s

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.