【大数据-HBase】HBase根据rowKey模糊查询


根据rowKey作为过滤条件查询HBase,需要用到过滤器RowFilter

RowFilter属于比较过滤器的一种,比较过滤器继承自CompareFilter。创建一个比较过滤器需要传入两个参数,分别是比较运算符比较器

一、需求背景

车联网项目离线数据分析,采用Spark做分析引擎,数据源是HBase。rowKey设计为vin&collectTime,每天取前一天的增量数据作分析统计。

解决思路:根据yyyyMMdd模糊查询获取某一天的数据。

注:

HBase由其他部门设计,我们只负责读,所以这里不讨论修改rowKey和表结构的情况。

vin:车辆识别号码
collectTime:yyyyMMddHHmmss

二、代码实现

查询20200701的数据

  1. 使用正则表达式来匹配rowKey

比较运算符:CompareOp.EQUAL

比较器:RegexStringComparator

Scan scan = new Scan();
RowFilter rowFilter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator(".*20200701.*"));
scan.setFilter(rowFilter);

ResultScanner scanner = table.getScanner(scan);
  1. 使用子串匹配

比较运算符:CompareOp.EQUAL

比较器:SubstringComparator

Scan scan = new Scan();
RowFilter rowFilter = new RowFilter(CompareOp.EQUAL, new SubstringComparator("20200701"));
scan.setFilter(rowFilter);

ResultScanner scanner = table.getScanner(scan);