Получить выбранные данные из DynamoDB локально в Java

Я создал таблицу в моей локальной DynamoDB. Поля,

id (N)
name (S)
school (S)
classname (S)

Теперь я хочу получить все записи, для которых школа равна "xschool", и распечатать.

Пробовал приведенный ниже код, но он дает мне ошибку в запросе,

QuerySpec spec = new QuerySpec().withProjectionExpression("sid, classname, school")
            .withKeyConditionExpression("school = :v_school").
            withValueMap(new ValueMap().withString(":v_school", "abcschool"));

        ItemCollection<QueryOutcome> items = table.query(spec);

        Iterator<Item> iterator = items.iterator();

        while (iterator.hasNext()) {
            System.out.println(iterator.next().toJSONPretty());
        }

Любые предложения для этого, поскольку я новичок в DynamoDB.

2 ответа

Решение
AmazonDynamoDB dynamoDBClient = createClient();
DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);        

String tableName = "student";
Table table = dynamoDB.getTable(tableName);

Map<String, Object> expressionAttributeValues = new HashMap<String, Object>();
expressionAttributeValues.put(":sc", schoolname);

ItemCollection<ScanOutcome> items = table.scan("school = :sc", // FilterExpression
    "sid, school, firstname, classname", // ProjectionExpression
    null, // ExpressionAttributeNames - not used in this example
    expressionAttributeValues);

Iterator<Item> iterator = items.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next().toJSONPretty());
}

Попробуйте это, я думаю, это будет работать для вас

Из документации DynamoDB:

Операция Query позволяет запрашивать таблицу или вторичный индекс. Вы должны предоставить значение ключа раздела и условие равенства.

Полученное сообщение об ошибке означает, что school не является ключом раздела вашей таблицы. Чтобы исправить это вы можете

  • изменить определение таблицы так, чтобы school это ключ раздела или
  • используйте сканирование вместо запроса.
Другие вопросы по тегам