Hbase Filter Scala 实战

大部分内容来自<hbase权威指南>,示例代码部分都用scala编写
介绍:
hbase的filter用来控制返回的数据,主要用在Get和Scan中,通过filter的限制可以指定返回列簇,列,时间戳和版本号.所有的filter都在服务端生效,叫做谓词下推.这样可以保证被过滤掉的数据不会被传送客户端.
在过滤层次结构的最底层是Filter接口和FilterBase抽象类,用户可以通过集成Filter和FilterBase实现自己的接口.使用getScan或get获取数据,返回一个ScannerResult或者Result,可以把,Result看做是一行,每个Result包装了KeyValue类,每个KeyValue类可以看做一个行列对应的值.

CompareFilter
CompareFilter是一组经常使用到的Filter,CompareFilter有一组子类,分别实现行,列簇,列....的过滤,在实例化CompareFilter的时候,需要传入两个参数.CompareOp和ByteArrayComparable.

CompareOp
CompareFilter.CompareOp.LESS 匹配小于设置值的值
CompareFilter.CompareOp.LESS_OR_EQUAL 匹配小于等于设置值的值
CompareFilter.CompareOp.EQUAL 匹配等于设置值的值
CompareFilter.CompareOp.NOT_EQUAL 匹配不等于设置值的值
CompareFilter.CompareOp.GREATER_OR_EQUAL 匹配大于等于设置值的值
CompareFilter.CompareOp.GREATER 匹配大于设置值的值
CompareFilter.CompareOp.NO_OP 排除一切值

ByteArrayComparable实例
BinaryComparator 使用Bytes.compareTo()比较当前值与阈值
BinaryPrefixComparator 前缀匹配
NullComparator 不做匹配,只判断当前值是否NULL
BitComparator 通过BitwiseOp类提供的按位与(AND)/或(OR)/异或(XOR)操作执行位级比较
RegexStringComparator 根据一个正则表达式,在实例化这个比较器的时候去匹配表中的数据
SubstringComparator 把阈值和表中的数据当做是一个String实例,同时通过contains()操作匹配字符串
LongComparator

CompareFilter实例
RowFilter 根据rowKey过滤数据,只留下符合匹配条件的行
FamilyFilter 根据FamilyFilter过滤数据,留下符合条件的行和FamilyFiter
QualifierFilter 根据列名过滤数据
ValueFilter 根据值过滤数据
DependentColumnFilter 选定一个参考列,使用参考列的时间戳作为过滤条件,过滤时,每一行每一列与参考列的时间戳进行比较,就是返回一起修改的列
构造函数如下:
DependentColumnFilter(final byte [] family, final byte[] qualifier,
final boolean dropDependentColumn, final CompareOp valueCompareOp,
final ByteArrayComparable valueComparator)
DependentColumnFilter(final byte [] family, final byte [] qualifier)
DependentColumnFilter(final byte [] family, final byte [] qualifier,
final boolean dropDependentColumn)
构造器有三个,dropDependentColumn表示判断时间戳的结果是返回还是剔除,另外valueCompareOp/valueComparator两个参数表示可以在过滤的时候,连value一起过滤

scala代码实例:
import scala.collection.JavaConverters._
val table = new HTable(HandleHbase. conf , tableName )

var scan = new Scan()
scan.addColumn(Bytes.
toBytes(
"cf0" ) , Bytes.toBytes( "qual6" ))

println(
"--------------------row filter BinaryComparator -------------------------" )
val rowFilter1 = new RowFilter(CompareFilter.CompareOp. LESS_OR_EQUAL ,
new
BinaryComparator(Bytes. toBytes( "row-22" )))
scan.setFilter(rowFilter1)
val rowScanner1 = table.getScanner(scan)
for (res <- rowScanner1.iterator().asScala){
println(res)
}
rowScanner1.close()

println(
"--------------------row filter SubstringComparator -------------------------" )
val rowFilter2 = new RowFilter(CompareFilter.CompareOp.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值