Сканирование DynamoDB не дает никакого результата - PullRequest
1 голос
/ 08 июля 2019

У меня есть таблица 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?

...