当前访客身份:游客 [ 登录  | 注册加入尚学堂]
直播
新闻资讯

hbase行键过滤器RowFilter

我来了! 发表于 2年前  | 评论(0 )| 阅读次数(2140 )|   0 人收藏此文章,   我要收藏
RowFilter是用来对rowkey进行过滤的,比较符如下:

Operator

Description

LESS

小于

LESS_OR_EQUAL

小于等于

EQUAL

等于

NOT_EQUAL

不等于

GREATER_OR_EQUAL

大于等于

GREATER

大于

NO_OP

排除所有



Comparator

Description

BinaryComparator

使用Bytes.compareTo()比较

BinaryPrefixComparator

BinaryComparator差不多,从前面开始比较

NullComparator

Does not compare against an actual value but whether a given one is null, or not null.

BitComparator

Performs a bitwise comparison, providing a BitwiseOp class with AND, OR, and XOR operators.

RegexStringComparator

正则表达式

SubstringComparator

把数据当成字符串,用contains()来判断





下面是相关比较符的例子

点击(此处)折叠或打开

    package com.hxl;
    import java.io.IOException;
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.hbase.Cell;
    import org.apache.hadoop.hbase.CellUtil;
    import org.apache.hadoop.hbase.KeyValue;
    import org.apache.hadoop.hbase.client.HTable;
    import org.apache.hadoop.hbase.client.Result;
    import org.apache.hadoop.hbase.client.ResultScanner;
    import org.apache.hadoop.hbase.client.Scan;
    import org.apache.hadoop.hbase.filter.BinaryComparator;
    import org.apache.hadoop.hbase.filter.CompareFilter;
    import org.apache.hadoop.hbase.filter.Filter;
    import org.apache.hadoop.hbase.filter.RowFilter;
    import org.apache.hadoop.hbase.util.Bytes;
    import com.hxl.ConnectDB;
    public class RowFilterTest {
        public void rowfilter(String tablename, String rowkeyvalue) {
            Configuration configuration = null;
            configuration = new ConnectDB().getConf();
            try {
                HTable table = new HTable(configuration, tablename);
                Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL,
                        new BinaryComparator(Bytes.toBytes(rowkeyvalue)));
                // EQUAL =
                Scan s = new Scan();
                s.setFilter(filter1);
                ResultScanner rs = table.getScanner(s);
                for (Result r : rs) {
                    System.out.println("rowkey:" + new String(r.getRow()));
                    for (KeyValue keyValue : r.raw()) {
                        System.out.println("列族:" + new String(keyValue.getFamily())
                                + " 列:" + new String(keyValue.getQualifier()) + ":"
                                + new String(keyValue.getValue()));
                    }
                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    } 




相关的过滤方法使用:
提取rowkey以01结尾数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*01$"));

提取rowkey以包含201407的数据

Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator("201407"));


提取rowkey以123开头的数据
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryPrefixComparator("123".getBytes()));


-- The End --
分享到:0
关注微信,跟着我们扩展技术视野。每天推送IT新技术文章,每周聚焦一门新技术。微信二维码如下:
微信公众账号:尚学堂(微信号:bjsxt-java)
声明:博客文章版权属于原创作者,受法律保护。如果侵犯了您的权利,请联系管理员,我们将及时删除!
(邮箱:webmaster#sxt.cn(#换为@))
北京总部地址:北京市海淀区西三旗桥东建材城西路85号神州科技园B座三层尚学堂 咨询电话:400-009-1906 010-56233821
Copyright 2007-2015 北京尚学堂科技有限公司 京ICP备13018289号-1 京公网安备11010802015183