Получить выбранные данные из 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
это ключ раздела или - используйте сканирование вместо запроса.