HBase 的过滤器主要用来实现复杂查询的,类似 where 条件,常用的有以下几种:
- 列值过滤器:SingleColumnValueFilter
- 列名前缀过滤器:ColumnPrefixFilter
- 多个列名前缀过滤器:MultipleColumnPrefixFilter
- 行键过滤器:RowFilter
- 过滤器的组合使用
一、列值过滤器
/**
* 单一列值过滤器
*
* 查询薪水等于3000的员工
*
* @throws Exception
*/
public static void testSingleColumnValueFilter() throws Exception {
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "192.168.220.111");
// 创建表的客户端
HTable emp = new HTable(conf, "emp");
// 创建过滤器(筛选出empinfo列族的sal列值等于3000的记录)
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("empinfo"), // 列族
Bytes.toBytes("sal"), // 列名
CompareFilter.CompareOp.EQUAL, // 等值关系
Bytes.toBytes("3000")); // 值
// 创建一个Scanner
Scan scanner = new Scan();
scanner.setFilter(filter);
// 执行查询
ResultScanner rs = emp.getScanner(scanner);
for (Result r : rs) {
byte[] value = r.getValue(Bytes.toBytes("empinfo"), Bytes.toBytes("ename"));
String ename = Bytes.toString(value);
System.out.println(ename);
}
emp.close();
}
二、列名前缀过滤器
/**
* 列名前缀过滤器
*
* 查询出所有员工的姓名
*
* @throws Exception
*/
public static void testColumnPrefixFilter