如何通过cli截断dynamodb数据库表?

问题描述 投票:0回答:4

DynamoDB 表可以通过 AWS 控制台截断,但我想在脚本中执行此操作。 我在 S.O. 上看到的所有答案关于这个话题涉及“扫描”和类似的东西,我并不完全理解。我想知道是否有一个简单的指令可以用来完成这个截断。谢谢!

amazon-web-services amazon-dynamodb command-line-interface truncate
4个回答
4
投票

使用dynamodbdump

它有一个擦除数据选项,快速、简单、省事,您无需编写任何脚本或任何手动操作,只需运行这个简单的命令即可。

示例

dynamodump wipe-data --throughput 5 --table your-table --region eu-west-1

https://github.com/mifi/dynamodump


2
投票

你不能。您需要删除该表。所有脚本所做的就是扫描整个表并删除每个项目。最好删除该表并使用相同的名称创建它


0
投票

虽然这并不简单,但您可以组合几个命令来实现,而无需第三方工具。我们在这里所做的是一次扫描表 25 条记录(我们可以批量执行的最大记录),在 --query 中使用一些 jmespath 恶作剧将其格式化为批量执行语句,然后将其传递给批处理执行-语句命令。起泡沫,冲洗,重复,直到bulk.json的大小为3个字节,或者换句话说“[]”是一个空列表。

根据需要调整表名称、排序键、范围键(如果有),当然还有数据类型(在本例中为“S”字符串)。

这可行...不需要额外的工具...但效率很低。如果你想变得更奇特,使用工作线程池在 python 中重新编码它来传递批次可能会获得 100 倍的速度。

> bulk.json # so our first pass doesn't break the while test
while [ $(du -b bulk.json | cut -f 1) -ne 3 ]; do
    aws dynamodb scan \
        --max-items 25 \
        --table     my_table \
        --query "Items[].{\"Statement\" : join('', ['DELETE FROM \"my_table\" WHERE \"MySortKey\" = \'',MySortKey.S,'\' AND \"MyRangeKey\" = \'', MyRangeKey.S, '\''])}" \
        --output json \
        > bulk.json
    aws dynamodb batch-execute-statement \
        --statements file://bulk.json \
        --query "join('', ['Deleted ', to_string(length(Responses)), ' records.'])"; \
        --output text
done

0
投票

喜欢就尝试一下吧。
https://github.com/danishi/dynamodb-csv

$ dynamodb-csv --truncate -t my_table
© www.soinside.com 2019 - 2024. All rights reserved.