程序员的自我修养
Home » Apache HBase » HBase Filter - Comparision Filters

HBase Filter - Comparision Filters

0条评论2,010次浏览

HBase的Get和Scan实例可以调用setFilter()来设置过滤器,HBase的过滤器种类繁多,以满足不同的过滤需求。Filter作用于各个RegionServer,通过使用过滤器可以高效的获取数据。HBase Filter主要分为三大类,用户也可以通过继承FilterBase或实现Filter接口来自定义Filter。若需要多个Filter结合使用,可以通过FilterList来满足。

以下主要对各个Filter进行简单的了解。

数据准备

rowkey cf1:col1 cf1:col2 cf2:col1 cf2:col2
101 10086 qwe1 1352288xxxx wer1
102 10000 sdf2 1820160xxxx ert2
103 10001 cxv3 1531308xxxx mnb3
104 12306 jhg4 1387223xxxx kji4
105 12580 nju5 1580101xxxx nbv5

代码准备

Comparision Filters(比较过滤器)

RowFilter

使用示例

结果

Key: 101/cf1:col1/1404704499698/Put/vlen=5/ts=0, Value: 10086
Key: 101/cf1:col2/1404704499698/Put/vlen=4/ts=0, Value: qwe1
Key: 101/cf2:col1/1404704499698/Put/vlen=11/ts=0, Value: 1352288xxxx
Key: 101/cf2:col2/1404704499698/Put/vlen=4/ts=0, Value: wer1

其它

RowFilter,行过滤器,实际上称之为行键过滤器更合适,用于行键的各种过滤上。构造函数为RowFilter(CompareFilter.CompareOp rowCompareOp, WritableByteArrayComparable rowComparator)。结合两个构造参数可以实现基于rowkey的不同过滤方式。

假设根据rowkey,数据分为3部分A、B、C,其中B为通过rowComparator选出的数据,接着通过rowCompareOp来确定最终的数据:若为EQUAL则选择B,若为LESS_OR_EQUAL则选择A+B,如此类推。

FamilyFilter

使用示例

结果

Key: 101/cf1:col1/1404704499698/Put/vlen=5/ts=0, Value: 10086
Key: 101/cf1:col2/1404704499698/Put/vlen=4/ts=0, Value: qwe1
Key: 102/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 10000
Key: 102/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: sdf2
Key: 103/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 10001
Key: 103/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: cxv3
Key: 104/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 12306
Key: 104/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: jhg4
Key: 105/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 12580
Key: 105/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: nju5

其它

FamilyFilter,列族过滤器,用于列族的过滤。其余特性与RowFilter类似,只是范围由rowkey变成了列族名。

QualifierFilter

使用示例

结果

Key: 101/cf1:col2/1404704499698/Put/vlen=4/ts=0, Value: qwe1
Key: 101/cf2:col2/1404704499698/Put/vlen=4/ts=0, Value: wer1
Key: 102/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: sdf2
Key: 102/cf2:col2/1404704499699/Put/vlen=4/ts=0, Value: ert2
Key: 103/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: cxv3
Key: 103/cf2:col2/1404704499699/Put/vlen=4/ts=0, Value: mnb3
Key: 104/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: jhg4
Key: 104/cf2:col2/1404704499699/Put/vlen=4/ts=0, Value: kji4
Key: 105/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: nju5
Key: 105/cf2:col2/1404704499699/Put/vlen=4/ts=0, Value: nbv5

其它

QualifierFilter,列名过滤器,用于列名的过滤。其余特性与RowFilter类似,只是范围由rowkey变成了列名。

ValueFilter

使用示例

结果

Key: 101/cf1:col1/1404704499698/Put/vlen=5/ts=0, Value: 10086
Key: 102/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 10000
Key: 103/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 10001

其它

ValueFilter,值过滤器,用于值的过滤。其余特性与RowFilter类似,只是范围由rowkey变成了值。

DependentColumnFilter

使用示例

结果

Key: 102/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 10000
Key: 102/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: sdf2
Key: 102/cf2:col1/1404704499699/Put/vlen=11/ts=0, Value: 1820160xxxx
Key: 102/cf2:col2/1404704499699/Put/vlen=4/ts=0, Value: ert2
Key: 103/cf1:col1/1404704499699/Put/vlen=5/ts=0, Value: 10001
Key: 103/cf1:col2/1404704499699/Put/vlen=4/ts=0, Value: cxv3
Key: 103/cf2:col1/1404704499699/Put/vlen=11/ts=0, Value: 1531308xxxx
Key: 103/cf2:col2/1404704499699/Put/vlen=4/ts=0, Value: mnb3

其它

初步理解:与ValueFilter类似,只不过ValueFilter只输出满足条件的列,DependentColumnFilter则将满足条件的列所在的行全部输出。

(转载本站文章请注明作者和出处 程序员的自我修养 – SelfUp.cn ,请勿用于任何商业用途)
分类:Apache HBase
标签:
发表评论


profile
  • 文章总数:79篇
  • 评论总数:331条
  • 分类总数:31个
  • 标签总数:44个
  • 运行时间:1072天

大家好,欢迎来到selfup.cn。

这不是一个只谈技术的博客,这里记录我成长的点点滴滴,coding、riding and everthing!

最新评论
  • 增达网: 受教了!呵呵!
  • Anonymous: :!: :smile: :oops: :grin: :eek: :shock:
  • 27: :razz: dsa会报错,rsa不会
  • Anonymous: 看错了 忽略我
  • Anonymous: UserSideCF这个类在哪里
  • 晴子: 在主节点初始化CM5数据库的时候报错误:Verifying that we can write to /opt/cm-5.9.0/etc/cloudera-scm -server log4j:ERROR Could not...
  • zhangnew: 就4题 :?:
  • linxh: “ 但要是遇到预先并不知道数组的长度而又需要获取正确的(或者称之 为原始的)split长度时,该如何处理呢。。? ” 印象中可以split函数参数传-1?
  • linxh: 班门弄斧一下: ssh host cmd 和直接ssh上后cmd结果不一样是因为ssh直接运行远程命令 是非交互非登录模式与ssh上去得到一个登录交互式Shell二 者加载的环境变量不一样。
  • 匿名: 其实文本分类和数字分类是一样的,只是文本分类需要多一个步骤, 就是计算它的tf-idf值将其转换为double类型
  • yurnom: 可能苹果最近又改变了返回值吧,最近没做测试了。 BadDeviceToken一般测试环境和正式环境弄错的情况 下会出现。
  • Anonymous: :razz: 博主,良心贴啊, 最近也在弄apns推送。 有个问题想请教你一下啊。 你博客中写的 Unregistered 错误,有准确的说明吗, 我看你博客中写的:...
  • 一波清泉: 回复邮箱: 1004161699@qq.com 多谢
  • Anonymous: 17/02/09 01:15:02 WARN Utils: Service ‘SparkUI’ could not bind on port 4040. Attempting port...
  • pacificLee: :twisted:
  • 小码: 为什么没有后面的呢,只有前10个
  • Anonymous: :lol:
  • Anonymous: :razz: 楼主是属于会聊天的。 我想问,sqoop发了几个版本了,应该没这些问题了吧。
  • Anonymous: Config.kafkaConfig.kafkaGroupI d 这个是指自己配置的group id 还是从 import org.apache.kafka.common.config .Config 这个类...
  • Anonymous: ZkUtils.getPartitionsForTopics (zkClient, Config.kafkaConfig.topic) 那个方法是在 spark-streaming_2.10 中 kafka...