适用于Java的AWS开发工具包-DynamoDB查询/扫描查询

时间:2020-06-30 08:42:50

标签: java amazon-web-services amazon-dynamodb aws-sdk

我正在编写一些代码,用于在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!

0 个答案:

没有答案