大部分内容来自<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.
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.