Hbase过滤器(四):FilterList API
程序员文章站
2022-03-10 16:53:07
...
FilterList:
用户可以提供多个过滤器共同限制返回到客户端的结果,与其他单一功能的过滤器一样,FilterList类实现了Filter接口,所以它可以通过组合多个过滤器的功能来实现某种效果,从而代替提供这类效果的过滤器。
方法类:
FilterList(List<Filter> rowFilters)
FilterList(Operator operator)
FilterList(Operator operator,List<Filter> rowFilters)
代码展示:
package filterList;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class filterList {
private Configuration configuration = null;
private Connection connection = null;
@Test
public void filterList() throws IOException {
System.out.println("begin");
configuration = HBaseConfiguration.create();
connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("ns1:t1"));
List<Filter> filters = new ArrayList<Filter>();
Filter filter1 = new RowFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row2")));
filters.add(filter1);
Filter filter2 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row3")));
filters.add(filter2);
Filter filter3 = new QualifierFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes("name")));
filters.add(filter3);
FilterList filterList = new FilterList(filters);
Scan scan = new Scan();
scan.setFilter(filterList);
ResultScanner resultScanner = table.getScanner(scan);
for(Result result:resultScanner){
for (KeyValue kv : result.raw()) {
System.out.println("KV: "+kv+",value: "+Bytes.toString(kv.getValue()));
}
}
resultScanner.close();
System.out.println("-------------------------------------------------");
FilterList filterList1 = new FilterList(FilterList.Operator.MUST_PASS_ONE,filters);
Scan scan1 = new Scan();
scan1.setFilter(filterList1);
ResultScanner resultScanner1 = table.getScanner(scan1);
for(Result result1:resultScanner1){
for (KeyValue kv : result1.raw()) {
System.out.println("KV: "+kv+",value: "+Bytes.toString(kv.getValue()));
}
}
resultScanner1.close();
table.close();
System.out.println("end");
}
}
结果展示: