四種過濾器 1、行鍵 過濾器 2、 前綴過濾器 3、 時間戳過濾器 4、 列族過濾器
package com.bw.hbasefilter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.client.HTable; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.filter.BinaryComparator; import org.apache.hadoop.hbase.filter.CompareFilter; import org.apache.hadoop.hbase.filter.Filter; import org.apache.hadoop.hbase.filter.PrefixFilter; import org.apache.hadoop.hbase.filter.QualifierFilter; import org.apache.hadoop.hbase.filter.RegexStringComparator; import org.apache.hadoop.hbase.filter.RowFilter; import org.apache.hadoop.hbase.filter.TimestampsFilter; public class HbaseFilter { //靜態塊 連接zk 並且配置操作的表 static HTable table; static { try { Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum", "linux04,linux05,linux06"); table = new HTable(conf, "Nurse"); } catch (IOException e) { e.printStackTrace(); } } //2、前綴過濾器 public static void prefixFilter() throws Exception { Scan scan = new Scan(); //過濾以 Nurse00009999 為前綴的行鍵 PrefixFilter filter = new PrefixFilter("Nurse00009999".getBytes()); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result r : scanner) { System.out.println("行鍵row:" + new String(r.getRow()));// 行鍵 System.out.println("查詢數據的結果:" + new String(r.getValue("info".getBytes(), "name".getBytes()))); } } //3、時間戳過濾器 兩個時間之間的數據 public static void timeFilter() throws Exception { Scan scan = new Scan(); List<Long> list = new ArrayList<Long>(); list.add(1557323272643L); list.add(1558146272160L); TimestampsFilter filter = new TimestampsFilter(list); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result r : scanner) { System.out.println("行鍵row:" + new String(r.getRow()));// 行鍵 System.out.println("查詢數據的結果:" + new String(r.getValue("info".getBytes(), "name".getBytes()))); } } //4、列族過濾器 每行數據含有這一列的 public static void qualifierFilter() throws Exception { Scan scan = new Scan(); Filter filter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("age")); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result r : scanner) { System.out.println("行鍵row:" + new String(r.getRow()));// 行鍵 System.out.println("查詢數據的結果:" + new String(r.getValue("info".getBytes(), "name".getBytes()))); } } // 1、行鍵過濾器 public static void rowFilter() throws Exception { Scan scan = new Scan(); Filter filter = new RowFilter(CompareFilter.CompareOp.LESS, // 要的是小於 Nurse00000100 值的行鍵數據 new BinaryComparator("Nurse0000100".getBytes())); scan.setFilter(filter); ResultScanner scanner = table.getScanner(scan); for (Result r : scanner) { System.out.println("行鍵row:" + new String(r.getRow()));// 行鍵 System.out.println("查詢數據的結果:" + new String(r.getValue("info".getBytes(), "name".getBytes()))); } } //調用 過濾器方法 public static void main(String[] args) throws Exception { //rowFilter(); //prefixFilter(); //timeFilter(); qualifierFilter(); } }