多条件过滤:
/**
* 通过tileId获取轨迹信息
* @param tableName hbase 表名
* @param family
* @param tile_id 条件值字符串
* @return
* @throws IOException
*/
public ArrayList<String> filterByRouteFingerprintId(String tableName, String family, String tile_id) throws IOException {
int first = tile_id.indexOf("_");
int second = tile_id.indexOf("_", first + 1);
String tile = tile_id.substring(0, first);
String index = tile_id.substring(first+1, second);
String angleListInfo = tile_id.substring(second+1);
List<Filter> filters = new ArrayList<>();
Filter filter0 = new SingleColumnValueFilter(Bytes.toBytes(family), Bytes.toBytes("tile"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(tile));
filters.add(filter0);
Filter filter1 = new SingleColumnValueFilter(Bytes.toBytes(family), Bytes.toBytes("index"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(index));
filters.add(filter1);
Filter filter2 = new SingleColumnValueFilter(Bytes.toBytes(family), Bytes.toBytes("angleListInfo"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes(angleListInfo));
filters.add(filter2);
FilterList filterList1 = new FilterList(filters);
Scan scan = new Scan();
scan.setFilter(filterList1);
Table table = HconnectionFactory.connection.getTable(TableName.valueOf(tableName));
ResultScanner scanner = table.getScanner(scan);
Iterator<Result> results = scanner.iterator();
ArrayList<String> o = new ArrayList<>();
results.forEachRemaining(row -> {
System.out.println(new String(row.getValue("link".getBytes(), "formatedPathInfo".getBytes())));
o.add(new String(row.getValue("link".getBytes(), "formatedPathInfo".getBytes())));
});
return o;
}
单一条件过滤:
/**
* hbase 条件判断
* @param tableNameString
* @param family
* @param colName
* @param value
* @throws IOException
* @return
*/
public ArrayList<String> filterByValueRegex(String tableNameString, String family, String colName,
String value) throws IOException{
Table table=HconnectionFactory.connection.getTable(TableName.valueOf(tableNameString));
Scan scan=new Scan();
BinaryComparator comp = new BinaryComparator(value.getBytes());
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(family.getBytes(), colName.getBytes(), CompareFilter.CompareOp.EQUAL, comp);
List<Filter> filters = new ArrayList <Filter>();
filters.add(filter1);
scan.setFilter(filter1);
ResultScanner scanner = table.getScanner(scan);
Iterator<Result> results = scanner.iterator();
ArrayList<String> o = new ArrayList<>();
results.forEachRemaining(row -> {
o.add(new String(row.getValue("base".getBytes(), "point".getBytes())));
});
return o;
}