首页 技术 正文
技术 2022年11月19日
0 收藏 583 点赞 4,785 浏览 2962 个字

HBASE过滤器介绍:

所有的过滤器都在服务端生效,叫做谓语下推(predicate push down),这样可以保证被过滤掉的数据不会被传送到客户端。

注意
        基于字符串的比较器,如RegexStringComparator和SubstringComparator,比基于字节的比较器更慢,更消耗资源。因为每次比较时它们都需要将给定的值转化为String.截取字符串子串和正则式的处理也需要花费额外的时间。

过滤器本来的目的是为了筛掉无用的信息,所有基于CompareFilter的过滤处理过程是返回匹配的值。

各种自定义过滤器: http://www.cnblogs.com/chshnan/archive/2013/03/27/2984143.html

HBase利用Scan对表进行扫描

Scan scan = new Scan();
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {//ResultScanner实现了Iterator接口
//do something here
}

可以使用如下方法对输出数据进行选择

    // 返回指定列族下的指定qualifier中的值
public Scan addColumn(byte[] family, byte[] qualifier)
// 设置扫描的起始行,starRow是存储时候用的rowKey
public Scan setStartRow(byte[] startRow)
// 设置扫描的结束行,stopRow是存储时候用的rowKey
public Scan setStopRow(byte[] stopRow)
// 设置返回结果的时间戳
public Scan setTimeStamp(long timestamp)
//设置返回结果的时间戳返回
public Scan setTimeRange(long minStamp, long maxStamp)
//设置过滤器,这是非常灵活的扫描机制
public Scan setFilter(Filter filter)

如何使用Filter

HBase提供了很多预装过滤器

1. RowFilter 行过滤器(基于行键过滤数据)
public RowFilter(CompareOp rowCompareOp, WritableByteArrayComparable rowComparator)
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()来判断

例:
相关的过滤方法使用:
提取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()));

2. 前缀过滤器(RowFilter的特例)
String prefix = “a”;
Scan scan = new Scan(prefix.getBytes());
scan.setFilter(new PrefixFilter(prefix.getBytes()));

3. 限定符过滤器(类似于行过滤器RowFilter的比较过滤器,但它用来匹配列限定符而不是行键)
比较运算符和比较器类型与RowFilter一样

Filter filter = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(“colqual120”)));

4.ValueFilter  值过滤器(提供与行过滤器或限定符相同功能,只是针对的是单元值)

值过滤器不指定某个列,它会将所有含有某个值的列取出来,混在一起
Filter filter = new ValueFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryPrefixComparator(Bytes.toBytes(“foo”))); //过滤掉所有单元值不是foo开头的列

5. 时间戳过滤器

List<Long> timestamps = new ArrayList<Long>();
timestamps.add(100L);
timestamps.add(200L);
Filter filter = new TimeStampsFilter(timestamps);

6. SingleColumnValueFilter(影响查询性能,在处理大量数据的时候速度可能会慢)

过滤某列值大于多少小于多少:

List<Filter> filters = new ArrayList<Filter>();
filters.add( new SingleColumnValueFilter(Bytes.toBytes("pinfo"), //列族
Bytes.toBytes("t"), //列名
CompareOp.GREATER,Bytes.toBytes("1359901"]) ) //值
filters.add( new SingleColumnValueFilter(Bytes.toBytes("pinfo"),
Bytes.toBytes("t"),
CompareOp.LESS,Bytes.toBytes("1389901"]) )
FilterList filterList1 = new FilterList(Operator.MUST_PASS_ALL,filters);
sn.setFilter(filterList1);

7. 过滤器列表

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,087
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,562
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,821
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905