HBase--DependentColumnFilter(参考例过滤器 )详解
DependentColumnFilter是一种允许用户指定一个参考列或引用列来过滤其他列的过滤器,过滤的原则是基于参考列的时间戳来进行筛选 。
官方说明:
大意:此过滤器提供两个参数--列族和列限定符,它将返回与参考列具有相同时间戳的行的所有键值对。如果某行不包含这个指定的列,则什么都不返回。
此过滤器还提供了四种构造函数:
DependentColumnFilter()
DependentColumnFilter(byte[] family,byte[] qulifier)
DependentColumnFilter(byte[] family,byte[] qulifier,boolean dropDependentColumn)
DependentColumnFilter(byte[] family,byte[] qulifier,boolean dropDependentColumn,CompareOp valueCompareOp, WritableByteArrayComparable valueComparator)
相关参数:
boolean dropDependentColumn -- 决定参考列被返回还是丢弃,为true时表示参考列被返回,为false时表示被丢弃
CompareOp valueCompareOp -- 比较运算符
WritableByteArrayComparable valueComparator -- 比较器
更深入理解请看下面的例子:
测试表数据如下(图1):
public class HDependentColumnFilter { public static void dependentColumnFilter(Filter filter,Connection connection){
try {
Table table = connection.getTable(TableName.valueOf("student"));
Scan scan = new Scan();
scan.setFilter(filter);//为全表扫描器设置过滤器
ResultScanner scanner;
scanner = table.getScanner(scan);
for (Result result : scanner) {
for (Cell cell : result.rawCells()) {
System.out.println("key:"+CellUtil.getCellKeyAsString(cell)+" "+"value:"+Bytes.toString(CellUtil.cloneValue(cell)));//输出单元格对应的键和值
}
}
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
Configuration conf = HBaseConfiguration.create();
conf.set("habse.rootdir","hdfs://master:9000/hbase-1.0.2");
conf.set("hbase.zookeeper.quorum","master,node1,node2");
Connection connection;
try {
connection = ConnectionFactory.createConnection(conf);
Admin admin = connection.getAdmin();
//DependentColumnFilter dependentColumnFilter = new DependentColumnFilter( Bytes.toBytes("info"),Bytes.toBytes("name"),false);(1) //DependentColumnFilter dependentColumnFilter = new DependentColumnFilter( Bytes.toBytes("info"),Bytes.toBytes("name"),true); (2) //DependentColumnFilter dependentColumnFilter = new DependentColumnFilter( Bytes.toBytes("info"),Bytes.toBytes("name"),false,CompareOp.EQUAL, new BinaryPrefixComparator(Bytes.toBytes("mobin"))); (3) dependentColumnFilter(dependentColumnFilter,connection);
} catch (IOException e) {
e.printStackTrace();
}
}
}
解析:
去掉(1)对应的的注释:以info:name对应的时间戳为条件对同列族的其他列(包括info:name)进行筛选,即以timestamp=1448789165850,timestamp=1448789339803,timestampe=1448796208530为条件对info的其他列进行筛选,根据表(图1)可知info列族中时间戳值为1448789165850,1448789339803
1448796208530的还有rowkey=1,1info:age对应的行
其输出如下:
key:1/info:age/1448789165850/Put/vlen=2/seqid=0 value:22
key:1/info:name/1448789165850/Put/vlen=5/seqid=0 value:mobin
key:2/info:name/1448789339803/Put/vlen=6/seqid=0 value:mobin2
key:3/info:name/1448796208530/Put/vlen=4/seqid=0 value:kpop
去掉(2)对应的注释:以info:name对应的时间戳为条件对同列族的其他列(不包括info:name)进行筛选,即以timestamp=1448789165850,timestamp=1448789339803,timestampe=1448796208530为条件对info的其他列进行筛选,根据表(图1)可知info列中时间戳值为1448789165850,1448789339803
1448796208530的还有rowkey=1,1info:age对应的行
其输出如下:【与(1)不同的是没有返回info:name对应的键值对】
key:1/info:age/1448789165850/Put/vlen=2/seqid=0 value:22
去掉(3)对应的注释:以info:name,value="mobin*"(*表示后面可以是任意字符)单元格对应的时间戳为条件对同列族的其他列(包括info:name)进行筛选,根据表可知
值以mobin开头的对应的时间戳有1448789165850,1448789165850,可得对应的还有rowkey=1. info:age的行也符合过滤条件
其输出如下:
key:1/info:age/1448789165850/Put/vlen=2/seqid=0 value:22
key:1/info:name/1448789165850/Put/vlen=5/seqid=0 value:mobin
key:2/info:name/1448789339803/Put/vlen=6/seqid=0 value:mobin2
根据上面的输出结果,我们可以把DependentColumnFilter理解为一个valueFilter和一个时间戳过滤器的组合。如代码(3),我们传入了比较运算符和比较器对列进行了筛选。
HBase--DependentColumnFilter(参考例过滤器 )详解的更多相关文章
- Wireshark过滤器详解
Wireshark过滤器详解 1.Wireshark主要提供两种主要的过滤器 捕获过滤器:当进行数据包捕获时,只有那些满足给定的包含/排除表达式的数据包会被捕获 显示过滤器:该过滤器根据指定的表达式用 ...
- MVC过滤器详解
MVC过滤器详解 APS.NET MVC中(以下简称"MVC")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理. ...
- XML参考 :XmlReader 详解、实例
XML参考 :XmlReader 详解.实例-- 详解 转:http://www.cnblogs.com/Dlonghow/archive/2008/07/28/1252191.html XML参考 ...
- Asp.Net MVC学习总结之过滤器详解(转载)
来源:http://www.php.cn/csharp-article-359736.html 一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...
- angular-ngSanitize模块-linky过滤器详解
本篇主要讲解angular中的linky这个过滤器.此过滤器依赖于ngSanitize模块. linky能找出文本中的链接,然后把它转换成html链接.什么意思,就是说,一段文本里有一个链接,但是这个 ...
- Java-单例模式详解(图文并茂,简单易懂)
PS:首先我们要先知道什么是单例,为什么要用单例,用的好处是什么等问题来看. 1:java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍两种:懒汉式单例.饿汉式单例单例模式有以下 ...
- Apache版本的Hadoop HA集群启动详细步骤【包括Zookeeper、HDFS HA、YARN HA、HBase HA】(图文详解)
不多说,直接上干货! 1.先每台机器的zookeeper启动(bigdata-pro01.kfk.com.bigdata-pro02.kfk.com.bigdata-pro03.kfk.com) 2. ...
- hbase实践之数据读取详解
hbase基本存储组织结构与数据读取组织结构对比 Segment是Hbase2.0的概念,MemStore由一个可写的Segment,以及一个或多个不可写的Segments构成.故hbase 1.*版 ...
- shell sed过滤器详解
1. Sed简介sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中 ...
随机推荐
- PHP文件目录copy
/**(2) PHP文件目录copy @param string $dirsrc 原目录名称字符串 @param string $dirto 目标目录名称字符串 */ function copyDir ...
- JSTL解析——003——core标签库02
上一节主要讲解了<c:if/><c:choose/><c:when/><c:otherwise><c:out/>标签的使用,下面继续讲解其它 ...
- BOOST::Signals2
/* Andy is going to hold a concert while the time is not decided. Eric is a fans of Andy who doesn't ...
- [HeadFirst-HTMLCSS学习笔记][第三章创建网页]
一些基本元素 以下元素都可以用CSS变得更好看 q,<blockquote>,<em>,<br>, <strong>,ol ,ul,li,pre,cod ...
- CSS 规划
1)在拿到psd效果图后,我会将所有的效果图看一遍,然后开始打草稿,在纸上画,在PS中标注都可以.一般都是做个大概的统计,太详细不太现实,既费时间也费精力. 2)网站的浏览器兼容性要顾及到哪些,IE6 ...
- 三维偏序-二维LIS
Another Longest Increasing Subsequence Problem 有两种思路. 思路一: 考虑到如果只有一维,那么可以用f[s]表示长度为s时,最后一个数是多少,把这个想法 ...
- Hdu1090
#include <stdio.h> int main() { int i,T,a,b; scanf("%d",&T); ;i<T;i++){ scanf ...
- mvn多模块开发消除重复依赖造成的打包失败
错误信息: [ERROR] Failed to execute goal on project xiaoyiweifu-core: Could not resolve dependencies for ...
- 【iOS开发】collectionView 瀑布流实现
一.效果展示 二.思路分析 1> 布局的基本流程 当设置好collectionView的布局方式之后(UICollectionViewFlowLayout),当系统开始布局的时候,会调用 pre ...
- Blogger建立Blog部落格 - Blog透视镜
Google谷歌提供Blogger免费建立Blog部落格服务,高自由度的设计,模版全面开放,允许你加入HTML/Script,最重要的是可以自定义网域,辛苦经营的Blog部落格,不希望有朝一日,倘若搬 ...