过滤器的类型很多,但是可以分为两大类——比较过滤器 ,专用过滤器 过滤器的作用是在服务端判断数据是否满足条件,然后只将满足条件的数据返回给客户端 ;
1 hbase过滤器的比较运算符
LESS <
LESS_OR_EQUAL <=
EQUAL =
NOT_EQUAL < >
GREATER_OR_EQUAL >=
GREATER >
2 hbase过滤器的比较器
BinaryComparator 按字节索引顺序比较指定字节数组
BinaryPrefixComparator 跟前面相同,只是比较左端的数据是否相同
NullComparator 判断给定的是否为空
BitComparator 按位比较
RegexStringComparator 提供一个正则的比较器,仅支持 EQUAL 和非EQUAL
SubstringComparator 判断提供的子串是否出现在value中。
3 过滤器使用
3.1 针对行键的前缀过滤器(PrefixFilter)
public void testFilter1 ( ) throws Exception {
Filter pf = new PrefixFilter ( Bytes. toBytes ( "liu" ) ) ;
testScan ( pf) ;
}
public void testScan ( Filter filter) throws Exception {
Table table = conn. getTable ( TableName. valueOf ( "t_user_info" ) ) ;
Scan scan = new Scan ( ) ;
scan. setFilter ( filter) ;
ResultScanner scanner = table. getScanner ( scan) ;
Iterator< Result> iter = scanner. iterator ( ) ;
while ( iter. hasNext ( ) ) {
Result result = iter. next ( ) ;
List< Cell> cells = result. listCells ( ) ;
for ( Cell c : cells) {
byte [ ] rowBytes = CellUtil. cloneRow ( c) ;
byte [ ] familyBytes = CellUtil. cloneFamily ( c) ;
byte [ ] qualifierBytes = CellUtil. cloneQualifier ( c) ;
byte [ ] valueBytes = CellUtil. cloneValue ( c) ;
System. out. print ( new String ( rowBytes) + " " ) ;
System. out. print ( new String ( familyBytes) + ":" ) ;
System. out. print ( new String ( qualifierBytes) + " " ) ;
System. out. println ( new String ( valueBytes) ) ;
}
System. out. println ( "-----------------------" ) ;
}
}
3.2 行过滤器(RowFilter)
public void testFilter2 ( ) throws Exception {
RowFilter rf1 = new RowFilter ( CompareFilter. CompareOp. LESS,
new BinaryComparator ( Bytes. toBytes ( "user2" ) ) ) ;
testScan ( rf1) ;
RowFilter rf2 = new RowFilter ( CompareFilter. CompareOp. EQUAL,
new SubstringComparator ( "01" ) ) ;
testScan ( rf2) ;
}
3.3 列族的过滤器(FamilyFilter)
public void testFilter3 ( ) throws Exception {
FamilyFilter ff1 = new FamilyFilter ( CompareFilter. CompareOp. EQUAL, new BinaryComparator ( Bytes. toBytes ( "base_info" ) ) ) ;
FamilyFilter ff2 = new FamilyFilter ( CompareFilter. CompareOp. EQUAL, new BinaryPrefixComparator ( Bytes. toBytes ( "base" ) ) ) ;
testScan ( ff2) ;
}
3.4 列名的过滤器(QualifierFilter)
public void testFilter4 ( ) throws Exception {
QualifierFilter qf1 = new QualifierFilter ( CompareFilter. CompareOp. EQUAL, new BinaryComparator ( Bytes. toBytes ( "password" ) ) ) ;
QualifierFilter qf2 = new QualifierFilter ( CompareFilter. CompareOp. EQUAL, new BinaryPrefixComparator ( Bytes. toBytes ( "user" ) ) ) ;
testScan ( qf2) ;
}
3.5 列值的过滤器(SingleColumnValueFilter)
public void testFilter4 ( ) throws Exception {
ByteArrayComparable comparator1 = new RegexStringComparator ( "^zhang" ) ;
ByteArrayComparable comparator2 = new SubstringComparator ( "si" ) ;
SingleColumnValueFilter scvf = new SingleColumnValueFilter ( "base_info" . getBytes ( ) , "username" . getBytes ( ) , CompareFilter. CompareOp. EQUAL, comparator2) ;
testScan ( scvf) ;
}
3.6 多个过滤器同时使用
public void testFilter4 ( ) throws Exception {
FamilyFilter cfff1 = new FamilyFilter ( CompareFilter. CompareOp. EQUAL, new BinaryPrefixComparator ( Bytes. toBytes ( "base" ) ) ) ;
ColumnPrefixFilter cfff2 = new ColumnPrefixFilter ( "password" . getBytes ( ) ) ;
FilterList filterList = new FilterList ( FilterList. Operator. MUST_PASS_ONE) ;
filterList. addFilter ( cfff1) ;
filterList. addFilter ( cfff2) ;
testScan ( filterList) ;
}