gpt4 book ai didi

python - 使用 boto 清空 DynamoDB 表

转载 作者:太空狗 更新时间:2023-10-30 00:55:26 27 4
gpt4 key购买 nike

如何以最佳方式(就财务成本而言)使用 boto 清空 DynamoDB 表? (正如我们在 SQL 中使用 truncate 语句所做的那样。)

boto.dynamodb2.table.delete()boto.dynamodb2.layer1.DynamoDBConnection.delete_table() 删除整个表,而 boto.dynamodb2.table.delete_item() boto.dynamodb2.table。 BatchTable.delete_item() 只删除指定的项目。

最佳答案

虽然我同意 Johnny Wu删除表并重新创建它会更有效率,但可能会出现许多 GSI 或 Tirgger 事件与表相关联而您不想重新关联这些事件的情况。下面的脚本应该可以递归扫描表并使用批处理函数删除表中的所有项目。但是对于非常大的表,这可能不起作用,因为它需要将表中的所有项目都加载到您的计算机中

import boto3
dynamo = boto3.resource('dynamodb')

def truncateTable(tableName):
table = dynamo.Table(tableName)

#get the table keys
tableKeyNames = [key.get("AttributeName") for key in table.key_schema]

"""
NOTE: there are reserved attributes for key names, please see https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/ReservedWords.html
if a hash or range key is in the reserved word list, you will need to use the ExpressionAttributeNames parameter
described at https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/dynamodb.html#DynamoDB.Table.scan
"""

#Only retrieve the keys for each item in the table (minimize data transfer)
ProjectionExpression = ", ".join(tableKeyNames)

response = table.scan(ProjectionExpression=ProjectionExpression)
data = response.get('Items')

while 'LastEvaluatedKey' in response:
response = table.scan(
ProjectionExpression=ProjectionExpression,
ExclusiveStartKey=response['LastEvaluatedKey'])
data.extend(response['Items'])

with table.batch_writer() as batch:
for each in data:
batch.delete_item(
Key={key: each[key] for key in tableKeyNames}
)

truncateTable("YOUR_TABLE_NAME")

关于python - 使用 boto 清空 DynamoDB 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28521631/

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