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":"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:Supplied AttributeValue 为空,必须包含 org 中支持的数据类型之一(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求 ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG)。 org.apache.hadoop.dynamodb.DynamoDBFibonacciRetryer.runWithRetry(DynamoDBFibonacciRetryer.java:83) 在 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:无法完成 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 为空,必须包含 org 中支持的数据类型之一(服务:AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;请求 ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG) .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) at org.apache.hadoop.dynamodb.write.AbstractDynamoDBRecordWriter.write(AbstractDynamoDBRecordWriter.java:91) at org.apache.hadoop.mapred.MapTask$DirectMapOutputCollector.collect(MapTask.java:第844章.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 (本机方法)在 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) 原因:com .amazonaws.AmazonServiceException:提供的 AttributeValue 为空,必须包含 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)

我做错什么了吗?

4

7 回答 7

6

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

以下是可能的原因

  1. DynamoDB 不支持空值,因此您应该删除这些字段(同意@notionquest)
  2. 根据表格,字段的值应具有适当的数据类型
于 2017-04-25T11:23:14.013 回答
1

只是在这里更新,以防有人再次遇到这个问题。允许空字符串和二进制属性值

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

于 2021-01-05T12:04:43.660 回答
1

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

于 2021-06-15T15:24:03.630 回答
0

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

示例:url、userAgent 等。

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

于 2017-02-13T14:35:42.320 回答
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

我希望它会帮助你。

于 2017-03-24T05:56:43.333 回答
0

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

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

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

我的两分钱。

于 2017-08-09T11:12:17.310 回答
0

使用驼峰式,例如:

{"id":{"S":"123xyz"},"ip":{"S":"127.0.0.1"},"attempt":{"N":"10"},"allowed":{ “布尔”:真}}

{"id":{"s":"123xyz"},"ip":{"s":"127.0.0.1"},"attempt":{"n":"10"},"allowed":{ “布尔”:真}}

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

于 2018-10-24T18:09:15.677 回答