HBase总结(6)--比较过滤器
来源:互联网 发布:api原油库存数据官网 编辑:程序博客网 时间:2024/05/17 10:53
一、介绍
比较过滤器是一种专门的用于比较的过滤器,通过实现比较运算符与比较器,来实现用户的需求
二、详解
1、行过滤器
该种过滤器主要对行值(row)进行过滤,不符合条件的row的行将要被过滤掉。
public void testRowFilter(String tableName,CompareOp compareOp,ByteArrayComparable compare){Configuration conf=init();try {//创建表连接HTable table=new HTable(conf, tableName);//创建一个scan对象Scan scan=new Scan();//创建一个rowfilter,并对其进行赋值RowFilter filter=new RowFilter(compareOp, compare);scan.setFilter(filter);//进行输出查询ResultScanner rs=table.getScanner(scan);Result result=null;while((result=rs.next())!=null){KeyValue[] kvs=result.raw();for(KeyValue kv:kvs){System.out.println(kv.toString());}}rs.close();table.close();} catch (Exception e) {// TODO: handle exception}}public static void main(String[] args) { RowFilterExaple exaple=new RowFilterExaple(); exaple.testRowFilter("test",CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row-5"))); }
该段代码的意思为:获取row值小于等于row-5的行进行显示。其他的被过滤掉。
注意:因为在对比时使用compareTo()函数对二进制进行比较,因此会出现 row-10 是小于 row-5 值,因为转换成字节数组以后,1 是小于 5 的。
2、列簇过滤器:FamilyFilter
该过滤器是对列簇进行过滤,即在获取数据过程中,不符合该过滤器条件的列簇内的数据,全部过滤掉。
public void exapmle(String tableName){Configuration conf=init();try {HTable table=new HTable(conf, tableName);//创建scan对象Scan scan=new Scan();//添加列簇过滤器FamilyFilter filter=new FamilyFilter(CompareOp.EQUAL,new SubstringComparator("t"));scan.setFilter(filter);//进行获取ResultScanner rs=table.getScanner(scan);Result result=null;while((result=rs.next())!=null){KeyValue[] kvs=result.raw();for(KeyValue kv:kvs){System.out.println(kv.toString());}}//关闭扫描器rs.close();//关闭表连接table.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}
该段代码的意思为:名称中含有字母‘t’的列簇中的数据可以被返回到客户端。
3、列明过滤器:QualifierFilter
列名过滤器主要是对扫描到的所有数据的列进行过滤,符合条件的列的数据被返回到客户端,不合符责备过滤掉
public void example(String tableName){Configuration conf=init();try {HTable table=new HTable(conf, tableName);//生成scan对象Scan scan=new Scan();//创建过滤器//使用 二进制前缀比较器QualifierFilter filter=new QualifierFilter(CompareOp.EQUAL,new BinaryPrefixComparator(Bytes.toBytes("test")));//添加过滤器scan.setFilter(filter);//获取数据ResultScanner rs=table.getScanner(scan);//展示数据Result result=null;while((result=rs.next())!=null){KeyValue[] kvs=result.raw();for(KeyValue kv:kvs){System.out.println(kv.toString());}}//释放资源rs.close();table.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}
列名等于test的列的数据被返回到客户端。其他列的数据过滤掉。
4、值过滤器:ValueFilter
对返回来的数据的值进行过滤,只有符合条件的KeyValue键值对才会被返回。
public void example(String tableName){Configuration conf=init();try {//创建表连接HTable table=new HTable(conf, tableName);//创建scanScan scan=new Scan();//创建值过滤器ValueFilter filter=new ValueFilter(CompareOp.NOT_EQUAL,new NullComparator());//添加过滤器scan.setFilter(filter);//进行数据湖区ResultScanner rs=table.getScanner(scan);//进行数据展示Result result=null;while((result=rs.next())!=null){KeyValue[] kvs=result.raw();for(KeyValue kv:kvs){System.out.println(Bytes.toString(kv.getValue()));}}//关闭数据源rs.close();table.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}
值不为空的KeyValue对象才能够被返回到客户端,为空的Keyvalue键值对被过滤掉
5、参考列过滤器:DependentColumnFilter
该过滤器不同于上述的过滤器的使用方法,其初始化参数会多一些:
DependentColumnFilter(byte[] family,byte[] qualifier)
DependentColumnFilter(byte[] family,byte[] qualifier,boolean dropDependentColumn)
DependentColumnFilter(byte[] family,byte[] qualifier,boolean dropDependentColumn,CompareOp compareOp,ByteArrayComparable compare)
该中过滤器在没有设置最后两个参数时,相当于一个时间戳过滤器,即获取制定列中的所有时间戳。在进行过滤时,当一个KeyValue值的时间戳与过滤器中的时间戳(过滤器中可能含有多个时间戳,只需要匹配一个即可)不相同时,该KeyValue对象立刻被过滤掉。而dropDependentColumn参数则是指定是否将制定列中的数据过滤掉。true时,则不返回指定列的数据,否认将指定列中的数据返回到客户端。
当过滤器设置了后两个参数,则首先对指定列中的数据进行过滤,则符合条件的数据的时间戳才会被过滤器获取,然后过滤器才对同行其他列、或者其他行中的所有的列进行数据过滤。
因为数据问题,并没有相应的代码进行测试。下面的连接中展示了该过滤器的使用方法:
http://www.thebigdata.cn/HBase/15872.html
- HBase总结(6)--比较过滤器
- HBase总结(5)--过滤器介绍
- HBase总结(7)--专用过滤器
- HBase总结(8)--附加过滤器、FilterList
- HBase查询(1)---Comparision Filters比较过滤器
- Hbase过滤器的一些总结
- HBase内置过滤器的总结
- Hbase过滤器(一)
- Hbase API高级特性-比较过滤器
- Hbase 过滤器以及比较器案例
- Hbase - 比较器、过滤器、过滤器的操作符
- HBase内置过滤器的一些总结
- HBase内置过滤器的一些总结
- HBase内置过滤器的一些总结
- HBase内置过滤器的一些总结
- HBase内置过滤器的一些总结
- HBase内置过滤器的一些总结
- HBase内置过滤器的一些总结
- Implement Queue using Stacks
- 使用Fragment仿微信之二Fragemnt使用及overflow菜单使用
- PHP 单引号双引号的区别
- iOS开发代码编写规范
- BZOJ 1877
- HBase总结(6)--比较过滤器
- Thinkphp项目结构
- Python对字母字符(串)中大小写转换函数--upper() 和 lower()
- Unity3D -- 设置Android支付横屏竖屏
- 如何找回SharePoint 2010中Hidden的Alert Me功能?
- Box2d的碰撞筛选
- (java)Subsets
- JS字符串截取
- (转)获得每日,每周,每月的0点和24点的时间戳