9

I am trying to import data from dynamodb console interface, but unable to get success.

Data is

{"_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"}}

I am getting below error

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)

Am I doing anything wrong?

Ali Behzadian Nejad
  • 8,804
  • 8
  • 56
  • 106
rahulb
  • 970
  • 4
  • 12
  • 24

7 Answers7

7
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

This is the error you are getting.

Below are the possible reasons

  1. DynamoDB does not support empty value, so you should remove those fields (agree with @notionquest)
  2. Field's value should have proper data type as per table
Ali Behzadian Nejad
  • 8,804
  • 8
  • 56
  • 106
Priyabrata
  • 629
  • 1
  • 8
  • 23
1

just updating here in case someone come across this again.Empty String and Binary attribute values are allowed

Attribute values of type String and Binary must have a length greater than zero if the attribute is used as a key attribute for a table or index.

samtoddler
  • 8,463
  • 2
  • 26
  • 21
1

I'm using Data pipeline with release label emr-5.23.0 and also encoutered the same problem. I solve it by using lower letter instead of capital letter for the Typing in the dynamo item. E.g instead of 'S' use 's', instead of 'N' use 'n'.

Omri2018
  • 11
  • 3
0

We have to go through step by step here. The above error occurred because the values for some of the attributes are empty. DynamoDB doesn't support empty value for the attributes.

Example: url, userAgent etc.

Please remove the empty attributes and try again. I can assure that the above issue will be resolved. However, something else could be wrong as well.

notionquest
  • 37,595
  • 6
  • 111
  • 105
  • Thanks for the reply. How can we pass a empty value then? – rahulb Feb 14 '17 at 04:17
  • DynamoDB doesn't accept empty value for the attributes. If you want those attributes, you may need to set some default value. There is no workaround. – notionquest Feb 14 '17 at 07:20
0

In my case , I got the same issue because of invalid parameter sends from mapping template.

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

Here I sent extra parameter userId , that's why error occurred .


And for blank value , When you add an item, the primary key attribute(s) are the only required attributes. Attribute values cannot be null. String and Binary type attributes must have lengths greater than zero. Set type attributes cannot be empty. Requests with empty values will be rejected with a ValidationException exception. Please check this document .

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

I hope it will help you.

Rahul Gaikwad
  • 563
  • 4
  • 9
  • 26
0

I had the same problem running a restore pipeline in aws. After looking for a while I found the problem. The AMI version of the restore was different from the export one.

I have other pipelines which work fine. I still don't know why in one case it didn't. Basically, I checked the AMI versions, they were 3.8.0 for the export one and 3.9.0 for the restore one. I change the restore to 3.8.0 and it works.

Here you will find a better explanation.

My two cents.

  • Whilst this may theoretically answer the question, [it would be preferable](//meta.stackoverflow.com/q/8259) to include the essential parts of the answer here, and provide the link for reference. – GhostCat Aug 09 '17 at 11:32
0

Use camel case, For example:

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

to

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

This is also one of the reasons for above error.

Ali Behzadian Nejad
  • 8,804
  • 8
  • 56
  • 106