AmazonServiceException:提供的 AttributeValue 为空,必须恰好包含受支持的数据类型之一

问题描述 投票:0回答:7

我尝试从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":"[email protected]"},"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\":\"[email protected]\",\"attemptNo\":1,\"submitDate\":1467784988}"},"eventTime":{"S":"1467784988000"}}

我遇到以下错误

Error: java.lang.RuntimeException:
com.amazonaws.AmazonServiceException: Supplied AttributeValue is
empty, must contain exactly one of the supported datatypes (Service:
AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException;
Request ID: GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG) at
org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.handleException(DynamoDBFibonacciRetryer.java:107)
at
org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.runWithRetry(DynamoDBFibonacciRetryer.java:83)
at
org.apache.hadoop.dynamodb.DynamoDBClient.writeBatch(DynamoDBClient.java:220)
at
org.apache.hadoop.dynamodb.DynamoDBClient.putBatch(DynamoDBClient.java:170)
at
org.apache.hadoop.dynamodb.write.AbstractDynamoDBRecordWriter.write(AbstractDynamoDBRecordWriter.java:91)
at
org.apache.hadoop.mapred.MapTask$DirectMapOutputCollector.collect(MapTask.java:844)
at
org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:596)
at org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.j
errorStackTrace
amazonaws.datapipeline.taskrunner.TaskExecutionException: Failed to
complete EMR transform. at
amazonaws.datapipeline.activity.EmrActivity.runActivity(EmrActivity.java:67)
at
amazonaws.datapipeline.objects.AbstractActivity.run(AbstractActivity.java:16)
at
amazonaws.datapipeline.taskrunner.TaskPoller.executeRemoteRunner(TaskPoller.java:136)
at
amazonaws.datapipeline.taskrunner.TaskPoller.executeTask(TaskPoller.java:105)
at
amazonaws.datapipeline.taskrunner.TaskPoller$1.run(TaskPoller.java:81)
at
private.com.amazonaws.services.datapipeline.poller.PollWorker.executeWork(PollWorker.java:76)
at
private.com.amazonaws.services.datapipeline.poller.PollWorker.run(PollWorker.java:53)
at java.lang.Thread.run(Thread.java:745) Caused by:
amazonaws.datapipeline.taskrunner.TaskExecutionException: Error:
java.lang.RuntimeException: com.amazonaws.AmazonServiceException:
Supplied AttributeValue is empty, must contain exactly one of the
supported datatypes (Service: AmazonDynamoDBv2; Status Code: 400;
Error Code: ValidationException; Request ID:
GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG) at
org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.handleException(DynamoDBFibonacciRetryer.java:107)
at
org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.runWithRetry(DynamoDBFibonacciRetryer.java:83)
at
org.apache.hadoop.dynamodb.DynamoDBClient.writeBatch(DynamoDBClient.java:220)
at
org.apache.hadoop.dynamodb.DynamoDBClient.putBatch(DynamoDBClient.java:170)
at
org.apache.hadoop.dynamodb.write.AbstractDynamoDBRecordWriter.write(AbstractDynamoDBRecordWriter.java:91)
at
org.apache.hadoop.mapred.MapTask$DirectMapOutputCollector.collect(MapTask.java:844)
at
org.apache.hadoop.mapred.MapTask$OldOutputCollector.collect(MapTask.java:596)
at
org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.java:26)
at
org.apache.hadoop.dynamodb.tools.ImportMapper.map(ImportMapper.java:13)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:65) at
org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432) at
org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) at
org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:175) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.Subject.doAs(Subject.java:415) at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1548)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:170) Caused
by: com.amazonaws.AmazonServiceException: Supplied AttributeValue is
empty, must contain exactly one of the supported datatypes (Service:
AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException;
Request ID: GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG) at
com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1182)
at
com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:770)
at
com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:489)
at
com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:310)
at
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1772)
at
com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.batchWriteItem(AmazonDynamoDBClient.java:730)
at amazonaws.datapipeline.cluster.EmrUtil.runSteps(EmrUtil.java:286)
at
amazonaws.datapipeline.activity.EmrActivity.runActivity(EmrActivity.java:63)

我做错了什么吗?

amazon-dynamodb amazon-dynamodb-streams
7个回答
8
投票
Error: java.lang.RuntimeException: com.amazonaws.AmazonServiceException: Supplied AttributeValue is empty, must contain exactly one of the supported datatypes (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException

这是您遇到的错误。

以下是可能的原因

  1. DynamoDB
    不支持空值,所以你应该删除这些字段(同意@notionquest)
  2. 字段的值应具有根据表正确的数据类型

2
投票

只是在这里更新以防有人再次遇到此问题: 不允许使用空字符串和二进制属性值

如果属性用作表或索引的键属性,则 String 和 Binary 类型的属性值的长度必须大于零。


1
投票

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


0
投票

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

示例:url、userAgent 等

请删除空属性并重试。我可以保证上述问题将会得到解决。然而,其他事情也可能是错误的。


0
投票

就我而言,由于发送的参数无效,我遇到了同样的问题 映射模板。

#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

希望对你有帮助。


0
投票

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

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

在这里您会找到更好的解释

我的两分钱。


0
投票

使用驼峰式大小写,例如:

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.