Hbase的过滤器查询
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的过滤器查询相关推荐
- 在Hbase使用过滤器(行键过滤器、列族与列过滤器、值过滤器)
本文介绍Hbase中的过滤器: 1.行键过滤器 2.列族与列过滤器 3.值过滤器 4.其他过滤器 格式如下: scan'表名',{FILTER=>过滤器(比较运算符,'比较器')"} ...
- 26个数据分析案例——第一站:基于Python的HBase冠字号查询系统
26个数据分析案例--第一站:基于Python的HBase冠字号查询系统 实验所需环境 • Python: Python 3.x: • Hadoop 2.7.7环境: • HBase 1.3.5: 数 ...
- Hbase关于过滤器对表的操作
Hbase关于过滤器对表的操作 使用过滤器对表操作 Hbase关于过滤器对表的操作 scan方法实例 过滤器有:行键过滤器.列族与列过滤器.值过滤器.时间过滤器.行键过滤器 行键过滤器 列族与列过滤器 ...
- hbase java api 查询_hbase查询api的基本使用
HBase是一个分布式的.面向列的开源数据库,不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.另一个不同的是HBase基于列的而不是基于行的模式. 项目中用到了hbase数据库,因为查 ...
- 基于Solr的HBase多条件查询测试
背景: 某电信项目中采用HBase来存储用户终端明细数据,供前台页面即时查询.HBase无可置疑拥有其优势,但其本身只对rowkey支持毫秒级的快速检索,对于多字段的组合查询却无能为力.针对HBase ...
- hbase 按时刻查询_HBase读写优化
一个系统上线之后,开发和调优将一直贯穿系统的生命周期中,HBase也不列外.这里学习下HBase的调优.Hbase查询优化 作为NoSQL数据库,增删改查是其最基本的功能,其中查询是最常用的一项.设置 ...
- hbase实现分页查询
[Author]: kwu hbase实现分页查询,实现按时间查询最新的15条,hbase的查询主要是通过rowkey来进行的,保证查询的高效.column的filter查询效率较低. 1.rowke ...
- spark读Hbase数据集成Hbase Filter(过滤器)
文章目录 过滤器简介 spark 读Hbase集成Filter TableInputFormat 源码 代码示例 基于hbase版本2.3.5 过滤器简介 Hbase 提供了种类丰富的过滤器(filt ...
- hbase过滤器查询
引言:过滤器的类型很多,但是可以分为两大类 比较过滤器 专用过滤器 过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端: hbase过滤器的比较运算符: LESS < ...
最新文章
- CAS Server(二):基于SpringBoot搭建客户端
- [转帖]虚拟内存探究 -- 第二篇:Python 字节
- 编写ShellCode
- jquery的一个代码
- oracle精确匹配时间,Oracle时间精确到时、分、秒处理方法
- OpenCL向量相加
- [精华][推荐]CAS SSO实现单点登录实例源码
- 7. 星际争霸之php设计模式--中介者模式
- 运用枚举展示静态数据
- Appium 解决微信公众号、小程序切换 webview 后无法定位元素的问题
- 跋山涉水 —— 深入 Redis 字典遍历
- C#中This的用法
- 软件工程(英文版 第8版)
- 杰奇2.4UTF安装教程+关关远程采集
- PHP实现用户扫描二维码后提示扫码成功的操作
- Openstack平台neutron模块之网络基础概念
- 俄勒冈之旅_欢迎美好的一天俄勒冈观众-消灭糖尿病2007
- 路由与交换|实验一 路由器基本配置
- 攻防视角下的信息收集
- 38. OP-TEE中secure stroage------安全文件数据格式和操作过程
热门文章
- RTTI(三)相关函数1【转自大富翁】
- Java虚拟机垃圾收集算法
- http://www.shanghaihaocong.com-WORDPRESS开发的企业主题站
- sendStickyBroadcast和sendStickyOrderedBroadcast
- C#.NET 上传图片时怎样限制文件格式
- MATLAB【十三】————仿真函数记录以及matlab变成小结
- 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
- VC++ 隐藏控制台程序窗口
- 【Qt】通过QtCreator源码学习Qt(二):跨平台编程
- 【linux】串口编程(三)——错误处理