从列表中更新大量 dynamodb 项目的最佳方法



我有一个包含大约 500,000 个字符串的 python 列表,列表中的每个元素对应于我要更新的 dynamodb 表中一个项目的 id。

我的问题是,遍历此列表并对每个项目执行相同更新查询的最佳方法是什么?

我尝试使用

data = pd.read_csv(filename)
pool = Pool(50)
results = pool.imap_unordered(job, data['item_id'].astype(str).tolist())

其中"作业"是以下方法:

def job(item_id):
dynamodb = boto3.resource(
'dynamodb',
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
aws_session_token=aws_session_token,
region_name=region
)
table = dynamodb.Table('my-table')
response = table.update_item(
Key={
"id": item_id
},
UpdateExpression="set x=:new",
ExpressionAttributeValues={
':new': []
},
ReturnValues="UPDATED_NEW"
)

但是,虽然脚本执行没有错误,但更改不会保留在 dynamodb 表中,我觉得我误解了如何在 boto3 资源上使用进程池,以使这项任务在 500,000 个项目上有所效率。

还值得注意的是,当我打印出收到的响应时,我收到了HTTP 200响应。

在此处引用 DynamoDB 文档:

DynamoDB 不支持空集。

所以你不能分配一个空的设置值(我很惊讶该操作没有返回错误......相反,您应该使用UpdateItemremove操作来删除整个 set 属性。

最新更新