Извлечение записей из DynamoDB с использованием QuerySpec - PullRequest
0 голосов
/ 05 марта 2020

В таблице DynamoDB, где CustomerStatus - это столбец, в котором элемент может содержать «Active», «Inactive» или «Deleted» в качестве CustomerStatus. Я хочу выбрать всех клиентов, чей статус «Активный», а также «Неактивный». Вот пример кода, который я использую, но я не уверен, как это сделать.

private Object data(MuleEventContext eventContext) {
    List<Object> finalJson = new ArrayList<Object>();


        String tableName = "Customers";

        NameMap nameMap = new NameMap();
        nameMap.put("#v_status", "CustomerStatus");
        ValueMap valueMap = new ValueMap();
        valueMap.put(":v_statusval", "Deleted");
        BasicAWSCredentials cre = new BasicAWSCredentials(accesKey,secretKey);
        AmazonDynamoDB dynamoDB1 = AmazonDynamoDBClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(cre)).withRegion(Regions.EU_WEST_1).build();
        DynamoDB dynamoDB = new DynamoDB(dynamoDB1);
        Table table = dynamoDB.getTable(tableName);


        QuerySpec querySpec = new QuerySpec().withKeyConditionExpression("#v_status != :v_statusval")
            .withNameMap(nameMap)
            .withValueMap(valueMap);



         ItemCollection<QueryOutcome> items = null;
         Iterator<Item> iterator = null;
         Item item = null;

    try {               
            items = table.query(querySpec);
            iterator = items.iterator();                
            while (iterator.hasNext()) {
                item = iterator.next();
                finalJson.add(item.asMap());
            }

    } catch (Exception e) {
        logger.info(e.getMessage());
    }


    return finalJson;
}

1 Ответ

0 голосов
/ 05 марта 2020

Вы не можете фильтровать по ключу HA SH.

Мне нужно знать, какой атрибут является ключом HA SH, а какой - ключом RANGE.

Если CustomerStatus не является ключом HA SH, лучше всего создать вторичный индекс для этого атрибута и выполнить 2 разных запроса:

  • Один для Активный ;
  • Еще один для Неактивный .

Это наиболее эффективный способ выполнения запросов такого типа.

Другим способом является сканирование и фильтрация атрибута с использованием операнда IN, как указано в Синтаксис для выражений условий . Но это будет читать все данные из вашей таблицы, может быть медленным и занимать много места.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...