乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      HBase Filter 過濾器之QualifierFilter詳解

       新進小設(shè)計 2022-03-25

      前言:本文詳細介紹了 HBase QualifierFilter 過濾器 Java&Shell API 的使用,并貼出了相關(guān)示例代碼以供參考。QualifierFilter 基于列名進行過濾,在工作中涉及到需要通過HBase 列名進行數(shù)據(jù)過濾時可以考慮使用它。比較器細節(jié)及原理請參照之前的更文:HBase Filter 過濾器之比較器 Comparator 原理及源碼學(xué)習(xí)

      一。Java Api

      頭部代碼

      /**
       * 用于列名(Qualifier)過濾。
       */
      public class QualifierFilterDemo {
      
          private static boolean isok = false;
          private static String tableName = "test";
          private static String[] cfs = new String[]{"f"};
          private static String[] data = new String[]{
                  "row-1:f:name:Wang", "row-1:f:age:20",
                  "row-2:f:name:Zhou", "row-2:f:age:10",
                  "row-3:f:gender:男", "row-3:f:name:Li",
                  "row-4:f:namana:xyz", "row-4:f:age:Zhao"
          };
      
          public static void main(String[] args) throws IOException {
      
              MyBase myBase = new MyBase();
              Connection connection = myBase.createConnection();
              if (isok) {
                  myBase.deleteTable(connection, tableName);
                  myBase.createTable(connection, tableName, cfs);
                  // 造數(shù)據(jù)
                  myBase.putRows(connection, tableName, data);
              }
              Table table = connection.getTable(TableName.valueOf(tableName));
              Scan scan = new Scan();
      

      中部代碼
      向右滑動滾動條可查看輸出結(jié)果。

      1. BinaryComparator 構(gòu)造過濾器

              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("age"))); // [row-1:f:age, row-2:f:age, row-4:f:age]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("name"))); // [row-1:f:age, row-2:f:age, row-3:f:gender, row-4:f:age, row-4:f:namana]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("gender"))); // [row-1:f:name, row-2:f:name, row-3:f:name, row-4:f:namana]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes("name"))); // [row-1:f:name, row-2:f:name, row-3:f:name]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes("gender"))); // [row-1:f:age, row-2:f:age, row-4:f:age]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("gender"))); // [row-1:f:age, row-2:f:age, row-3:f:gender, row-4:f:age]
      

      2. BinaryPrefixComparator 構(gòu)造過濾器

              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("nam"))); // [row-1:f:name, row-2:f:name, row-3:f:name, row-4:f:namana]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryPrefixComparator(Bytes.toBytes("nam"))); // [row-1:f:age, row-2:f:age, row-3:f:gender, row-4:f:age]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.GREATER, new BinaryPrefixComparator(Bytes.toBytes("g"))); // [row-1:f:name, row-2:f:name, row-3:f:name, row-4:f:namana]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryPrefixComparator(Bytes.toBytes("n"))); // [row-1:f:name, row-2:f:name, row-3:f:name, row-4:f:namana]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.LESS, new BinaryPrefixComparator(Bytes.toBytes("m"))); // [row-1:f:age, row-2:f:age, row-3:f:gender, row-4:f:age]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryPrefixComparator(Bytes.toBytes("a"))); // [row-1:f:age, row-2:f:age, row-4:f:age]
      

      3. SubstringComparator 構(gòu)造過濾器

              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("g")); // [row-1:f:age, row-2:f:age, row-3:f:gender, row-4:f:age]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.NOT_EQUAL, new SubstringComparator("n")); // [row-1:f:age, row-2:f:age, row-4:f:age]
      

      4. RegexStringComparator 構(gòu)造過濾器

              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.NOT_EQUAL, new RegexStringComparator("nam")); // [row-1:f:age, row-2:f:age, row-3:f:gender, row-4:f:age]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("nam")); // [row-1:f:name, row-2:f:name, row-3:f:name, row-4:f:namana]
              QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("n[a-z]m")); // [row-1:f:name, row-2:f:name, row-3:f:name, row-4:f:namana]
      

      尾部代碼

              scan.setFilter(qualifierFilter);
              ResultScanner scanner = table.getScanner(scan);
              Iterator<Result> iterator = scanner.iterator();
              LinkedList<String> rowkeys = new LinkedList<>();
              while (iterator.hasNext()) {
                  Result result = iterator.next();
                  String rowkey = Bytes.toString(result.getRow());
                  rowkeys.add(rowkey);
              }
              System.out.println(rowkeys);
              scanner.close();
              table.close();
              connection.close();
          }
      }
      

      二。Shell Api

      1. BinaryComparator 構(gòu)造過濾器

      方式一:

      hbase(main):003:0> scan 'test',{FILTER=>"QualifierFilter(=,'binary:age')"}
      ROW                                              COLUMN+CELL
       row-1                                           column=f:age, timestamp=1589252853542, value=20
       row-2                                           column=f:age, timestamp=1589252853542, value=10
       row-4                                           column=f:age, timestamp=1589252853542, value=Zhao
      3 row(s) in 0.0680 seconds
      

      支持的比較運算符:= != > >= < <=,不再一一舉例。

      方式二:

      import org.apache.hadoop.hbase.filter.CompareFilter
      import org.apache.hadoop.hbase.filter.BinaryComparator
      import org.apache.hadoop.hbase.filter.QualifierFilter
      
      hbase(main):010:0> scan 'test',{FILTER => QualifierFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), BinaryComparator.new(Bytes.toBytes('age')))}
      ROW                                              COLUMN+CELL
       row-1                                           column=f:age, timestamp=1589252853542, value=20
       row-2                                           column=f:age, timestamp=1589252853542, value=10
       row-4                                           column=f:age, timestamp=1589252853542, value=Zhao
      3 row(s) in 0.0400 seconds
      

      支持的比較運算符:LESS、LESS_OR_EQUAL、EQUAL、NOT_EQUAL、GREATER、GREATER_OR_EQUAL,不再一一舉例。

      推薦使用方式一,更簡潔方便。

      2. BinaryPrefixComparator 構(gòu)造過濾器

      方式一:

      hbase(main):011:0> scan 'test',{FILTER=>"QualifierFilter(=,'binaryprefix:nam')"}
      ROW                                              COLUMN+CELL
       row-1                                           column=f:name, timestamp=1589252853542, value=Wang
       row-2                                           column=f:name, timestamp=1589252853542, value=Zhou
       row-3                                           column=f:name, timestamp=1589252853542, value=Li
       row-4                                           column=f:namana, timestamp=1589252853542, value=xyz
      4 row(s) in 0.0410 seconds
      

      方式二:

      import org.apache.hadoop.hbase.filter.CompareFilter
      import org.apache.hadoop.hbase.filter.BinaryPrefixComparator
      import org.apache.hadoop.hbase.filter.QualifierFilter
      
      hbase(main):014:0> scan 'test',{FILTER => QualifierFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), BinaryPrefixComparator.new(Bytes.toBytes('nam')))}
      ROW                                              COLUMN+CELL
       row-1                                           column=f:name, timestamp=1589252853542, value=Wang
       row-2                                           column=f:name, timestamp=1589252853542, value=Zhou
       row-3                                           column=f:name, timestamp=1589252853542, value=Li
       row-4                                           column=f:namana, timestamp=1589252853542, value=xyz
      4 row(s) in 0.0200 seconds
      

      其它同上。

      3. SubstringComparator 構(gòu)造過濾器

      方式一:

      hbase(main):015:0> scan 'test',{FILTER=>"QualifierFilter(=,'substring:am')"}
      ROW                                              COLUMN+CELL
       row-1                                           column=f:name, timestamp=1589252853542, value=Wang
       row-2                                           column=f:name, timestamp=1589252853542, value=Zhou
       row-3                                           column=f:name, timestamp=1589252853542, value=Li
       row-4                                           column=f:namana, timestamp=1589252853542, value=xyz
      4 row(s) in 0.0230 seconds
      

      方式二:

      import org.apache.hadoop.hbase.filter.CompareFilter
      import org.apache.hadoop.hbase.filter.SubstringComparator
      import org.apache.hadoop.hbase.filter.QualifierFilter
      
      hbase(main):017:0> scan 'test',{FILTER => QualifierFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('am'))}
      ROW                                              COLUMN+CELL
       row-1                                           column=f:name, timestamp=1589252853542, value=Wang
       row-2                                           column=f:name, timestamp=1589252853542, value=Zhou
       row-3                                           column=f:name, timestamp=1589252853542, value=Li
       row-4                                           column=f:namana, timestamp=1589252853542, value=xyz
      4 row(s) in 0.0220 seconds
      

      區(qū)別于上的是這里直接傳入字符串進行比較,且只支持EQUAL和NOT_EQUAL兩種比較符。

      4. RegexStringComparator 構(gòu)造過濾器

      import org.apache.hadoop.hbase.filter.CompareFilter
      import org.apache.hadoop.hbase.filter.RegexStringComparator
      import org.apache.hadoop.hbase.filter.QualifierFilter
      
      hbase(main):019:0> scan 'test',{FILTER => QualifierFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), RegexStringComparator.new('n[a-z]m'))}
      ROW                                              COLUMN+CELL
       row-1                                           column=f:name, timestamp=1589252853542, value=Wang
       row-2                                           column=f:name, timestamp=1589252853542, value=Zhou
       row-3                                           column=f:name, timestamp=1589252853542, value=Li
       row-4                                           column=f:namana, timestamp=1589252853542, value=xyz
      4 row(s) in 0.0250 seconds
      

      該比較器直接傳入字符串進行比較,且只支持EQUAL和NOT_EQUAL兩種比較符。若想使用第一種方式可以傳入regexstring試一下,我的版本有點低暫時不支持,不再演示了。

      注意這里的正則匹配指包含關(guān)系,對應(yīng)底層find()方法。

      QualifierFilter 不支持使用LongComparator比較器,且BitComparator、NullComparator 比較器用之甚少,也不再介紹。

      查看文章全部源代碼請訪以下GitHub地址:

      https://github.com/zhoupengbo/demos-bigdata/blob/master/hbase/hbase-filters-demos/src/main/java/com/zpb/demos/QualifierFilterDemo.java
      

      轉(zhuǎn)載請注明出處!歡迎關(guān)注本人微信公眾號【HBase工作筆記】

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多