Hbase 四種過濾器


四種過濾器   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();
        
    }
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM