Создание таблицы с использованием DynamodB с хэш-ключами и ключами Range. Кроме того, у меня есть некоторые неключевые атрибуты, и их значения должны быть включены в него. Ошибка при попытке обновить таблицу.
Код:
dynamodb = boto3.resource('dynamodb')
client = boto3.client('dynamodb')
table = dynamodb.Table('Name')
db_AccountNumber=[] #data to be included in table is in below two lists which consists of multiple 12 digit AWS account-ID's.
db_accountalias=[] #data contains multiple AWS account-names
# Create the DynamoDB table.
table = dynamodb.create_table(
TableName='Name',
KeySchema=[
{
'AttributeName': 'account_number',
'KeyType': 'HASH'
},
{
'AttributeName': 'account_type',
'KeyType': 'RANGE'
}
],
AttributeDefinitions=[
{
'AttributeName': 'account_number',
'AttributeType': 'S'
},
{
'AttributeName': 'account_type',
'AttributeType': 'S'
},
],
ProvisionedThroughput={
'ReadCapacityUnits': 10,
'WriteCapacityUnits': 10,
}
)
table.meta.client.get_waiter('table_exists').wait(TableName='Name')
with table.batch_writer() as batch:
for item in db_AccountNumber:
for alias in db_accountalias:
batch.put_item(
Item={
'account_number' : item,
'account_type' : 'new',
'iam_alias': {'S': alias},
'profile': {'S': alias},
'cname': {'S': alias}
}
)
Я хочу, чтобы неключевые атрибуты iam_alias
, profile
, cname
имели те же значения, что иof.
Выполнение вышеуказанных кодов дает ошибку:
Traceback (most recent call last):
File "./createdb_multiplefields.py", line 66, in <module>
'cname': {'S': alias}
File "/usr/lib/python2.7/site-packages/boto3/dynamodb/table.py", line 101, in put_item
self._add_request_and_process({'PutRequest': {'Item': Item}})
File "/usr/lib/python2.7/site-packages/boto3/dynamodb/table.py", line 110, in _add_request_and_process
self._flush_if_needed()
File "/usr/lib/python2.7/site-packages/boto3/dynamodb/table.py", line 131, in _flush_if_needed
self._flush()
File "/usr/lib/python2.7/site-packages/boto3/dynamodb/table.py", line 137, in _flush
RequestItems={self._table_name: items_to_send})
File "/usr/lib/python2.7/site-packages/botocore/client.py", line 357, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/usr/lib/python2.7/site-packages/botocore/client.py", line 661, in _make_api_call
raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the BatchWriteItem operation: Provided list of item keys contains duplicates
Очевидно, что ключи в моем Предмете не являются дубликатами. Как исправить эту ошибку и обновить таблицу?