HBase–經常使用過濾器篇

1. 比較過濾器
    (1) 比較過濾器的操做符
        LESS  <
        LESS_OR_EQUAL <=
        EQUAL =
        NOT_EQUAL <>
        GREATER_OR_EQUAL >=
        GREATER >
        NO_OP 排除全部

    (2) 經常使用比較過濾器的比較器
        BinaryComparator  按字節索引順序比較指定字節數組,採用Bytes.compareTo(byte[])
        BinaryPrefixComparator 跟前面相同,只是比較左端的數據是否相同
        NullComparator 判斷給定的是否爲空
        BitComparator 按位比較
        RegexStringComparator 提供一個正則的比較器,僅支持 EQUAL 和非EQUAL
        SubstringComparator 判斷提供的子串是否出如今value中
      
    (3) 比較過濾器的實際應用
        3-1) 行鍵過濾器 RowFilter
            Filter filter = new RowFilter(CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row-22")));
            scan.setFilter(filter);
      
            Filter filter1 = new RowFilter(CompareOp.EQUAL, new SubstringComparator("-5"));
            scan.setFilter(filter1);

      
        3-2) 列族過濾器FamilyFilter
            Filter filter1 = new FamilyFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes("colfam3")));
            scan.setFilter(filter1); 

     
        3-3) 列過濾器QualifierFilter
            filter = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("col-2")));
            scan.setFilter(filter1);

       
        3-4) 值過濾器ValueFilter
            Filter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator(".4") ); 
            scan.setFilter(filter1);

   
2. 專用過濾器
    (1) 前綴過濾器 PrefixFilter --針對行鍵
        Filter fileter = new PrefixFilter(Bytes.toBytes("hello"));
        scan.setFilter(fileter);

  
    (2) 列前綴過濾器
        Filter fileter = new ColumnPrefixFilter(Bytes.toBytes("hello"));
        scan.setFilter(filter);

  
3. 正則表達式過濾(RegexStringComparator)
    Scan scan = new Scan();
    RegexStringComparator comp = new RegexStringComparator("you."); // 以 you 開頭的字符串
    SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), CompareOp.EQUAL, comp);
    scan.setFilter(filter);

  
4. SubStringComparator
    用於監測一個子串是否存在於值中,而且不區分大小寫。
    Scan scan = new Scan();
    SubstringComparator comp = new SubstringComparator("1129"); // 查找包含 1129 的字符串
    SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("family"), Bytes.toBytes("qualifier"), CompareOp.EQUAL, comp);
    scan.setFilter(filter);

  
5. 布隆過濾器 BloomFilter
    簡介:hbase的storefile有不少,隨機查的時候可能須要遍歷不少storefile,若是在建表的時候指定了bloomfilter,則在get查詢(scan無論用)的時候就能夠過濾掉不少不符合規則的storefile,提升查詢效率。

    參考:http://blog.csdn.net/opensure/article/details/46453681

  

6.  更多過濾器實例
    參考:http://blog.csdn.net/u012185296/article/details/47338549
相關文章
相關標籤/搜索