需求:參數是多個沒有順序的rowKey,在某張表中批量查詢。一個一個rowKey查詢的話,效率過低。正則表達式
實現:須要在scan中添加filter。filter中添加多個rowKey,對須要查詢的rowKey進行限制。x表明rowKey。spa
val rowKeyFilter=new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes(x)))
RowFilter用於過濾row keyscala
Operator | Description |
LESS | 小於 |
LESS_OR_EQUAL | 小於等於 |
EQUAL | 等於 |
NOT_EQUAL | 不等於 |
GREATER_OR_EQUAL | 大於等於 |
GREATER | 大於 |
NO_OP | 排除全部 |
Comparator | Description |
BinaryComparator | 使用Bytes.compareTo()比較 |
BinaryPrefixComparator | 和BinaryComparator差很少,從前面開始比較 |
NullComparator | Does not compare against an actual value but whether a given one is null, or not null. |
BitComparator | Performs a bitwise comparison, providing a BitwiseOp class with OR, and XOR operators. |
RegexStringComparator | 正則表達式 |
SubstringComparator | 把數據當成字符串,用contains()來判斷 |
在這裏使用EQUAL,BinaryComparator。code
多個rowKey,rowKeyList是個rowKey的集合orm
//存放rowKeyFilter的filter
var filters = new util.ArrayList[Filter]
rowKeyList.foreach(x=>{
val rowKeyFilter=new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator(Bytes.toBytes(x))) filters.add(rowKeyFilter) })
而後將filters添加到 FilterList中blog
val filterList: FilterList = new FilterList(FilterList.Operator.MUST_PASS_ONE,filters)
scan.setFilter(filterList)
FilterList.Operator.MUST_PASS_ALL --> 取交集 至關一and操做 FilterList.Operator.MUST_PASS_ONE --> 取並集 至關於or 操做