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命令处理缓冲区中 ...
随机推荐
- poj 1088 滑雪问题
滑雪问题 import java.util.Scanner; public class Main{ static int a[][],r,c; public static void main(Stri ...
- hbase单机安装
1.网上内容比较混乱,其实安装单机hbase只需要安装hbase即可 2.把hbase-0.xxx.tart.gz 拷贝到/opt/hbase文件及下(这是安装目录,可自定义) 2.1 tar xfz ...
- What is NetApp's Cluster File System?
Data ONTAP GX: A Scalable Storage Cluster www.usenix.org/event/fast07/tech/full_papers/eisler/eisler ...
- 在Ubuntu上为Android系统编写Linux内核驱动程序
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6568411 在智能手机时代,每个品牌的手机都有 ...
- css基本选择器
CSS:层叠样式表 (Cascading Style Sheets) 结构层:HTML表现层: CSS行为层: DOM,JavaScript CSS语法结构:div{background:#f00;} ...
- java进程
package com.process; public class ProcessTest { public static void main(String[] args) { new Proce ...
- Objective C—创建单例
单例模式是在实际项目开发中用到比较多的一种设计模式,设计原理是整个系统只产生一个对象实例,通过一个统一的方法对外提供这个实例给外部使用. 在Java中,构造单例一般将类的构造函数声明为private类 ...
- web跳转到自己的app
做个笔记 原文:http://blog.csdn.net/ba_jie/article/details/6884818 iPhone SDK可以把你的App和一个自定义的URL Scheme绑定.该U ...
- #pragma section
看了别人使用了#pragma section来共享变量,今天试了下 如下添加代码 #define GLOBAL_SHARED __declspec(allocate(".Shared&quo ...
- git commit的--amend选项
git commit --amend常常用来修改某个branch上最顶端的commit,大多数情况下,这个命令给人的感觉是用新的commit替换了原来的commit.git commit --amen ...