У меня есть таблица DynamoDB с примерно 45k записями, первичный ключ раздела (электронная почта) и первичный ключ сортировки (бренд). Все записи имеют различные атрибуты, одна называется processed
, а другая - studentEmail
.
Мне нужно найти все записи, указанные для StudentEmail, бренда и с обработанным false
, я точно знаю, что будет присутствовать хотя бы одна строка.
Я использую следующий код:
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.model.*;
private final AmazonDynamoDB dynamoDB;
public void getRecordForEmailAndBrand(String studentEmail, String brand) {
final Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
expressionAttributeValues.put(":studentEmail", new AttributeValue().withS(studentEmail));
expressionAttributeValues.put(":brand", new AttributeValue().withS(brand));
expressionAttributeValues.put(":processed", new AttributeValue().withBOOL(false));
final Map<String, String> attributesNames = new HashMap<>();
attributesNames.put("#p", "processed");
Map<String, AttributeValue> lastKeyEvaluated = null;
List<Map<String, AttributeValue>> rows = new ArrayList<>();
do {
final ScanRequest scanRequest = new ScanRequest()
.withTableName(tableName)
.withFilterExpression("studentEmail = :studentEmail and brand = :brand and #p = :processed")
.withExpressionAttributeNames(attributesNames)
.withExpressionAttributeValues(expressionAttributeValues)
.withExclusiveStartKey(lastKeyEvaluated);
final ScanResult result = dynamoDB.scan(scanRequest);
rows.addAll(result.getItems());
lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);
}
Проблема в том, что случается так, что метод не возвращает ни одной строки, но я точно знаю, что строка есть, и это подтверждается тем фактом, что когда я использую aws ui, я могу легко найти его. Я что-то пропустил? Может быть в scanRequest?