by-rowkey和filters(hbase)?

iklwldmw  于 2021-05-27  发布在  Hadoop
关注(0)|答案(0)|浏览(249)

我把一个实体放在3cf上

Put entity = new Put(id.getBytes(StandardCharsets.UTF_8));
    HashMap<String, String> keyFields = new HashMap<>();
    keyFields.put("MessageOperation", applicationEntity.getMessageOperation());

    String key = gson.toJson(keyFields);

    entity.addColumn(M, META, meta.getBytes(StandardCharsets.UTF_8));
    entity.addColumn(K, KEYS, key.getBytes(StandardCharsets.UTF_8));
    entity.addColumn(D, BODY, body.getBytes(StandardCharsets.UTF_8));

我尝试通过id获取body(id的格式如“10:3331-333333-333333333”)并通过键进行过滤。

Get gett = new Get(id.getBytes());
        ArrayList<Filter> filters = new ArrayList<>();
        if (messageOperation != null && !StringUtils.isEmpty(messageOperation)) {
            Filter filterByMsgOp = new SingleColumnValueFilter(K, KEYS, CompareFilter.CompareOp.EQUAL,
                    new SubstringComparator("\"MessageOperation\":\"" + messageOperation));
            filters.add(filterByMsgOp);
        }
        FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL, filters);
        gett.setFilter(filterList);
        gett.setMaxVersions(5);
        gett.setTimeRange(0, Long.MAX_VALUE);
        entity = table.get(gett);
        NavigableMap<byte[], byte[]> data = entity.getFamilyMap(D);
        String resultt = new String(data.get(BODY));

这是可行的,但是如果我用相同的id但是不同的键放置两行,那么我只能得到最后一个条目。
如果我把壳放进去 scan 'emp', {VERSIONS=>4} 我看到了所有的尸体。如何通过id和过滤器获取身体?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题