AWS DynamoDB Batch Get Request - iOS

后端 未结 3 847
深忆病人
深忆病人 2021-01-03 08:29

I can perform a simple Get request on a singular table within AWS dynamoDB however when I expand it to a Batch Request across multiple tables I continue to get

相关标签:
3条回答
  • 2021-01-03 08:58

    Swift 3

    I was able to get the BatchGet request work with the following code. Hope this helps someone else who's struggling with the lack of Swift Docs.
  • This code assumes that you've configured your AWSServiceConfiguration in the AppDelegate application didFinishLaunchingWithOptions method.

    let DynamoDB = AWSDynamoDB.default()
    
        // define your primary hash keys
        let hashAttribute1 = AWSDynamoDBAttributeValue()
        hashAttribute1?.s = "NDlFRTdDODEtQzNCOC00QUI5LUFFMzUtRkIyNTJFNERFOTBF"
    
        let hashAttribute2 = AWSDynamoDBAttributeValue()
        hashAttribute2?.s = "MjVCNzU3MUQtMEM0NC00NEJELTk5M0YtRTM0QjVDQ0Q1NjlF"
    
        let keys: Array = [["userID": hashAttribute1], ["userID": hashAttribute2]]
    
        let keysAndAttributesMap = AWSDynamoDBKeysAndAttributes()
        keysAndAttributesMap?.keys = keys as? [[String : AWSDynamoDBAttributeValue]]
        keysAndAttributesMap?.consistentRead = true
        let tableMap = ["Your-Table-Name" : keysAndAttributesMap]
        let request = AWSDynamoDBBatchGetItemInput()
        request?.requestItems = tableMap as? [String : AWSDynamoDBKeysAndAttributes]
        request?.returnConsumedCapacity = AWSDynamoDBReturnConsumedCapacity.total
        DynamoDB.batchGetItem(request!) { (output, error) in
            if output != nil {
                print("Batch Query output?.responses?.count:", output!.responses!)
            }
            if error != nil {
                print("Batch Query error:", error!)
            }
        }
    
0 讨论(0)
  • 2021-01-03 09:08

    Since the batch get doesn't map to a class I solved it by doing this instead.

    I solved it by doing this,

        let dynamoDBObjectMapper = AWSDynamoDBObjectMapper.defaultDynamoDBObjectMapper()
        let task1 = dynamoDBObjectMapper.load(User.self, hashKey: "rtP1oQ5DJG", rangeKey: nil)
        let task2 = dynamoDBObjectMapper.load(User.self, hashKey: "dbqb1zyUq1", rangeKey: nil)
    
        AWSTask.init(forCompletionOfAllTasksWithResults: [task1, task2]).continueWithBlock { (task) -> AnyObject? in
            if let users = task.result as? [User] {
                print(users.count)
                print(users[0].firstName)
                print(users[1].firstName)
            }
            else if let error = task.error {
                print(error.localizedDescription)
            }
            return nil
        }
    
    0 讨论(0)
  • 2021-01-03 09:13

    You forgot to wrap around AWSDynamoDBAttributeValue in AWSDynamoDBKeysAndAttributes. Here is a simple example from AWSDynamoDBTests.m:

    AWSDynamoDBKeysAndAttributes *keysAndAttributes = [AWSDynamoDBKeysAndAttributes new];
    keysAndAttributes.keys = @[@{@"hashKey" : attributeValue1},
                               @{@"hashKey" : attributeValue2}];
    keysAndAttributes.consistentRead = @YES;
    
    AWSDynamoDBBatchGetItemInput *batchGetItemInput = [AWSDynamoDBBatchGetItemInput new];
    batchGetItemInput.requestItems = @{table1Name: keysAndAttributes};
    
    0 讨论(0)
  • 提交回复
    热议问题