Hbase过滤器
Hbase过滤器简介
HBase的基本API,包括增、删、改、查等,增、删都是相对简单的操作,与传统的RDBMS相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根据行键的范围来查询(Scan)。 HBase不仅提供了这些简单的查询,而且提供了更加高级的过滤器(Filter)来查询。通过这些过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。
HBase过滤器的类型很多,但是可以分为两大类:比较过滤器,专用过滤器。
1. 比较过滤器 - 通用比较器
比较器作为过滤器的核心组成之一,用于处理具体的比较逻辑,例如字节级的比较,字符串级的比较等。
- BinaryComparator
二进制比较器,用于按字典顺序比较 Byte 数据值
- BinaryPrefixComparator
前缀二进制比较器,按前缀比较
- NullComparator
判断给定的是否为空
- BitComparator
按位比较
- RegexStringComparator
支持正则表达式的值比较,仅支持 EQUAL 和非EQUAL
- SubstringComparator
判断提供的子串是否出现在value中,不区分大小写
2. 比较过滤器 - 通用操作符
HBase提供了枚举类型的变量来表示我们常用的抽象操作符。
- LESS <
- LESS_OR_EQUAL <=
- EQUAL =
- NOT_EQUAL <>
- GREATER_OR_EQUAL >=
- GREATER >
- NO_OP 排除所有
3.比较过滤器 - 行健过滤器
- RowFilter 筛选出行健匹配的所有的行
- 语法 RowFilter(操作符,比较器)
- 性能 一般来讲,执行 Scan 使用 startRow/stopRow 方式比较好
- 示例代码
new RowFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(
Bytes.toBytes("testRowkey1")))
筛选出行健等于testRowkey1的行
new RowFilter(
CompareFilter.CompareOp.LESS_OR_EQUAL,
new BinaryComparator(
Bytes.toBytes("testRowkey20")))
筛选出行健小于等于testRowkey20的行
- 调用示例
Connection connection = ConnectionFactory.createConnection(
ConfigFactory.getInstance().getHbaseConf());
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(rowkey)));
scan.setFilter(filter);
ResultScanner results = table.getScanner(scan);
4.比较过滤器 - 列簇过滤器
- FamilyFilter 筛选出列簇匹配的数据 返回数据的单位是Cell,而不是整行数据
- 语法 FamilyFilter(操作符,比较器)
- 性能 通常在 Scan 过程中通过设定某些列族来实现该功能,而不是直接使用该过滤器
- 示例代码
new FamilyFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(
Bytes.toBytes("family1")))
筛选出列簇等于family1的cell
new FamilyFilter(CompareFilter.CompareOp.LESS,
new BinaryComparator(Bytes.toBytes("family20")))
筛选出列簇小于family20的cell
5.比较过滤器 - 子列过滤器
- QualifierFilter 筛选出子列匹配的数据 返回数据的单位是Cell,而不是整行数据
- 语法 QualifierFilter(操作符,比较器)
- 示例代码
new QualifierFilter(CompareOp.EQUAL, new RegexStringComparator("you."));
筛选出子列以you开头,不止是you,以及空的cell
new QualifierFilter(CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("column1")))
筛选出子列不等于column1的cell
6.比较过滤器 - 子列范围过滤器
- ColumnRangeFilter 该过滤器用于获取一个指定子列范围内的所有Cell。
- 语法 ColumnRangeFilter(子列起始值、是否包含起始值,子列结束值,是否包含结束值)
- 性能 该过滤器可以进行高效的子列内部扫描(因为子列是已经按字典排序好的),HBase-0.9.2 版本引入该功能。
- 示例代码
new ColumnRangeFilter(
Bytes.toBytes("column1"), true,
Bytes.toBytes("column10"), true)
筛选出子列大于等于column1,小于等于column10的 所有cell
7.比较过滤器 -列值过滤器
- ValueFilter 筛选出列值匹配的数据 返回数据的单位是Cell,而不是整行数据
- 语法 ValueFilter(操作符,比较器)
- 示例代码
new ValueFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("value"))
筛选出所有列值中包含value的cell
8.专用过滤器 - 行健前缀过滤器
- PrefixFilter 筛选出行健前缀匹配的所有的行
- 语法 PrefixFilter(行健前缀)
- 示例代码
new PrefixFilter(Bytes.toBytes("testRowkey"))
筛选出行健前缀等于testRowkey的所有行
9.专用过滤器 - 子列前缀过滤器
- ColumnPrefixFilter 筛选出包含前缀的所有子列 返回数据的单位是Cell,而不是整行数据一般来讲
- 语法 ColumnPrefixFilter(前缀)
- 示例代码
new ColumnPrefixFilter(Bytes.toBytes("column"))
筛选出所有以column开头子列的cellnew ColumnPrefixFilter(Bytes.toBytes("column"))
筛选出所有以column开头子列的cell
10.专用过滤器 - 多子列前缀过滤器
- MultipleColumnPrefixFilter MultipleColumnPrefixFilter 与 ColumnPrefixFilter 的行为类似,但可以指定多个子列前缀
- 语法 MultipleColumnPrefixFilter(前缀byte二维数组)
- 示例代码
byte[][] prefixes = new byte[][]{Bytes.toBytes("column 1"), Bytes.toBytes("column2")}
new MultipleColumnPrefixFilter (prefixes)
筛选出所有以column1和column2开头子列的cell
11.专用过滤器 - 列综合过滤器
- DependentColumnFilter 该过滤器尝试找到该列簇、子列所在的Cell。
- 语法 DependentColumnFilter(列簇、子列)
- 示例代码
new DependentColumnFilter(
Bytes.toBytes("family1"), Bytes.toBytes("column1"))
筛选出所有列簇family1、子列column1的所有Cell
12.专用过滤器 - 结构过滤器
- FilterList 该过滤器代表一个过滤器链 ,它可以包含一组即将应用于目标数据集的过滤器,过滤器间具有“与”和“或”关系。
- 语法
FilterList(列关系、过滤器集合)
FilterList.Operator.MUST_PASS_ ALL 关系与
FilterList.Operator.MUST_PASS_ ONE 关系或
- 示例代码
Connection connection = ConnectionFactory.createConnection(
ConfigFactory.getInstance().getHbaseConf());
Table table = connection.getTable(TableName.valueOf(tableName));
Scan scan = new Scan();
Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes(rowkey)));
Filter filter2 = new DependentColumnFilter(
Bytes.toBytes(“family1”), Bytes.toBytes(“column1”));
List<Filter> filters = new ArrayList<>();
filters.add(filter1);
filters.add(filter2);
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, filters);
scan.setFilter(filterList);
ResultScanner results = table.getScanner(scan);
Hbase过滤器的更多相关文章
- HBase学习——4.HBase过滤器
1.过滤器 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filter可以根据簇.列.版本等更多的条件来对数据进行过滤,基于Hbase本身提 ...
- Hadoop生态圈-Hbase过滤器(Filter)
Hadoop生态圈-Hbase过滤器(Filter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- HBase(七)Hbase过滤器
一.过滤器(Filter) 基础API中的查询操作在面对大量数据的时候是非常苍白的,这里Hbase提供了高级的查询方法:Filter.Filter可以根据簇.列.版本等更多的条件来对数据进行过滤,基于 ...
- HBase 学习之路(七)——HBase过滤器详解
一.HBase过滤器简介 Hbase提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predica ...
- HBase 系列(七)——HBase 过滤器详解
一.HBase过滤器简介 Hbase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predic ...
- 入门大数据---Hbase 过滤器详解
一.HBase过滤器简介 Hbase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predic ...
- Hbase过滤器Filter的使用心得(爬坑经验)
Hbase 的过滤器是个好东西.. 给这种非关系型数据库本来不能复杂查询的情况得到了很好的扩展..提供了很多的帮助.. 但是Filter的种类何其之多..让人眼花缭乱.. 譬如..分页类型的PageF ...
- hbase 过滤器 rowfilter
HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行 ...
- HBase过滤器的使用
一.常用过滤器: 1.数据准备: Rowkey:001 Family:Quilfifier address value: 昆明市西山区 Rowkey:001 Family:Quilfifier age ...
随机推荐
- TreeMap----的实现原理(红黑树)
TreeMap的实现是红黑树算法的实现,所以要了解TreeMap就必须对红黑树有一定的了解,其实这篇博文的名字叫做:根据红黑树的算法来分析TreeMap的实现,但是为了与Java提高篇系列博文保持一致 ...
- Python初学者第七天 字符串及简单操作
7day 数据类型:字符串 1.定义 字符串是一个有序的字符的集合,用于储存和表示基本的文本信息.单.双.三引号之间的内容称之为字符串: a = ‘hello world!’ b = "你好 ...
- eclipse中对Hadoop项目进行mvn clean install时报错的处理
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) ...
- 绕过安全狗等一些WAF收集
绕过安全狗sql注入 http://demo.74cms.com/plus/ajax_common.php?act=hotwordquery=錦union+select+1,group_concat% ...
- 将POST请求转换为DELETE、PUT等请求的方法
一.在WEB工程的web.xml文件中配置HiddenHttpMethodFilter 二.form 表单中添加一个隐藏域 name="_method" value="D ...
- 关于Could not obtain transaction-synchronized Session for current thread 这个异常。
Could not obtain transaction-synchronized Session for current thread 这个异常之前非常让我头大.对于网上的各种说法都试了一下反正都不 ...
- UVa 1220 - Party at Hali-Bula(树形DP)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- Dropdownlist控件属性 OnSelectedIndexChanged方法不触发
<asp:DropDownList ID="ddlWJLX" runat="server" OnSelectedIndexChanged="dd ...
- centos7 firewall指定IP与端口访问(常用)
1.启动防火墙 systemctl start firewalld.service 2.指定IP与端口 firewall-cmd --permanent --add-rich-rule="r ...
- Mac OS系统下配置hosts的方法
首先,介绍下什么是hosts Hosts是一个没有扩展名的系统文件,可以用系统自带的记事本等工具打开,作用就是将一些常用的网址域名与其对应的IP地址建立一个关联,当用户在浏览器输入一个需要登录的网址时 ...