hbase条件查询java实现

多条件过滤:

/**
*  通过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;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值