AmazonServiceException: предоставленное значение AttributeValue пусто, должно содержать ровно один из поддерживаемых типов данных.

Я пытаюсь импортировать данные из интерфейса консоли 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"}}

Я получаю ошибку ниже

Я что-то не так делаю?

Ошибка: java.lang.RuntimeException: com.amazonaws.AmazonServiceException: предоставленное значение AttributeValue пусто, должно содержать ровно один из поддерживаемых типов данных (Service: AmazonDynamoDBv2; код состояния: 400; код ошибки: ValidationException Это ошибка, которую вы получаете.


person rahulb    schedule 13.02.2017    source источник


Ответы (7)


Ниже приведены возможные причины

DynamoDB не поддерживает пустое значение, поэтому вам следует удалить эти поля (согласитесь с @notionquest)

  1. Значение поля должно иметь правильный тип данных в соответствии с таблицей
  2. Здесь мы должны пройти шаг за шагом. Вышеупомянутая ошибка возникла из-за того, что значения некоторых атрибутов пусты. DynamoDB не поддерживает пустые значения атрибутов.
person Priyabrata    schedule 25.04.2017
comment
Спасибо за ответ. Как же тогда передать пустое значение? - person rahulb; 27.05.2017

Пример: url, userAgent и т. д.

Удалите пустые атрибуты и попробуйте еще раз. Могу заверить, что вышеуказанный вопрос будет решен. Однако могло быть что-то еще не так.

В моем случае у меня возникла та же проблема из-за отправки недопустимого параметра из шаблона сопоставления.

person notionquest    schedule 13.02.2017
comment
DynamoDB не принимает пустое значение для атрибутов. Если вам нужны эти атрибуты, вам может потребоваться установить какое-то значение по умолчанию. Нет никакого обходного пути. - person rahulb; 14.02.2017
comment
Хотя теоретически это может дать ответ на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки. . - person notionquest; 14.02.2017

Здесь я отправил дополнительный параметр userId, поэтому произошла ошибка.

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

А для пустого значения, когда вы добавляете элемент, атрибуты первичного ключа являются единственными обязательными атрибутами. Значения атрибутов не могут быть нулевыми. Атрибуты строкового и двоичного типов должны иметь длину больше нуля. Атрибуты типа набора не могут быть пустыми. Запросы с пустыми значениями будут отклонены с исключением ValidationException. Пожалуйста, проверьте этот документ.


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

Надеюсь, это вам поможет.

У меня была такая же проблема с запуском конвейера восстановления в aws. После некоторого поиска я нашел проблему. Версия восстановления AMI отличалась от экспортной.

person Rahul Gaikwad    schedule 24.03.2017

У меня есть другие конвейеры, которые нормально работают. Я до сих пор не знаю, почему в одном случае этого не произошло. В основном я проверял версии AMI, они были 3.8.0 для экспортной и 3.9.0 для восстановления. Я меняю восстановление на 3.8.0 и все работает.

Здесь вы найдете лучшее объяснение.

Мои два цента.

Используйте верблюжий футляр, например:

person Carlos Raffellini    schedule 09.08.2017
comment
Ошибка: java.lang. 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.write (AbstractDynamoDBRecordWriter.hagoop:91) .mapred.MapTask $ DirectMapOutputCollector.collect (MapTask.java:844) на org.apache.hadoop.mapred.MapTask $ OldOutputCollector.collect (MapTask.java:596) на org.apache.h adoop.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.executejava:TaskRunner.TaskPoller.executeRemoteRunner. ) в amazonaws.datapipeline.taskrunner.TaskPoller.executeTask (TaskPoller.java:105) на amazonaws.datapipeline.taskrunner.TaskPoller $ 1.run (TaskPoller.java:81) на private.com.amazonaws.services.datapipeline.pork .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: предоставленное значение атрибута пусто, должно содержать только один из поддерживаемых типов данных (служба: AmazonDynamoDBv2; код состояния: 400; код ошибки: ID запроса: GECS2L57C G9ANLKCSJSB8EIKVRVV4KQNSO5AEMVJF66Q9ASUAAJG) при 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.MapolTopShop.jpg 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 (Собственный метод) в javax.security.auth.Subject.doAs (Subject.java:415) в org.apache.hadoop.security.UserGroupInformation.doAs (UserGroupInformation.java:1548) в org.apache.hadoop.mapred.YarnCh ild.main (YarnChild.java:170) Вызвано: com.amazonaws.AmazonServiceException: предоставленное AttributeValue пусто, должно содержать ровно один из поддерживаемых типов данных (Service: AmazonDynamoDBv2; Код состояния: 400; Код ошибки: ValidationException; Идентификатор запроса: 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). .AmazonDynamoDBClient.batchWriteItem (AmazonDynamoDBClient.java:730) на amazonaws.datapipeline.cluster.EmrUtil.runSteps (EmrUtil.java:286) на amazonaws.datapipeline.activity.EmrActivity Em.runActivity (EmrActivity Em.r63). - person GhostCat; 09.08.2017

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

{"id": {"s": "123xyz"}, "ip": {"s": "127.0.0.1"}, "try": {"n": "10"}, "allowed": { "bOOL": правда}}

to

Это также одна из причин указанной выше ошибки.

просто обновляю здесь на случай, если кто-то снова столкнется с этим. Пустая строка и двоичный атрибут допустимые значения

person prabhuvishnumurthy    schedule 24.10.2018

Значения атрибутов типа String и Binary должны иметь длину больше нуля, если атрибут используется в качестве ключевого атрибута для таблицы или индекса.

Я использую конвейер данных с меткой выпуска emr-5.23.0 и столкнулся с той же проблемой. Я решаю эту проблему, используя нижнюю букву вместо заглавной для ввода в динамо-элементе. Например, вместо «S» используйте «s», вместо «N» используйте «n».

person samtoddler    schedule 05.01.2021

Спасибо @Priyabrata, проблема возникла из-за пустого значения.

person Omri2018    schedule 15.06.2021