根據rowKey作為過濾條件查詢HBase,需要用到過濾器RowFilter
。
RowFilter屬於比較過濾器的一種,比較過濾器繼承自CompareFilter。創建一個比較過濾器需要傳入兩個參數,分別是比較運算符和比較器。
一、需求背景
車聯網項目離線數據分析,采用Spark做分析引擎,數據源是HBase。rowKey設計為vin&collectTime,每天取前一天的增量數據作分析統計。
解決思路:根據yyyyMMdd模糊查詢獲取某一天的數據。
注:
HBase由其他部門設計,我們只負責讀,所以這里不討論修改rowKey和表結構的情況。
vin:車輛識別號碼
collectTime:yyyyMMddHHmmss
二、代碼實現
查詢20200701的數據
- 使用正則表達式來匹配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);
- 使用子串匹配
比較運算符:CompareOp.EQUAL
比較器:SubstringComparator
Scan scan = new Scan();
RowFilter rowFilter = new RowFilter(CompareOp.EQUAL, new SubstringComparator("20200701"));
scan.setFilter(rowFilter);
ResultScanner scanner = table.getScanner(scan);