在DynamoDB中是否有API可以批量更新项?虽然有一种写入新项的批处理API(BatchWriteItem
),以及使用UpdateItem
更新单个项的API,但能否在一次调用中更新多个项呢?
在DynamoDB中是否有API可以批量更新项?虽然有一种写入新项的批处理API(BatchWriteItem
),以及使用UpdateItem
更新单个项的API,但能否在一次调用中更新多个项呢?
目前DynamoDB中没有可用的批量更新项API。
我知道这已经是一个老问题了,但DynamoDB最近添加了一个事务 API,支持更新:
Update — 启动 UpdateItem 操作以编辑现有项的属性或在表中添加新项(如果该项不存在)。使用此操作有条件地或无条件地添加、删除或更新现有项上的属性。
https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/transaction-apis.html
我找到了一个类似问题的帖子,希望这可以帮到你。
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)
这是最小的代码。你可以使用多线程同时执行多个批次。
使用 PartiQL,您可以像 SQL 一样执行批量插入和更新。
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
DynamoDBMapper.batchSave(Iterable<? extends Object> objectsToSave)
实现此目的。我使用了DynamoDB更新触发器,然后创建了一个模板来告诉我应该修改哪些项目,将它们放入队列中,然后按顺序读取队列消息以逐一进行更新。
虽然不完全是批量删除,但我刚刚在 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
CMD
-F
然后点击.\*
),并将查找设置为".*
",将替换设置为"$0
",这基本上是将每一行用引号和逗号替换为自身。 id1
id2
id3
...
之后
"id1",
"id2",
"id3",
...
只需用您的 ID、表名、修改表达式和新值替换"idList = [...]
"、"Your-Table-Name
"、"expressionToChange
" 和最后 "New_Value
"。
此外,您必须为 Lambda 函数授予在 DynamoDB 中“更新项目”的权限,否则将出现错误。