热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HBase--DependentColumnFilter(参考例过滤器)详解

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),我们传入了比较运算符和比较器对列进行了筛选。

 


推荐阅读
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
author-avatar
人鱼同体
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有