面试题答案
一键面试实现思路
- 创建
FilterList
对象,用于组合多个过滤器。 - 针对某一列族中特定列值满足某个范围的条件,创建
SingleColumnValueFilter
并设置范围比较器。 - 针对另一列族中某列值匹配特定字符串的条件,创建
SingleColumnValueFilter
并设置字符串比较器。 - 将上述两个过滤器添加到
FilterList
中。 - 使用
FilterList
进行扫描操作,获取符合条件的数据。
关键代码示例(Java 示例)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
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 java.io.IOException;
public class HBaseComplexQuery {
private static final Configuration conf = HBaseConfiguration.create();
public static void main(String[] args) throws IOException {
try (Connection connection = ConnectionFactory.createConnection(conf);
Table table = connection.getTable(TableName.valueOf("your_table_name"))) {
// 创建范围过滤器
SingleColumnValueFilter rangeFilter = new SingleColumnValueFilter(
Bytes.toBytes("your_column_family1"),
Bytes.toBytes("your_column1"),
CompareFilter.CompareOp.GREATER_OR_EQUAL,
Bytes.toBytes("start_value"));
rangeFilter.setFilterIfMissing(true);
// 创建字符串匹配过滤器
SingleColumnValueFilter stringFilter = new SingleColumnValueFilter(
Bytes.toBytes("your_column_family2"),
Bytes.toBytes("your_column2"),
CompareFilter.CompareOp.EQUAL,
Bytes.toBytes("specific_string"));
stringFilter.setFilterIfMissing(true);
// 创建 FilterList 并添加过滤器
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
filterList.addFilter(rangeFilter);
filterList.addFilter(stringFilter);
// 创建扫描器并设置过滤器
Scan scan = new Scan();
scan.setFilter(filterList);
// 执行扫描
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {
for (Cell cell : result.rawCells()) {
System.out.println(Bytes.toString(CellUtil.cloneRow(cell)) + " " +
Bytes.toString(CellUtil.cloneFamily(cell)) + ":" +
Bytes.toString(CellUtil.cloneQualifier(cell)) + " " +
Bytes.toString(CellUtil.cloneValue(cell)));
}
}
scanner.close();
}
}
}
注意:上述代码中的 "your_table_name"
、"your_column_family1"
、"your_column1"
、"start_value"
、"your_column_family2"
、"your_column2"
、"specific_string"
等需要根据实际情况替换。