【发布时间】:2019-12-05 21:53:12
【问题描述】:
我有一个大约 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 响应。
【问题讨论】:
-
批量写入器用于放置整个记录而不是更新记录中的单个属性对吗?我正在尝试将嵌套属性“价格”设置为空列表,从而有效地清除 500k 记录的此属性。我使用 update_item 是因为我只想更新一个属性
标签: python amazon-web-services multiprocessing amazon-dynamodb boto3