• 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();
            
        }
    }

     

  • 相关阅读:
    金额转中国大写
    double 四舍五入保留一定的位数
    通过ajax提交表单上传文件
    微信扫码提示浏览器打开的
    在Servlet中获取spring容器WebApplicationContext
    Oracle CONNECT by 简单用法
    JS 删除Array对象中的元素。
    数据导出excel
    DWZ 在js中刷新某个navTab
    Python发送邮件
  • 原文地址:https://www.cnblogs.com/JBLi/p/10885155.html
Copyright © 2020-2023  润新知