gpt4 book ai didi

python-2.7 - BatchWriteItem 操作 : The provided key element does not match the schema

转载 作者:行者123 更新时间:2023-12-04 12:42:52 25 4
gpt4 key购买 nike

我正在尝试使用 AWS Lambda 函数将 csv 数据从 S3 写入 DynamoDB。我目前收到以下错误“BatchWriteItem 操作:提供的关键元素与架构不匹配”。

有没有快速解决这个问题的方法?

import boto3

s3 = boto3.client('s3')
dynamodb = boto3.resource('dynamodb')

def csv_reader(event, context):

bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']

obj = s3.get_object(Bucket=bucket, Key=key)

rows = obj['Body'].read().split('\n')

table = dynamodb.Table('customer_id')

with table.batch_writer() as batch:
for row in rows:
batch.put_item(Item={

'Customer-ID':row.split(',')[0],
'Name':row.split(',')[1]
})

错误看起来像这样:

An error occurred (ValidationException) when calling the BatchWriteItem operation: The provided key element does not match the schema: ClientError Traceback (most recent call last):

File "/var/task/lambda_function.py", line 22, in csv_reader 'Name':row.split(',')[1]

File "/var/runtime/boto3/dynamodb/table.py", line 156, in exit self._flush()

File "/var/runtime/boto3/dynamodb/table.py", line 137, in _flush RequestItems={self._table_name: items_to_send})

File "/var/runtime/botocore/client.py", line 314, in _api_call return self._make_api_call(operation_name, kwargs)

File "/var/runtime/botocore/client.py", line 612, in _make_api_call raise error_class(parsed_response, operation_name)

ClientError: An error occurred (ValidationException) when calling the BatchWriteItem operation: The provided key element does not match the schema



我希望数据从 CSV 文件写入 DynamoDB。对 AWS 和 Python 完全陌生,因此将不胜感激。

最佳答案

放置项目时,您必须提供所有必填字段,否则会因上述异常而失败。

仔细检查您的表架构并检查强制值:至少一个哈希键是必需的。如果您使用 Range 键配置了 Hash Key,则必须提供这两个值。如果没有您表中的更多信息,我们很难猜测,但我将尝试在接下来的几行中总结问题。如果仍然不够,请使用表架构更新您的问题。

因此,假设您的 HashKey 名为 id ,您的代码应如下所示:

batch.put_item(Item={
'id': 'some-id'
'Customer-ID':row.split(',')[0],
'Name':row.split(',')[1]
})

如果还设置了范围键并为其命名,例如 test ,那么您的代码应如下所示:
batch.put_item(Item={
'id': 'some-id',
'test': 'some-value',
'Customer-ID':row.split(',')[0],
'Name':row.split(',')[1]
})

如果您不确定 Hash 和 Range 键如何协同工作,我建议您阅读 docs

关于python-2.7 - BatchWriteItem 操作 : The provided key element does not match the schema,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56107803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com