HBase總結(8)--附加過濾器、FilterList
阿新 • • 發佈:2019-01-10
一、介紹
本節介紹HBase提供的最後兩種過濾器,並且也介紹多個過濾器配合使用的方法。
二、詳解
1、附加過濾器
(1)跳轉過濾器:SkipFilter(Filter filter)
該過濾器的引數為一個過濾器。該過濾器的作用為:當引數中的過濾器過濾一個某一個KeyValue物件時,則跳轉過濾器會將整行的資料進行過濾。
public void example(String tableName) { Configuration conf=init(); try { HTable table=new HTable(conf, tableName); //建立過濾器 ValueFilter filter=new ValueFilter(CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("row-10"))); SkipFilter skipFilter=new SkipFilter(filter); Scan scan=new Scan(); scan.setFilter(filter); // ResultScanner rs=table.getScanner(scan); Result result=null; while((result=rs.next())!=null) { KeyValue[] kvs=result.raw(); for(KeyValue kv:kvs) { System.out.println(kv.toString()); } } //釋放資源 rs.close(); table.close(); } catch (Exception e) { // TODO: handle exception } }
(2)全匹配過濾器:WhileMatchFilter(Filter filter)
該過濾器需要填入一個過濾器作為引數。
該過濾器的作用於跳轉過濾器相似,不過該過濾器當遇到第一個過濾整行資料的時候則會停止掃描過程。這樣即使後面有資料符合條件也不會被傳送到客戶端。
public void example(String tableName) { Configuration conf=init(); try { HTable table=new HTable(conf, tableName); //建立過濾器 ValueFilter filter=new ValueFilter(CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("row-10"))); WhileMatchFilter filter=new WhileMatchFilter(filter); Scan scan=new Scan(); scan.setFilter(filter); // ResultScanner rs=table.getScanner(scan); Result result=null; while((result=rs.next())!=null) { KeyValue[] kvs=result.raw(); for(KeyValue kv:kvs) { System.out.println(kv.toString()); } } //釋放資源 rs.close(); table.close(); } catch (Exception e) { // TODO: handle exception } }
2、FilterList:過濾器容器
FilterList的作用就是為了多個filter配合使用,因為在scan中,只能設定一個filter,因此在需要使用多個filter物件時,就需要使用FilterList容器將所有的filter裝入,然後傳入scan物件中。在Filterlist物件中,提供了多個filter的過濾關係:
(1)MUST_PASS_ALL :一行資料必須通過所有的過濾器才能被返回客戶端
(2)MUST_PASS_ONE:一行資料中只要通過一個過濾器即可返回給客戶端
在初始化FilterList物件時,可以進行模式的設定,FilterList物件的建構函式有三個:
FilterList(List<Filter> rowFilters)
FilterList(Operator operator)
FilterList(Operator operator,List<Filter> rowFilters)
public void mutilRowFilter(String tableName,CompareOp[] compareOps,ByteArrayComparable[] comparables)
{
Configuration conf=init();
try {
//建立表連線
HTable table=new HTable(conf, tableName);
//建立scan
Scan scan=new Scan();
int length=compareOps.length;
FilterList filterList=new FilterList(FilterList.Operator.MUST_PASS_ALL);
for(int i=0;i<length;i++)
{
RowFilter filter=new RowFilter(compareOps[i], comparables[i]);
filterList.addFilter(filter);
}
scan.setFilter(filterList);
//執行返回結果
ResultScanner rs=table.getScanner(scan);
Result result=null;
while((result=rs.next())!=null)
{
KeyValue[] kvs=result.raw();
for(KeyValue kv:kvs)
{
System.out.println(kv.toString());
}
}
rs.close();
table.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}