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 ...
随机推荐
- android webview 播放 video经验总结
在目前PC浏览器上,对video的支持基本都没什么问题了.但是如果用webview去跑这样的页面就会遇到许多问题. 下面一段html <!DOCTYPE html> <html> ...
- yii 只查询指定字段
$cri = new CDBcriteria(); $cri->addCondition( ' hid = '.$hid.' ' ); $cri->select = 'id,propert ...
- js 巧妙去除数组中的重复项
1.代码如下: var toObject = function(a) { var o = {}; for (var i=0, j=a.length; i<j; i=i+1) { // 这里我调整 ...
- mongodb数据库集合操作
1:更新update update() 方法用于更新已存在的文档.语法格式如下: db.collection.update( <query>, <update>, { upse ...
- 使用jQuery操作input的value值
表单控件是我们的重中之重,因为一旦牵扯到数据交互,离不开form表单的使用,比如用户的注册登录功能等 那么通过上节知识点我们了解到,我们在使用jquery方法操作表单控件的方法: $(selector ...
- 快速替换dll命名空间 z
Step1:使用ildasm将代码反编译成il中间语言. 名字存贮为你想要的名字. Step2:用记事本打开il文件全局替换命名空间. Step3:使用ilasm将il文件编译成dll 按下回车即可生 ...
- deepin ubuntu等创建桌面快捷方式
Linux网上下载软件一般只会有.sh结尾执行程序.并不会像商店下载一样自动创建桌面图标.此时需要自行进行编辑. #创建一个桌面图标后缀名为.desktop touch myDesktop.deskt ...
- 【2D游戏引擎】那些年对游戏对象的思考
WIP源代码: Github OSC镜像 对象系统以对象为中心,对象系统的最基本设计策略是基于组件的设计.对象系统将尽量避免使用继承方式来拓展游戏对象,恰当的使用Mix-in来来最属性做拓展,单个属性 ...
- js 联动实现日期选择,一般用作生日
实现目标:年月日三个select 输入框,以及一个hidden的input,通过js获取input的值,如果有值切是日期格式,年月日select为input中的时间.否则为空.年默认区间段为1900年 ...
- angular里forRoot的作用
模块A是这样定义的 @NgModule({ providers: [AService], declarations: [ TitleComponent ], exports: [ TitleCompo ...