Java 如何按行键和筛选器(HBase)获取所有版本的行?

Java 如何按行键和筛选器(HBase)获取所有版本的行?,java,spring,hadoop,hbase,cloudera-cdh,Java,Spring,Hadoop,Hbase,Cloudera Cdh,我把一个实体和3CF放在一起 Put entity = new Put(id.getBytes(StandardCharsets.UTF_8)); HashMap<String, String> keyFields = new HashMap<>(); keyFields.put("MessageOperation", applicationEntity.getMessageOperation()); String key = gson.

我把一个实体和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));
Put entity=newput(id.getBytes(StandardCharsets.UTF_8));
HashMap keyFields=newhashmap();
put(“MessageOperation”,applicationEntity.getMessageOperation());
字符串key=gson.toJson(keyFields);
addColumn(M,META,META.getBytes(StandardCharsets.UTF_8));
addColumn(K,key,key.getBytes(StandardCharsets.UTF_8));
entity.addColumn(D,BODY,BODY.getBytes(StandardCharsets.UTF_8));
我尝试通过id(id的格式如“10:3331-333333-333333”)获取BODY,并通过键进行筛选

        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));
getgett=newget(id.getBytes());
ArrayList过滤器=新的ArrayList();
if(messageOperation!=null&!StringUtils.isEmpty(messageOperation)){
Filter filterByMsgOp=新的单列值筛选器(K,键,CompareFilter.CompareOp.EQUAL,
新的子字符串比较器(“\”MessageOperation\:\”+MessageOperation));
filters.add(filterByMsgOp);
}
FilterList FilterList=新的FilterList(FilterList.Operator.MUST\u PASS\u ALL,filters);
gett.setFilter(filterList);
gett.setMaxVersions(5);
gett.setTimeRange(0,Long.MAX_值);
实体=table.get(gett);
NavigableMap data=entity.getFamilyMap(D);
stringresultt=新字符串(data.get(BODY));
这是可行的,但是如果我放置两行具有相同id但键不同的行,那么我只能得到最后一个条目

如果我放入shell
scan'emp',{VERSIONS=>4}
我看到所有的尸体。如何通过id和过滤器获取尸体