Hbase_各种过滤器使用
1.常规比较器
package com.shujia;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class HbaseFilterComparatorDemo {
private HConnection conn = null;
private HBaseAdmin hAdmin = null;
@Before
public void connect(){
try {
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");
conn = HConnectionManager.createConnection(conf);
hAdmin = new HBaseAdmin(conf);
System.out.println("建立连接成功:"+conn+",HMaster建立连接成功:"+hAdmin);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void RowFilter(){
try {
HTableInterface students = conn.getTable("students");
BinaryComparator binaryComparator = new BinaryComparator("1500100010".getBytes());
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS, binaryComparator);
Scan scan = new Scan();
scan.setFilter(rowFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void FamilyFilter1(){
try {
HTableInterface students = conn.getTable("students");
SubstringComparator substringComparator = new SubstringComparator("nf");
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
Scan scan = new Scan();
scan.setFilter(familyFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void FamilyFilter2(){
try {
HTableInterface students = conn.getTable("students");
BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator("i".getBytes());
FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, binaryPrefixComparator);
Scan scan = new Scan();
scan.setFilter(familyFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void QualifierFilter1(){
try {
HTableInterface students = conn.getTable("students");
SubstringComparator substringComparator = new SubstringComparator("ge");
QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
Scan scan = new Scan();
scan.setFilter(qualifierFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void QualifierFilter2(){
try {
HTableInterface students = conn.getTable("students");
SubstringComparator substringComparator = new SubstringComparator("am");
QualifierFilter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL, substringComparator);
Scan scan = new Scan();
scan.setFilter(qualifierFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void ValueFilter1(){
try {
HTableInterface students = conn.getTable("students");
BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator("张".getBytes());
ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, binaryPrefixComparator);
Scan scan = new Scan();
scan.setFilter(valueFilter);
ResultScanner scanner = students.getScanner(scan);
for (Result rs : scanner) {
String id = Bytes.toString(rs.getRow());
System.out.println("当前行的rowkey为:"+id);
for (Cell cell : rs.listCells()) {
String family = Bytes.toString(CellUtil.cloneFamily(cell));
String colName = Bytes.toString(CellUtil.cloneQualifier(cell));
String value = Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(family+":"+colName+"的值为:"+value);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void valueFilter2(){
try {
HTableInterface students = conn.getTable("students");
RegexStringComparator regexStringComparator = new RegexStringComparator("^文科.*");
ValueFilter valueFilter = new ValueFilter(CompareFilter.CompareOp.EQUAL, regexStringComparator);
Scan scan = new Scan();
scan.setFilter(valueFilter);
ResultScanner scanner = students.getScanner(scan);
print(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
public void print(ResultScanner scanner) throws IOException {
Result rs = null;
while((rs = scanner.next()) != null){
String id = Bytes.toString(rs.getRow());
List<Cell> cells = rs.listCells();
System.out.println("id"+id);
System.out.println("\t");
for (Cell cell : cells) {
String col = Bytes.toString(CellUtil.cloneFamily(cell));
String s = Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(col+":"+s);
System.out.println("\t");
}
}
}
public void print2(ResultScanner scanner) throws IOException {
Result rs = null;
while((rs = scanner.next())!= null){
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(), "name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(), "age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(), "gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(), "clazz".getBytes()));
System.out.println("学号:" + id + ",姓名:" + name + ",年龄:" + age + ",性别:" + gender + ",班级:" + clazz);
}
}
@After
public void close(){
if(conn!=null){
try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("conn已经关闭...");
}
if(hAdmin!=null){
try {
hAdmin.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("hMaster已经关闭...");
}
}
}
2.专用过滤器和分页包装过滤器
- 单列值过滤器
- 单列值排除过滤器
- rowkey前缀过滤器
- 分页过滤器
package com.shujia;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class HbaseFilterSpecialDemo {
private HConnection conn;
private HBaseAdmin hAdmin;
@Before
public void connect() {
try {
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");
conn = HConnectionManager.createConnection(conf);
hAdmin = new HBaseAdmin(conf);
System.out.println("建立连接成功:" + conn + ", HMaster获取成功:" + hAdmin);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void SingleColumnValueFilter(){
try {
HTableInterface students = conn.getTable("students");
RegexStringComparator regexStringComparator = new RegexStringComparator("^文科.*");
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(
"info".getBytes(),
"clazz".getBytes(),
CompareFilter.CompareOp.EQUAL,
regexStringComparator
);
Scan scan = new Scan();
scan.setFilter(singleColumnValueFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void SingleColumnValueExcludeFilter(){
try {
HTableInterface students = conn.getTable("students");
BinaryComparator binaryComparator = new BinaryComparator("文科一班".getBytes());
SingleColumnValueExcludeFilter singleColumnValueExcludeFilter = new SingleColumnValueExcludeFilter(
"info".getBytes(),
"clazz".getBytes(),
CompareFilter.CompareOp.EQUAL,
binaryComparator
);
Scan scan = new Scan();
scan.setFilter(singleColumnValueExcludeFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void PrefixFilter() {
try {
HTableInterface students = conn.getTable("students");
PrefixFilter prefixFilter = new PrefixFilter("150010008".getBytes());
Scan scan = new Scan();
scan.setFilter(prefixFilter);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void pageFilter(){
try {
HTableInterface students = conn.getTable("students");
int pageNum=4;
int pageSize = 10;
Scan scan = new Scan();
String current_page_start_row = "";
for (int i = 1; i < pageNum; i++) {
System.out.println("=======================当前是第"+i+"页=============================");
PageFilter pageFilter = new PageFilter(pageSize);
scan.setFilter(pageFilter);
ResultScanner scanner = students.getScanner(scan);
for (Result result : scanner) {
current_page_start_row = Bytes.toString(result.getRow());
scan.withStartRow((current_page_start_row+0).getBytes());
PageFilter pageFilter1 = new PageFilter(pageSize);
scan.setFilter(pageFilter1);
String id = Bytes.toString(result.getRow());
String name = Bytes.toString(result.getValue("info".getBytes(), "name".getBytes()));
String age = Bytes.toString(result.getValue("info".getBytes(), "age".getBytes()));
String gender = Bytes.toString(result.getValue("info".getBytes(), "gender".getBytes()));
String clazz = Bytes.toString(result.getValue("info".getBytes(), "clazz".getBytes()));
System.out.println("学号:" + id + ",姓名:" + name + ",年龄:" + age + ",性别:" + gender + ",班级:" + clazz);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void baoZhuang1() throws IOException {
HTableInterface students = conn.getTable("students");
Filter filter1 = new RowFilter(CompareFilter.CompareOp.NOT_EQUAL,new BinaryComparator("1500100009".getBytes()));
Scan scan = new Scan();
scan.setFilter(filter1);
ResultScanner scanner1 = students.getScanner(scan);
Result rs = scanner1.next();
while (rs != null) {
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(), "name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(), "age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(), "gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(), "clazz".getBytes()));
System.out.println(id + "\t" + name + "\t" + age + "\t" + gender + "\t" + clazz + "\t");
rs = scanner1.next();
}
System.out.println("-----------------------------------------------------------------------------");
Filter filter2 = new WhileMatchFilter(filter1);
scan.setFilter(filter2);
ResultScanner scanner = students.getScanner(scan);
Result rs2 = scanner.next();
while (rs2 != null) {
String id = Bytes.toString(rs2.getRow());
String name = Bytes.toString(rs2.getValue("info".getBytes(), "name".getBytes()));
String age = Bytes.toString(rs2.getValue("info".getBytes(), "age".getBytes()));
String gender = Bytes.toString(rs2.getValue("info".getBytes(), "gender".getBytes()));
String clazz = Bytes.toString(rs2.getValue("info".getBytes(), "clazz".getBytes()));
System.out.println(id + "\t" + name + "\t" + age + "\t" + gender + "\t" + clazz + "\t");
rs2 = scanner.next();
}
}
public void print(ResultScanner scanner) throws IOException {
Result rs = null;
while((rs = scanner.next()) != null){
String id = Bytes.toString(rs.getRow());
List<Cell> cells = rs.listCells();
System.out.println("id"+id);
System.out.println("\t");
for (Cell cell : cells) {
String col = Bytes.toString(CellUtil.cloneFamily(cell));
String s = Bytes.toString(CellUtil.cloneValue(cell));
System.out.println(col+":"+s);
System.out.println("\t");
}
}
}
public void print2(ResultScanner scanner) throws IOException {
Result rs = null;
while((rs = scanner.next())!= null){
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(), "name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(), "age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(), "gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(), "clazz".getBytes()));
System.out.println("学号:" + id + ",姓名:" + name + ",年龄:" + age + ",性别:" + gender + ",班级:" + clazz);
}
}
@After
public void close() {
if (conn != null) {
try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("conn连接已经关闭.....");
}
if (hAdmin != null) {
try {
hAdmin.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("HMaster已经关闭......");
}
}
}
3.组合比较器
package com.shujia;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.protobuf.generated.FilterProtos;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.util.List;
public class HbaseFileCombinationDemo {
private HConnection conn;
private HBaseAdmin hAdmin;
@Before
public void connect() {
try {
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");
conn = HConnectionManager.createConnection(conf);
hAdmin = new HBaseAdmin(conf);
System.out.println("建立连接成功:" + conn + ", HMaster获取成功:" + hAdmin);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void FilterDate1(){
try {
HTableInterface students = conn.getTable("students");
RegexStringComparator regexStringComparator = new RegexStringComparator("^理科.*");
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter("info".getBytes(), "clazz".getBytes(),
CompareFilter.CompareOp.EQUAL, regexStringComparator);
SubstringComparator substringComparator = new SubstringComparator("女");
SingleColumnValueFilter singleColumnValueFilter1 = new SingleColumnValueFilter("info".getBytes(), "gender".getBytes(),
CompareFilter.CompareOp.EQUAL, substringComparator
);
BinaryComparator binaryComparator = new BinaryComparator("20".getBytes());
SingleColumnValueFilter singleColumnValueFilter2 = new SingleColumnValueFilter("info".getBytes(), "age".getBytes(),
CompareFilter.CompareOp.GREATER, binaryComparator
);
BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator("于".getBytes());
SingleColumnValueFilter singleColumnValueFilter3 = new SingleColumnValueFilter("info".getBytes(), "name".getBytes(),
CompareFilter.CompareOp.EQUAL, binaryPrefixComparator);
Scan scan = new Scan();
FilterList filterList = new FilterList();
filterList.addFilter(singleColumnValueFilter);
filterList.addFilter(singleColumnValueFilter1);
filterList.addFilter(singleColumnValueFilter2);
filterList.addFilter(singleColumnValueFilter3);
scan.setFilter(filterList);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void filterData2(){
try {
HTableInterface students = conn.getTable("students");
BinaryPrefixComparator binaryPrefixComparator = new BinaryPrefixComparator("15001001".getBytes());
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.EQUAL, binaryPrefixComparator);
RegexStringComparator regexStringComparator = new RegexStringComparator("^文科。*");
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(
"info".getBytes(),
"clazz".getBytes(),
CompareFilter.CompareOp.EQUAL,
regexStringComparator
);
FilterList filterList = new FilterList();
filterList.addFilter(rowFilter);
filterList.addFilter(singleColumnValueFilter);
Scan scan = new Scan();
scan.setFilter(filterList);
ResultScanner scanner = students.getScanner(scan);
print2(scanner);
} catch (IOException e) {
e.printStackTrace();
}
}
public void print(ResultScanner scanner) throws IOException {
Result rs = null;
while ((rs = scanner.next()) != null) {
String id = Bytes.toString(rs.getRow());
List<Cell> cells = rs.listCells();
System.out.print("id:" + id);
System.out.print("\t");
for (Cell cell : cells) {
String col = Bytes.toString(CellUtil.cloneQualifier(cell));
String s = Bytes.toString(CellUtil.cloneValue(cell));
System.out.print(col + ":" + s);
System.out.print("\t");
}
System.out.println();
}
}
public void print2(ResultScanner scanner) throws IOException {
Result rs = null;
while ((rs = scanner.next()) != null) {
String id = Bytes.toString(rs.getRow());
String name = Bytes.toString(rs.getValue("info".getBytes(), "name".getBytes()));
String age = Bytes.toString(rs.getValue("info".getBytes(), "age".getBytes()));
String gender = Bytes.toString(rs.getValue("info".getBytes(), "gender".getBytes()));
String clazz = Bytes.toString(rs.getValue("info".getBytes(), "clazz".getBytes()));
System.out.println("学号:" + id + ",姓名:" + name + ",年龄:" + age + ",性别:" + gender + ",班级:" + clazz);
}
}
@After
public void close() {
if (conn != null) {
try {
conn.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("conn连接已经关闭.....");
}
if (hAdmin != null) {
try {
hAdmin.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("HMaster已经关闭......");
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)