[英]DynamoDB Batch Update
DynamoDB 中是否有任何 API 可以更新一批项目? 有一个 API 可以批量写入新项目 ( BatchWriteItem
) 并使用UpdateItem
更新单个项目,但是是否可以在一次调用中更新多个项目?
目前 DynamoDB 中没有可用的批量更新项 API。
我现在知道这是一个老问题,但 DynamoDB 最近添加了一个支持更新的事务 API:
更新 — 启动 UpdateItem 操作以编辑现有项目的属性或将新项目添加到表中(如果尚不存在)。 使用此操作可以有条件地或无条件地添加、删除或更新现有项目的属性。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html
DynamoDBMapper.batchSave(Iterable<? extends Object> objectsToSave)
我使用DynamoDBMapper.batchSave(Iterable<? extends Object> objectsToSave)
。
不,目前没有批量更新,您可以使用单个更新项调用并对其进行工作流,例如 AWS SWF 或 AWS 步骤函数
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html
BatchWriteItem 无法更新项目。 要更新项目,请使用 UpdateItem 操作。 BatchWriteItem 操作在一个或多个表中放置或删除多个项目
参考: http : //docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BatchWriteItem.html
我使用了一个dynamoDB更新触发器,然后我做了一个模板,告诉我我应该修改哪些项目,我把它们放在一个队列中,然后它们读取另一个队列中的消息以一一更新
使用 PartiQL,您可以像 SQL 一样执行批量插入和更新。
我在类似的查询中找到了这个线程,希望这可能会有所帮助。
DynamoDB 支持文档中描述的批处理语句执行。 这适用于客户端对象而不是资源对象。 然后我使用了 DynamoDB 支持的 PartiQL 更新语句并在此处进行了描述。
Python 代码参考如下所示:
client = boto3.client('dynamodb')
batch = ["UPDATE users SET active='N' WHERE email='<user_email>' RETURNING [ALL|MODIFIED] [NEW|OLD] *;", "UPDATE users ..."] # Limit to 25 per batch
request_items = [{'Statement': _stat} for _stat in batch]
batch_response = client.batch_execute_statement(Statements=request_items)
这是最少的代码。 您可以使用多线程同时执行多个批处理。
不完全是批量删除,但我刚才在 python lambda 函数中做了这个:
import json
import boto3
client = boto3.client('dynamodb')
def lambda_handler(event, context):
idList = [
"id1",
"id2
...
"id100",
]
for itemID in idList:
test = client.update_item(
TableName='Your-Table-Name',
Key={
'id': {
'S': itemID
}
},
UpdateExpression="set exressionToChange=:r",
ExpressionAttributeValues={
':r': {'S':'New_Value'}},
ReturnValues="UPDATED_NEW")
return
为了获取 idList,我下载了 CSV 中的值,将它们复制到 VSCode 中,然后进行查找并用正则表达式替换( CMD
- F
然后单击.\*
)并将查找设置为“ .*
”并替换为“ $0
” , 它基本上用引号和逗号替换了每一行
所以基本上之前:
id1
id2
id3
...
之后
"id1",
"id2",
"id3",
...
只需将“ idList = [...]
”替换为您的 ID、“ Your-Table-Name
”、“ expressionToChange
”,最后是“ New_Value
”。
此外,您将授予 lambda 函数权限以在 DynamoDB 中“更新项目”,否则您将收到错误消息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.