Java大数据学习15--Hbase的JavaAPI使用(查询条件过滤器)

Hbase中的过滤器相当于sql中的查询条件,通过各种过滤器我们可以实现多样化的查询功能。下面我们来介绍一下这些过滤器。

一、过滤器的种类:
1、列植过滤器—SingleColumnValueFilter
      过滤列植的相等、不等、范围等
2、列名前缀过滤器—ColumnPrefixFilter
      过滤指定前缀的列名
3、多个列名前缀过滤器—MultipleColumnPrefixFilter
       过滤多个指定前缀的列名
4、rowKey过滤器—RowFilter
      通过正则,过滤rowKey值。


二、列植过滤器—SingleColumnValueFilter
SingleColumnValueFilter 列值判断
相等 (CompareOp.EQUAL ),
不等(CompareOp.NOT_EQUAL),
范围 (e.g., CompareOp.GREATER)…………
下面示例检查列值和字符串'values' 相等...

SingleColumnValueFilter f = new  SingleColumnValueFilter(
            Bytes.toBytes("cFamily")                              Bytes.toBytes("column"),             CompareFilter.CompareOp.EQUAL,
        Bytes.toBytes("values"));
s1.setFilter(f);

注意:如果过滤器过滤的列在数据表中有的行中不存在,那么这个过滤器对此行无法过滤。

三、列名前缀过滤器—ColumnPrefixFilter
过滤器—ColumnPrefixFilter

ColumnPrefixFilter 用于指定列名前缀值相等
ColumnPrefixFilter f = new ColumnPrefixFilter(Bytes.toBytes("values"));
s1.setFilter(f);

四、多个列值前缀过滤器—MultipleColumnPrefixFilter

MultipleColumnPrefixFilter 和 ColumnPrefixFilter 行为差不多,但可以指定多个前缀
byte[][] prefixes = new byte[][] {Bytes.toBytes("value1"),Bytes.toBytes("value2")};
Filter f = new MultipleColumnPrefixFilter(prefixes);
s1.setFilter(f);

五、rowKey过滤器—RowFilter
RowFilter 是rowkey过滤器
通常根据rowkey来指定范围时,使用scan扫描器的StartRow和StopRow方法比较好。

Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("^1234")); //匹配以1234开头的rowkey
s1.setFilter(f);

六、过滤器组合列表

FilterList 代表一个过滤器列表,可以添加多个过滤器进行查询,多个过滤器之间的关系有:
与关系(符合所有):FilterList.Operator.MUST_PASS_ALL  
或关系(符合任一):FilterList.Operator.MUST_PASS_ONE    

使用方法:

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);  
Scan s1 = new Scan(); 
 filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes(“f1”),  Bytes.toBytes(“c1”),  CompareOp.EQUAL,Bytes.toBytes(“v1”) )  ); 
filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes(“f1”),  Bytes.toBytes(“c2”),  CompareOp.EQUAL,Bytes.toBytes(“v2”) )  ); 
 // 添加下面这一行后,则只返回指定的cell,同一行中的其他cell不返回 
 s1.addColumn(Bytes.toBytes(“f1”), Bytes.toBytes(“c1”)); 
 s1.setFilter(filterList);  //设置filter
 ResultScanner ResultScannerFilterList = table.getScanner(s1);  //返回结果列表

喜欢的朋友点个关注哦~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

stalin_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值