2017-10-10 4 views
0

AWS-Dokumentation saugt.Scannen Sie AWS DynamoDB mit Filter

Wie scanne ich DynamoDB für Datensätze in meiner Tabelle "apps" für Datensätze, bei denen der app_code = "TEST"?

Der folgende Code funktioniert nicht:

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard() 
       .withRegion(Regions.US_EAST_1) 
       .build(); 


     Map<String, AttributeValue> expressionAttributeValues = 
       new HashMap<String, AttributeValue>(); 
      expressionAttributeValues.put(":val", new AttributeValue().withN("0")); 

     ScanRequest scanRequest = new ScanRequest() 
       .withTableName("apps") 
       .withFilterExpression("app_code = TEST") 
       .withProjectionExpression("Id") 
       .withExpressionAttributeValues(expressionAttributeValues); 

     ScanResult scanResult = client.scan(scanRequest); 
     for (Map<String, AttributeValue> item : scanResult.getItems()) { 
      System.out.println(item); 
     } 

Hier meine Fehler sind:

Exception in thread "main" com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: Value provided in ExpressionAttributeValues unused in expressions: keys: {:val} (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: UNASODL7AHEETORAJ1Q1AF2EE3VV4KQNSO5AEMVJF66Q9ASUAAJG) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1638) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1303) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1055) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:743) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:717) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667) 
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.doInvoke(AmazonDynamoDBClient.java:2186) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:2162) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.executeScan(AmazonDynamoDBClient.java:1678) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.scan(AmazonDynamoDBClient.java:1654) 
    at com.amazonaws.samples.Sessions.main(Sessions.java:46) 
+1

Sie haben das Attribut 'val' angegeben, es aber nicht in Ihrem Scan verwendet. DynamoDB versucht, Sie vor sich selbst zu retten. Hier ein Scan-Beispiel: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ScanJavaDocumentAPI.html. – jarmod

Antwort

0

Bitte geben Sie die TEST in Filterexpression zu :val Platzhalter ändern.

ScanRequest scanRequest = new ScanRequest() 
      .withTableName("apps") 
      .withFilterExpression("app_code = :val") 
      .withProjectionExpression("Id") 
      .withExpressionAttributeValues(expressionAttributeValues);