Hbase过滤器(三):附加过滤器API
程序员文章站
2022-05-23 08:37:34
...
目录
一:跳转过滤器(SkipFilter)
跳转过滤器包装了一个用户提供的过滤器,当被包装的过滤器遇到一个需要过滤的KeyValue实例时,用户可以拓展并过滤到整行数据。换言之,当过滤器发现某一行中的一列被过滤时,那么整行都会被过滤掉。案例将SkipFilter和ValueFilter组合起来获取不包含空列值的行,同时过滤掉不符合条件的的行。
package appendFilter;
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;
public class skipFilter {
private Configuration configuration = null;
private Connection connection = null;
@Test
public void skipFilter() throws IOException {
System.out.println("begin");
configuration = HBaseConfiguration.create();
connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("ns1:t1"));
Filter filter = new ValueFilter(CompareFilter.CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("ccc")));
Scan scan = new Scan();
scan.setFilter(filter);
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("-------------------------------------------------");
Filter filter1 = new SkipFilter(filter);
Scan scan1 = new Scan();
scan1.setFilter(filter1);
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");
}
}
结果显示:
二:全匹配过滤器(WhileMatchFilter)
全匹配过滤器和跳转过滤器相似,不过当一条数据被过滤掉时,它就会直接放弃这次扫描操作
package appendFilter;
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;
public class whileMatchFilter {
private Configuration configuration = null;
private Connection connection = null;
@Test
public void whileMatchFilter() throws IOException {
System.out.println("begin");
configuration = HBaseConfiguration.create();
connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("ns1:t1"));
Filter filter = new RowFilter(CompareFilter.CompareOp.NOT_EQUAL,new BinaryComparator(Bytes.toBytes("row3")));
Scan scan = new Scan();
scan.setFilter(filter);
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("-------------------------------------------------");
Filter filter1 = new WhileMatchFilter(filter);
Scan scan1 = new Scan();
scan1.setFilter(filter1);
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");
}
}
结果展示:
上一篇: (二)、SpringBoot 自定义 filter(过滤器)
下一篇: java第十一天作业