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

时间:2017-02-13 12:01:10

标签: amazon-dynamodb amazon-dynamodb-streams

我正在尝试从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是   为空,必须包含一个受支持的数据类型(服务:   AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;   申请ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG)at at   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   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为空,必须包含其中的一个   支持的数据类型(服务:AmazonDynamoDBv2;状态代码:400;   错误代码:ValidationException;请求ID:   GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG)at at   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)at   org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432)at   org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)at at   org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:175)at 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)   在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:170)引起   by:com.amazonaws.AmazonServiceException:提供的AttributeValue是   为空,必须包含一个受支持的数据类型(服务:   AmazonDynamoDBv2;状态代码:400;错误代码:ValidationException;   申请ID:GECS2L57CG9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG)at at   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)   at amazonaws.datapipeline.cluster.EmrUtil.runSteps(EmrUtil.java:286)   在   amazonaws.datapipeline.activity.EmrActivity.runActivity(EmrActivity.java:63)

我做错了吗?

7 个答案:

答案 0 :(得分:1)

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

以下是可能的原因

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

答案 1 :(得分:0)

我们必须在这里一步一步地进行。发生上述错误是因为某些属性的值为空。 DynamoDB不支持属性的空值。

示例:url,userAgent等

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

答案 2 :(得分:0)

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

class ReportRepository extends AbstractRepository implements ReportRepositoryInterface {

    public function createReport(array $request){
        $this->create($request);
        return ApiResponse::responseData($request, 'Record successfully created!');
    }
}

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

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

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

我希望它会对你有所帮助。

答案 3 :(得分:0)

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

我有其他管道工作正常。我仍然不知道为什么在一个案例中没有。基本上,我检查了AMI版本,它们是3.8.0用于导出版本,3.9.0用于恢复版本。我将恢复更改为3.8.0并且它可以正常工作。

在这里,您会找到更好的explanation

我的两分钱。

答案 4 :(得分:0)

使用骆驼保护套,例如:

{“ id”:{“ S”:“ 123xyz”},“ ip”:{“ S”:“ 127.0.0.1”},“尝试”:{“ N”:“ 10”},“允许“:{” BOOL“:true}}

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

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

答案 5 :(得分:0)

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

<块引用>

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

答案 6 :(得分:0)

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