【问题标题】:AmazonServiceException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypesAmazonServiceException:提供的 AttributeValue 为空,必须恰好包含受支持的数据类型之一
【发布时间】:2017-02-13 12:01:10
【问题描述】:

我正在尝试从 dynamodb 控制台界面导入数据,但无法成功。

数据是

{"_id":{"s":"d9922db0-83ac-11e6-9263-cd3ebf92dec3"},"applicationId":{"S":"2"},"applicationName":{"S":"Paperclip"},"ip":{"S":"127.0.0.1"},"objectInfo":{"S":"elearning_2699"},"referalUrl":{"S":"backported data"},"url":{"S":""},"userAgent":{"S":""},"userEmail":{"S":"karthick.shivanna@test.com"},"userId":{"S":"508521"},"userName":{"S":"Karthik"},"created":{"S":"1486983137000"},"verb":{"S":"submitproject"},"dataVals":{"S":"{\"projectid\":5,\"name\":\"Test 1\",\"domain\":\"apparel\",\"submittype\":[\"Writeup\",\"Screenshots\"],\"passcriteria\":\"Percentage\",\"taemail\":\"bhargava.gade@test.com\",\"attemptNo\":1,\"submitDate\":1467784988}"},"eventTime":{"S":"1467784988000"}}

我遇到了错误

错误:java.lang.RuntimeException: com.amazonaws.AmazonServiceException:提供的 AttributeValue 是 空,必须恰好包含一种受支持的数据类型(服务: 亚马逊DynamoDBv2;状态码:400;错误代码:验证异常; 请求 ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG)在 org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.handleException(DynamoDBFibonacciRetryer.java:107) 在 org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.runWithRetry(DynamoDBFibonacciRetryer.java:83) 在 org.apache.hadoop.dynamodb.DynamoDBClient.writeBatch(DynamoDBClient.java:220) 在 org.apache.hadoop.dynamodb.DynamoDBClient.putBatch(DynamoDBClient.java:170) 在 org.apache.hadoop.dynamodb.write.AbstractDynamoDBRecordWriter.write(AbstractDynamoDBRecordWriter.java:91) 在 org.apache.hadoop.mapred.MapTask$DirectMapOutputCollector.collect(MapTask.java:844) 在 org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:596) 在 org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.j 错误堆栈跟踪 amazonaws.datapipeline.taskrunner.TaskExecutionException:未能 完成 EMR 变换。在 amazonaws.datapipeline.activity.EmrActivity.runActivity(EmrActivity.java:67) 在 amazonaws.datapipeline.objects.AbstractActivity.run(AbstractActivity.java:16) 在 amazonaws.datapipeline.taskrunner.TaskPoller.executeRemoteRunner(TaskPoller.java:136) 在 amazonaws.datapipeline.taskrunner.TaskPoller.executeTask(TaskPoller.java:105) 在 amazonaws.datapipeline.taskrunner.TaskPoller$1.run(TaskPoller.java:81) 在 private.com.amazonaws.services.datapipeline.poller.PollWorker.executeWork(PollWorker.java:76) 在 private.com.amazonaws.services.datapipeline.poller.PollWorker.run(PollWorker.java:53) 在 java.lang.Thread.run(Thread.java:745) 引起: amazonaws.datapipeline.taskrunner.TaskExecutionException:错误: java.lang.RuntimeException:com.amazonaws.AmazonServiceException: 提供的 AttributeValue 为空,必须恰好包含其中一项 支持的数据类型(服务:AmazonDynamoDBv2;状态代码:400; 错误代码:验证异常;请求编号: GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG)在 org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.handleException(DynamoDBFibonacciRetryer.java:107) 在 org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.runWithRetry(DynamoDBFibonacciRetryer.java:83) 在 org.apache.hadoop.dynamodb.DynamoDBClient.writeBatch(DynamoDBClient.java:220) 在 org.apache.hadoop.dynamodb.DynamoDBClient.putBatch(DynamoDBClient.java:170) 在 org.apache.hadoop.dynamodb.write.AbstractDynamoDBRecordWriter.write(AbstractDynamoDBRecordWriter.java:91) 在 org.apache.hadoop.mapred.MapTask$DirectMapOutputCollector.collect(MapTask.java:844) 在 org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:596) 在 org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.java:26) 在 org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.java:13) 在 org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:65) 在 org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) 在 org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175) 在 java.security.AccessController.doPrivileged(Native Method) 在 javax.security.auth.Subject.doAs(Subject.java:415) 在 org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548) 在 org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:170) 引起 作者:com.amazonaws.AmazonServiceException:提供的 AttributeValue 是 空,必须恰好包含一种受支持的数据类型(服务: 亚马逊DynamoDBv2;状态码:400;错误代码:验证异常; 请求 ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG)在 com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182) 在 com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770) 在 com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489) 在 com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310) 在 com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1772) 在 com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.batchWriteItem(AmazonDynamoDBClient.java:730) 在 amazonaws.datapipeline.cluster.EmrUtil.runSteps(EmrUtil.java:286) 在 amazonaws.datapipeline.activity.EmrActivity.runActivity(EmrActivity.java:63)

我做错了吗?

【问题讨论】:

    标签: amazon-dynamodb amazon-dynamodb-streams


    【解决方案1】:

    错误:java.lang.RuntimeException:com.amazonaws.AmazonServiceException:提供的 AttributeValue 为空,必须包含完全支持的数据类型之一(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException 这是你得到的错误。

    以下是可能的原因

    1. DynamoDB 不支持空值,因此您应该删除那些 字段(同意@notionquest)
    2. 字段的值应根据表格具有适当的数据类型

    【讨论】:

    • 感谢@Priyabrata,由于空值而出现问题。
    【解决方案2】:

    只是在这里更新以防有人再次遇到此问题。Empty String and Binary attribute values are allowed

    如果属性用作表或索引的键属性,则字符串和二进制类型的属性值的长度必须大于零。

    【讨论】:

      【解决方案3】:

      我正在使用带有发布标签 emr-5.23.0 的数据管道,并且也遇到了同样的问题。我通过在发电机项目中使用小写字母而不是大写字母来解决它。例如,使用 's' 代替 'S',使用 'n' 代替 'N'。

      【讨论】:

        【解决方案4】:

        这里我们要一步一步来。发生上述错误是因为某些属性的值为空。 DynamoDB 不支持属性的空值。

        示例:url、userAgent 等

        请删除空属性,然后重试。我可以保证上述问题将得到解决。但是,也可能有其他问题。

        【讨论】:

        • 感谢您的回复。那么我们如何传递一个空值呢?
        • DynamoDB 不接受属性的空值。如果你想要这些属性,你可能需要设置一些默认值。没有解决方法。
        【解决方案5】:

        在我的情况下,我遇到了同样的问题,因为发送的参数无效 映射模板。

        #set($inputRoot = $input.path('$'))
        { 
          "userId": "$input.params('userId')",
          "userEmail": "$input.params('userEmail')",
          "userName": "$input.params('userName')",
          "userPassword": "$input.params('userPassword')"
        }
        

        这里我发送了额外的参数 userId ,这就是发生错误的原因。


        对于空白值,当您添加项目时,主键属性是唯一必需的属性。属性值不能为空。字符串和二进制类型属性的长度必须大于零。集类型属性不能为空。具有空值的请求将被拒绝并出现 ValidationException 异常。 请查看此文档。

        http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html

        希望对你有帮助。

        【讨论】:

          【解决方案6】:

          我在 aws 中运行恢复管道时遇到了同样的问题。找了一会儿,我发现了问题。恢复的 AMI 版本与导出版本不同。

          我还有其他工作正常的管道。我仍然不知道为什么在一种情况下它没有。基本上,我检查了 AMI 版本,导出版本为 3.8.0,还原版本为 3.9.0。我将还原更改为 3.8.0 并且可以正常工作。

          在这里你会找到更好的explanation

          我的两分钱。

          【讨论】:

          • 虽然这在理论上可以回答这个问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
          【解决方案7】:

          使用驼峰式,例如:

          {"id":{"S":"123xyz"},"ip":{"S":"127.0.0.1"},"attempt":{"N":"10"},"允许":{"BOOL":true}}

          {"id":{"s":"123xyz"},"ip":{"s":"127.0.0.1"},"attempt":{"n":"10"},"允许":{"bOOL":true}}

          这也是上述错误的原因之一。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-04-17
            • 1970-01-01
            • 2020-04-07
            • 2020-06-26
            • 2021-07-23
            • 2022-12-16
            • 2019-04-19
            相关资源
            最近更新 更多