hbase过滤器
概念
过滤器的作用是在服务端判断是否满足条件,满足则将数据返回给客户端
种类
- 比较过滤器
- 专用过滤器
比较过滤器
比较过滤器有两个参数:
- 比较运算符
- 比较器
使用比较过滤器前,先确定运算符和比较器,然后确定比较器。最后使用scan等加载比较器。
比较过滤器的运算符
LESS <
LESS_OR_EQUAL <=
EQUAL =
NOT_EQUAL <>
GREATER_OR_EQUAL >=
GREATER >
NO_OP 排除所有
比较过滤器的比较器
BinaryComparator 按字节索引顺序比较指定字节数组,采用Bytes.compareTo(byte[])
BinaryPrefixComparator 跟前面相同,只是比较左端前缀的数据是否相同
NullComparator 判断给定的是否为空
BitComparator 按位比较
RegexStringComparator 提供一个正则的比较器,仅支持 EQUAL 和非EQUAL
SubstringComparator 判断提供的子串是否出现在中
连接代码
private Table table;
private Connection connection;
private final String TABLE_NAME = "myUser";
@Before
public void initTable() throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","node01:2181,node02:2181,node03:2181");
connection = ConnectionFactory.createConnection(configuration);
table = connection.getTable(TableName.valueOf(TABLE_NAME));
}
@After
public void close() throws IOException {
table.close();
connection.close();
}
RowFilter(rowkey过滤器)
/**
* 查询所有的rowkey比0003小的所有的数据
*/
@Test
public void rowFilter() throws IOException {
Scan scan = new Scan();
BinaryComparator binaryComparator = new BinaryComparator("0003".getBytes());
RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.LESS, binaryComparator);
scan.setFilter(rowFilter);
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {
List<Cell> cells = result.listCells();
for (Cell cell :cells) {
byte[] family_name = CellUtil.cloneFamily(cell);
byte[] qualifier = CellUtil.cloneQualifier(cell);
byte[] rowkey = CellUtil.cloneRow(cell);
byte[] value = CellUtil.cloneValue(cell);
if ("age".equals(Bytes.toString(qualifier)) ||
"id".equals(Bytes.toString(qualifier))){
System.out.println("rowkey -" + Bytes.toString(rowkey) +
"family - " + Bytes.toString(family_name) +