Hbase 學習(二)各類filter

各類filter

今天的主題是Filter,hbase客戶端查詢的時候,自定義查詢filter。spa

直接上例子吧,很少說別的了,第一個例子是RowFilter的。code

複製代碼

Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("colfam1"),
Bytes.toBytes("col-0"));
Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,                                               new BinaryComparator(Bytes.toBytes("row-22")));
scan.setFilter(filter1);
ResultScanner scanner1 = table.getScanner(scan);for (Result res : scanner1) {
    System.out.println(res);
}
scanner1.close();

Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,                                              new RegexStringComparator(".*-.5"));
scan.setFilter(filter2);
ResultScanner scanner2 = table.getScanner(scan);for (Result res : scanner2) {
     System.out.println(res);
}
scanner2.close();

Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,                                               new SubstringComparator("-5"));
scan.setFilter(filter3);
ResultScanner scanner3 = table.getScanner(scan);for (Result res : scanner3) {
      System.out.println(res);
}
scanner3.close();

複製代碼

 

第二個例子是QualifierFilter的orm

複製代碼

Filter filter = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,                                                  new BinaryComparator(Bytes.toBytes("col-2")));
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {
     System.out.println(result);
}
scanner.close();
Get get = new Get(Bytes.toBytes("row-5"));
get.setFilter(filter);
Result result = table.get(get);

複製代碼

 

第三個例子是ValueFilterget

複製代碼

Filter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL,                                                new SubstringComparator(".4"));
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {       for (KeyValue kv : result.raw()) {
             System.out.println("KV: " + kv + ", Value: " +
             Bytes.toString(kv.getValue()));
       }
}
scanner.close();
Get get = new Get(Bytes.toBytes("row-5"));
get.setFilter(filter);
Result result = table.get(get);for (KeyValue kv : result.raw()) {
     System.out.println("KV: " + kv + ", Value: " +
     Bytes.toString(kv.getValue()));
}

複製代碼

 

第四個例子是PageFilter,分頁的filterstring

複製代碼

Filter filter = new PageFilter(15);int totalRows = 0;byte[] lastRow = null;while (true) {
    Scan scan = new Scan();
    scan.setFilter(filter);    if (lastRow != null) {         byte[] startRow = Bytes.add(lastRow, POSTFIX);
        System.out.println("start row: " +Bytes.toStringBinary(startRow));
         scan.setStartRow(startRow);
    }
    ResultScanner scanner = table.getScanner(scan);  
    int localRows = 0;
    Result result;    while ((result = scanner.next()) != null) {
        System.out.println(localRows++ + ": " + result);
         totalRows++;
         lastRow = result.getRow();
   }
   scanner.close();   if (localRows == 0) break;
}
System.out.println("total rows: " + totalRows);

複製代碼

 

第五個例子是InclusiveStopFilter,它是什麼意思呢,就是掃描到某個rowkey就中止,下面的例子是從row-3開始掃描,一直掃描到row-5結束。it

複製代碼

Filter filter = newInclusiveStopFilter(Bytes.toBytes("row-5"));
Scan scan = new Scan();
scan.setStartRow(Bytes.toBytes("row-3"));
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);    for (Result result : scanner) {
    System.out.println(result);
}
scanner.close();

複製代碼

 

第六個SingleColumnValueFilter,這個是咱們最經常使用的filter,我以爲很好用。table

複製代碼

SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("colfam1"),
Bytes.toBytes("col-5"), CompareFilter.CompareOp.NOT_EQUAL,new SubstringComparator("val-5"));
filter.setFilterIfMissing(true);
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan);for (Result result : scanner) {  for (KeyValue kv : result.raw()) {
     System.out.println("KV: " + kv + ", Value: " +
     Bytes.toString(kv.getValue()));
  }
}
scanner.close();
Get get = new Get(Bytes.toBytes("row-6"));
get.setFilter(filter);
Result result = table.get(get);
System.out.println("Result of get: ");for (KeyValue kv : result.raw()) {
     System.out.println("KV: " + kv + ", Value: " +
     Bytes.toString(kv.getValue()));
}

複製代碼

 

第七個FilterList,它有兩個選項,須要所有經過,仍是一個經過就行,MUST_PASS_ALL,MUST_PASS_ONE。ast

複製代碼

List<Filter> filters = new ArrayList<Filter>();
Filter filter1 = newRowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row-03")));
filters.add(filter1);302Filter filter2 = newRowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row-06")));
filters.add(filter2);
Filter filter3 = newQualifierFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator("col-0[03]"));
filters.add(filter3);
FilterList filterList1 = new FilterList(filters);
Scan scan = new Scan();
scan.setFilter(filterList1);
ResultScanner scanner1 = table.getScanner(scan);for (Result result : scanner1) {for (KeyValue kv : result.raw()) {
    System.out.println("KV: " + kv + ", Value: " +
    Bytes.toString(kv.getValue()));
    }
}
scanner1.close();
FilterList filterList2 = new FilterList(

FilterList.Operator.MUST_PASS_ONE, filters);
scan.setFilter(filterList2);
ResultScanner scanner2 = table.getScanner(scan); for (Result result : scanner2) {     for (KeyValue kv : result.raw()) {
    System.out.println("KV: " + kv + ", Value: " +
    Bytes.toString(kv.getValue()));
    }
}
scanner2.close();

複製代碼

相關文章
相關標籤/搜索