hbase过滤器的比较运算符:

LESS <
LESS_OR_EQUAL <=
EQUAL =
NOT_EQUAL <>
GREATER_OR_EQUAL >=
GREATER >
NO_OP 排除所有

hbase过滤器的比较运算符:

BinaryComparator 按字节索引顺序比较指定字节数组,采用Bytes.compareTo(byte[])
BinaryPrefixComparator 跟前面相同,只是比较左端的数据是否相同
NullComparator 判断给定的是否为空
BitComparator 按位比较
RegexStringComparator 提供一个正则的比较器,仅支持 EQUAL 和非EQUAL
SubstringComparator 判断提供的子串是否出现在value中。

Ⅰ、比较过滤器

①、rowKey过滤器RowFilter

通过RowFilter过滤比rowKey 0003小的所有值出来

/*** hbase行键过滤器RowFilter*/public static void rowKeyFilter() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));Scan scan = new Scan();RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("0003")));scan.setFilter(rowFilter);ResultScanner resultScanner = myuser.getScanner(scan);for (Result result : resultScanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));}myuser.close();}

②、列族过滤器FamilyFilter

查询比f2列族小的所有的列族内的数据

 /*** hbase列族过滤器FamilyFilter*/public static void familyFilter() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));Scan scan = new Scan();FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS, new SubstringComparator("f2"));scan.setFilter(familyFilter);ResultScanner resultScanner = myuser.getScanner(scan);for (Result result : resultScanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "age".getBytes())));System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));}myuser.close();}

③、列过滤器QualifierFilter

只查询name列的值

/*** hbase列过滤器*/public static void qualifierFilter() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));Scan scan = new Scan();QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("name"));scan.setFilter(qualifierFilter);ResultScanner resultScanner = myuser.getScanner(scan);for (Result result : resultScanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来//    System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));}myuser.close();}

④列值过滤器ValueFilter

查询所有列当中包含8的数据

/*** hbase值过滤器* 查询包含8的列值*/public static void valueFilter() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));Scan scan = new Scan();ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("8"));scan.setFilter(valueFilter);ResultScanner resultScanner = myuser.getScanner(scan);for (Result result : resultScanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来//    System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));}myuser.close();}

Ⅱ、专用过滤器

①、单列值过滤器 SingleColumnValueFilter

SingleColumnValueFilter会返回满足条件的整列值的所有字段

 /*** 单列值过滤器,返回满足条件的整行数据*/public static void singleColumnFilter() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));Scan scan = new Scan();SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());scan.setFilter(singleColumnValueFilter);ResultScanner resultScanner = myuser.getScanner(scan);for (Result result : resultScanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));}myuser.close();}

②、列值排除过滤器SingleColumnValueExcludeFilter

与单列值过滤器SingleColumnValueFilter相反,会排除掉指定的列,其他的列全部返回

③、rowkey前缀过滤器PrefixFilter

查询以00开头的所有前缀的rowkey

/*** 行键前缀过滤器*/public static void preFilter() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));Scan scan = new Scan();PrefixFilter prefixFilter = new PrefixFilter("00".getBytes()); scan.setFilter(prefixFilter);ResultScanner resultScanner = myuser.getScanner(scan);for (Result result : resultScanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));}myuser.close();}

④、分页过滤器PageFilter

通过pageFilter实现分页过滤器

 public static void pageFilter2() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));int pageNum = 3;int pageSize = 2;Scan scan = new Scan();if (pageNum == 1) {PageFilter filter = new PageFilter(pageSize);scan.setStartRow(Bytes.toBytes(""));scan.setFilter(filter);scan.setMaxResultSize(pageSize);ResultScanner scanner = myuser.getScanner(scan);for (Result result : scanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来
//            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));//System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));}} else {String startRowKey = "";PageFilter filter = new PageFilter((pageNum - 1) * pageSize + 1);scan.setStartRow(startRowKey.getBytes());scan.setMaxResultSize((pageNum - 1) * pageSize + 1);scan.setFilter(filter);ResultScanner scanner = myuser.getScanner(scan);for (Result result : scanner) {byte[] row = result.getRow();startRowKey = new String(row);}Scan scan2 = new Scan();scan2.setStartRow(startRowKey.getBytes());scan2.setMaxResultSize(Long.valueOf(pageSize));PageFilter filter2 = new PageFilter(pageSize);scan2.setFilter(filter2);ResultScanner scanner1 = myuser.getScanner(scan2);for (Result result : scanner1) {byte[] row = result.getRow();System.out.println(new String(row));}}myuser.close();}

⑤、多过滤器综合查询FilterList

需求:使用SingleColumnValueFilter查询f1列族,name为刘备的数据,并且同时满足rowkey的前缀以00开头的数据(PrefixFilter)

/*** 多过滤器组合使用*/public static void manyFilter() throws IOException {//获取连接Configuration conf = new Configuration();conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181");Connection connection = ConnectionFactory.createConnection(conf);Table myuser = connection.getTable(TableName.valueOf("myuser"));Scan scan = new Scan();FilterList filterList = new FilterList();SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("f1".getBytes(), "name".getBytes(), CompareFilter.CompareOp.EQUAL, "刘备".getBytes());PrefixFilter prefixFilter = new PrefixFilter("00".getBytes());filterList.addFilter(singleColumnValueFilter);filterList.addFilter(prefixFilter);scan.setFilter(filterList);ResultScanner scanner = myuser.getScanner(scan);for (Result result : scanner) {//获取rowkeySystem.out.println(Bytes.toString(result.getRow()));//指定列族以及列打印列当中的数据出来
//            System.out.println(Bytes.toInt(result.getValue("f1".getBytes(), "id".getBytes())));System.out.println(Bytes.toString(result.getValue("f1".getBytes(), "name".getBytes())));//System.out.println(Bytes.toString(result.getValue("f2".getBytes(), "phone".getBytes())));}myuser.close();}

Hbase的过滤器查询相关推荐

  1. 在Hbase使用过滤器(行键过滤器、列族与列过滤器、值过滤器)

    本文介绍Hbase中的过滤器: 1.行键过滤器 2.列族与列过滤器 3.值过滤器 4.其他过滤器 格式如下: scan'表名',{FILTER=>过滤器(比较运算符,'比较器')"} ...

  2. 26个数据分析案例——第一站:基于Python的HBase冠字号查询系统

    26个数据分析案例--第一站:基于Python的HBase冠字号查询系统 实验所需环境 • Python: Python 3.x: • Hadoop 2.7.7环境: • HBase 1.3.5: 数 ...

  3. Hbase关于过滤器对表的操作

    Hbase关于过滤器对表的操作 使用过滤器对表操作 Hbase关于过滤器对表的操作 scan方法实例 过滤器有:行键过滤器.列族与列过滤器.值过滤器.时间过滤器.行键过滤器 行键过滤器 列族与列过滤器 ...

  4. hbase java api 查询_hbase查询api的基本使用

    HBase是一个分布式的.面向列的开源数据库,不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. 项目中用到了hbase数据库,因为查 ...

  5. 基于Solr的HBase多条件查询测试

    背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力.针对HBase ...

  6. hbase 按时刻查询_HBase读写优化

    一个系统上线之后,开发和调优将一直贯穿系统的生命周期中,HBase也不列外.这里学习下HBase的调优.Hbase查询优化 作为NoSQL数据库,增删改查是其最基本的功能,其中查询是最常用的一项.设置 ...

  7. hbase实现分页查询

    [Author]: kwu hbase实现分页查询,实现按时间查询最新的15条,hbase的查询主要是通过rowkey来进行的,保证查询的高效.column的filter查询效率较低. 1.rowke ...

  8. spark读Hbase数据集成Hbase Filter(过滤器)

    文章目录 过滤器简介 spark 读Hbase集成Filter TableInputFormat 源码 代码示例 基于hbase版本2.3.5 过滤器简介 Hbase 提供了种类丰富的过滤器(filt ...

  9. hbase过滤器查询

    引言:过滤器的类型很多,但是可以分为两大类 比较过滤器 专用过滤器 过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端: hbase过滤器的比较运算符: LESS < ...

最新文章

  1. CAS Server(二):基于SpringBoot搭建客户端
  2. [转帖]虚拟内存探究 -- 第二篇:Python 字节
  3. 编写ShellCode
  4. jquery的一个代码
  5. oracle精确匹配时间,Oracle时间精确到时、分、秒处理方法
  6. OpenCL向量相加
  7. [精华][推荐]CAS SSO实现单点登录实例源码
  8. 7. 星际争霸之php设计模式--中介者模式
  9. 运用枚举展示静态数据
  10. Appium 解决微信公众号、小程序切换 webview 后无法定位元素的问题
  11. 跋山涉水 —— 深入 Redis 字典遍历
  12. C#中This的用法
  13. 软件工程(英文版 第8版)
  14. 杰奇2.4UTF安装教程+关关远程采集
  15. PHP实现用户扫描二维码后提示扫码成功的操作
  16. Openstack平台neutron模块之网络基础概念
  17. 俄勒冈之旅_欢迎美好的一天俄勒冈观众-消灭糖尿病2007
  18. 路由与交换|实验一   路由器基本配置
  19. 攻防视角下的信息收集
  20. 38. OP-TEE中secure stroage------安全文件数据格式和操作过程

热门文章

  1. RTTI(三)相关函数1【转自大富翁】
  2. Java虚拟机垃圾收集算法
  3. http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站
  4. sendStickyBroadcast和sendStickyOrderedBroadcast
  5. C#.NET 上传图片时怎样限制文件格式
  6. MATLAB【十三】————仿真函数记录以及matlab变成小结
  7. 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
  8. VC++ 隐藏控制台程序窗口
  9. 【Qt】通过QtCreator源码学习Qt(二):跨平台编程
  10. 【linux】串口编程(三)——错误处理