2016-12-02 5 views
0

Я ищу пакетную запись элемента в dynamodb с помощью модуля boto3 python, и я получаю это. Это первый раз, когда я работал с aws cli или boto3. В документации говорится, что ошибки исключения проверки происходят, когда есть пустые значения и возможные неправильные типы данных, но я играл со всеми этими и, похоже, не работает.aws cli dynamo db (ValidationException) Ошибка

Имеет ли dynamodb только желание иметь 25 предметов, написанных на нем за раз? как я могу контролировать эти партии, если так?

Мой запрос:

client = boto3.client('dynamodb') 
response = client.batch_write_item(RequestItems=batch_dict) 

Верх batch_dict:

{'scraper_exact_urls': [{'PutRequest': {'Item': {'Sku': {'S': 'T104P3'}, 
'pps_id': {'N': '427285976'}, 
'scraper_class_name': {'S': 'scraper_class_name'}, 
'store_id': {'N': '1197386754'}, 
'updated_by': {'S': 'user'}, 
'updated_on': {'N': '1480714223'}, 
'updated_url': {'S': 'http://www.blah.com'}}}}, 
{'PutRequest': {'Item': {'Sku': {'S': 'T104P3'}, 
'pps_id': {'N': '427285976'}, 
'scraper_class_name': {'S': 'scraper_class_name'}, 
'store_id': {'N': '1197386754'}, 
'updated_by': {'S': 'user'}, 
'updated_on': {'N': '1480714223'}, 
'updated_url': {'S': 'http://www.blah.com'}}}},.... 

Схема:

атрибуты: "pps_id" => \ AWS \ DynamoDb \ Enum \ Тип :: НОМЕР , "sku" => \ Aws \ DynamoDb \ Enum \ Type :: STRING, "scraper_class_name" => \ Aws \ DynamoDb \ Enum \ Type :: STRING, "store_id" => \ Aws \ DynamoDb \ Enum \ Type :: NUMBER, "updated_url" => \ Aws \ DynamoDb \ Enum \ Type :: STRING, "updated_by" => \ Aws \ DynamoDb \ Enum \ Тип: : STRING, "updated_on" => \ Аус \ DynamoDb \ Enum \ Тип :: ЧИСЛО, поля: "pps_id", "scraper_class_name",

Ошибка:

ClientError: An error occurred (ValidationException) when calling the BatchWriteItem operation: 1 validation error detected: Value .... Map value must satisfy constraint: [Member must have length less than or equal to 25, Member must have length greater than or equal to 1] 
+0

Кажется, я нашел ответ здесь [ссылка] (http://stackoverflow.com/questions/31065900/how-to -write-more-than-25-items-rows-in-table-for-dynamodb) –

+0

Возможный дубликат [Как записать более 25 элементов/строк в таблицу для DynamoDB?] (http://stackoverflow.com/ вопросы/31065900/как к записи-больше, чем 25-предметы-строка-в-таблица-для-dynamodb) – LuFFy

ответ

0

BatchWriteItem API работает по 25 штук одновременно. Вы можете использовать следующий код, адаптированный из non-copying batching question, вызвать BatchWriteItem 25 элементов кусков

def batch(iterable, n=1): 
    l = len(iterable) 
    for ndx in range(0, l, n): 
     yield iterable[ndx:min(ndx + n, l)] 

client = boto3.client('dynamodb') 

for x in batch(batch_dict['scraper_exact_urls'], 25): 
    subbatch_dict = {'scraper_exact_urls': x} 
    response = client.batch_write_item(RequestItems=subbatch_dict) 
Смежные вопросы