我正在编写一些代码,用于在AWS云环境中查询DynamoDB数据库。
我想找到一种方法来获取扫描的“所有”结果,同时使用主键对它们进行“排序”。 (为此,我需要提供“ ScanIndexForward”)
我知道要执行此操作,我需要使用AWS开发工具包中的“查询”,但这需要显示“ KeyConditionExpression”;但是由于这是一个外部数据库,因此我无法立即知道要在哪个主键上查找。
起初,我以为我可以使用'*'之类的通配符,但这根本不返回任何结果:
QueryResult result = null;
do {
Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
expressionAttributeValues.put(":val", new AttributeValue().withS(parameters));
expressionAttributeValues.put(":val2", new AttributeValue().withS("*"));
QueryRequest req = new QueryRequest()
.withKeyConditionExpression("id = :val2")
.withFilterExpression("createdDate > :val")
.withScanIndexForward(false)
.withTableName(tableNames)
.withExpressionAttributeValues(expressionAttributeValues);
if(result != null) {
req.setExclusiveStartKey(result.getLastEvaluatedKey());
}
result = dynamoDBClient.query(req);
List<Map<String, AttributeValue>> rows = result.getItems();
} while(result.getLastEvaluatedKey() != null);
然后我认为“扫描”可能有效(因为它根本不需要主键)
ScanResult result = null;
do {
Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
expressionAttributeValues.put(":val", new AttributeValue().withS(parameters));
ScanRequest req = new ScanRequest()
.withFilterExpression("createdDate > :val")
.withTableName(tableNames)
.withScanIndexForward(false)
.withExpressionAttributeValues(expressionAttributeValues);
if(result != null) {
req.setExclusiveStartKey(result.getLastEvaluatedKey());
}
result = dynamoDBClient.scan(req);
List<Map<String, AttributeValue>> rows = result.getItems();
} while(result.getLastEvaluatedKey() != null);
INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR :
[INFO] -------------------------------------------------------------
[ERROR] MYCLASS.JAVA [101,21] cannot find symbol
symbol: method withScanIndexForward(boolean)
location: class com.amazonaws.services.dynamodbv2.model.ScanRequest
[INFO] 1 error
[INFO] -------------------------------------------------------------
但是如您所见,ScanQuery无法识别ScanIndexForward并抛出错误。
我如何结合这两个属性,在没有人建议之前,我也不能使用GSI!