Как получить все версии row by rowKey и фильтров (HBase)? - PullRequest
1 голос
/ 14 октября 2019

Я помещаю объект с 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));

Я пытаюсь получить BODY по идентификатору (формат идентификатора как "10: 3331-333333-333333") и фильтрует по KEYS.

        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));

Это работает, но если я поставлю две строки с одинаковым идентификатором, но разными КЛЮЧАМИ, я смогу получить только последнюю запись.

если я положу в оболочку scan 'emp', {VERSIONS=>4} я вижу все тела. Как получить ТЕЛО по идентификатору и фильтрам?

...