hbase查询列表数据返回rowKey

设计了rowKey,查询列表却没有返回rowKey这个字段?

因公司业务的需要,返回列表数据还需要做详情的查询,那首选当然是根据rowKey去查,性能好呀!一顿操作猛如虎,列表使用scan加rowKey模糊匹配扫描只返回固定条数的数据,但是拿到整行数据却没有看到rowKey?不科学,咋可能不返回呢?搜了下,相关资料比较少,某歌还是比较强大的,来,看代码:

        Scan scan = new Scan();
        FilterList filterList = new FilterList();
        filterList.addFilter(new PageFilter(pageSize));
        if (lastRowKey != null) {
            scan.setStartRow(Bytes.toBytes(lastRowKey));
        }
        scan.setFilter(filterList);
        ResultScanner scanner = table.getScanner(scan);
        List<Map<String, String>> list = new ArrayList<>();
        for (Result result : scanner) {
            Map<String, String> obj = new HashMap<>();
            //rowKey在这里,Bytes.toString(result.getRow())
            obj.put("id", Bytes.toString(result.getRow()));
            for (Cell cell : result.listCells()) {
                obj.put(Bytes.toString(CellUtil.cloneQualifier(cell)), 
                Bytes.toString(CellUtil.cloneValue(cell)));
            }
            list.add(obj);
        }
        scanner.close();
        return list;

上述代码中result.listCells()是整行的所有列,api里面的设计没有把rowKey当成一个列,而是单独提供了getRow()方法来获取,我这里用的hbase-client-1.2.0.jar,这个版本里面的Cell.getRow()方法已经过时了,所以推荐时用result对象的getRow()方法来获取该行的rowKey。
注:对hbase基本操作还不太了解的朋友可以参考我上一篇文章:springboot集成hbase

你可能感兴趣的:(大数据)