- 1.运算符
< LESS
<= LESS_OR_EQUAL
= EQUAL
!= NOT_EQUAL
>= GREATER_OR_EQUAL
> GREATER
排除所有 NO_OP
- 2.过滤器组FilterList可利用过滤器组,实现sql中,and跟or的模式
//MUST_PASS_ALL必须通过所有过滤器
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, qualifierFilter, qualifierFilter1);
//MUST_PASS_ONE只需通过一个过滤器
FilterList or = new FilterList(FilterList.Operator.MUST_PASS_ONE);
- 代码片段
/*** get的方式取rowkey* @param tableName* @param type* @param ids* @param starttime* @param endtime* @return*/public JSONArray getResultByTsAndIdGet(String tableName, String type, String[] ids, long starttime, long endtime) {try {Table table = HbaseConnect.getTable(tableName);List<Get> gets = new ArrayList<>();long startHour = starttime - starttime % 3600;long endHour = endtime - endtime % 3600 ;Filter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes(String.valueOf(starttime))));QualifierFilter qualifierFilter1 = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(String.valueOf(endtime))));//过滤器组:and的模式FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, qualifierFilter, qualifierFilter1);for (; startHour <= endHour; startHour+=3600) {for (String id : ids) {String rowKey = type+"_"+ startHour+"_"+id;Get get = new Get(rowKey.getBytes());get.setFilter(filterList);gets.add(get);}}Result[] results = table.get(gets);JSONArray resultList = new JSONArray();for (Result result : results) {List<KeyValue> list = result.list();if(list==null){continue;}list.stream().forEach(kv -> {resultList.add(JSON.parseObject(new String(kv.getValue())));});}table.close();return resultList;} catch (Exception e) {e.printStackTrace();return null;}}/*** scan的方式取,速度比较慢* @param tableName* @param type* @param ids* @param starttime* @param endtime* @return*/public JSONArray getResultByTimestampAndId(String tableName, String type, String[] ids, long starttime, long endtime) {// 按rowkey的前缀过滤
// Filter prefixFilter=new PrefixFilter(Bytes.toBytes("1_"));//按列的值过滤,'>='并且'<='Filter qualifierFilter = new QualifierFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes(String.valueOf(starttime))));QualifierFilter qualifierFilter1 = new QualifierFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(String.valueOf(endtime))));//正则匹配id--过滤器组:or模式FilterList or = new FilterList(FilterList.Operator.MUST_PASS_ONE);for (String id : ids) {RowFilter rowFilter = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*" + id + "$"));or.addFilter(rowFilter);}//过滤器组:and模式FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, qualifierFilter, qualifierFilter1, or);ResultScanner results = HbaseUtil.getScannerFilter(tableName,getStartKey(type, starttime),getEndKey(type, endtime),filterList);JSONArray resultList = new JSONArray();results.forEach(result -> {List<KeyValue> list = result.list();list.stream().forEach(kv -> {resultList.add(JSON.parseObject(new String(kv.getValue())));});});return resultList;}