ens*_*are 18 amazon-web-services amazon-dynamodb
在DynamoDB中将一个表格相同地复制到新表格的最佳方法是什么?
(我不担心原子性).
Roh*_*mer 31
我只是使用了 python 脚本dynamodb-copy-table,确保我的凭据在一些环境变量(AWS_ACCESS_KEY_ID
和AWS_SECRET_ACCESS_KEY
)中,并且它完美地工作。它甚至为我创建了目标表。
python dynamodb-copy-table.py src_table dst_table
默认区域是us-west-2
,使用AWS_DEFAULT_REGION
env 变量更改它。
Ala*_*ack 16
AWS Pipeline提供了一个可用于此目的的模板:"CrossRegion DynamoDB Copy"
请参阅:http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-crossregion-ddb-create.html
结果是一个简单的管道,看起来像:
虽然它被称为CrossRegion,但只要目标表名称不同,您就可以轻松地将它用于同一区域(请记住,每个帐户和区域的表名都是唯一的)
Jun*_*awa 12
我喜欢为此使用一个简单的 bash 脚本的想法,因此我决定采用 @bogdan-kiselitsa 的出色答案并将其扩展到大于 25 个项目的表。
# exit on error
set -eo pipefail
# tables
TABLE_FROM=$1
TABLE_TO=$2
# read
aws dynamodb scan \
--table-name "$TABLE_FROM" \
--output json \
| jq "[ .Items[] | { PutRequest: { Item: . } } ]" \
> "$TABLE_FROM-dump.json"
table_size="$(cat "${TABLE_FROM}-dump.json" | jq '. | length')"
echo "table size: ${table_size}"
# write in batches of 25
for i in $(seq 0 25 $table_size); do
j=$(( i + 25 ))
cat "${TABLE_FROM}-dump.json" | jq -c '{ "'$TABLE_TO'": .['$i':'$j'] }' > "${TABLE_TO}-batch-payload.json"
echo "Loading records $i through $j (up to $table_size) into ${TABLE_TO}"
aws dynamodb batch-write-item --request-items file://"${TABLE_TO}-batch-payload.json"
rm "${TABLE_TO}-batch-payload.json"
done
# clean up
rm "${TABLE_FROM}-dump.json"
Run Code Online (Sandbox Code Playgroud)
如果将其保存到migrate.sh那么您可以运行:
$ ./migrate.sh table_v1 table_v2
Run Code Online (Sandbox Code Playgroud)
创建一个备份(backups选项)并使用新的表名还原该表。这样会将所有数据放入新表中。注意:需要花费大量时间,具体取决于表的大小
以下是一种仅使用 shell 脚本、AWS CLI和jq将所有项目从一个表复制到另一个表的解决方案。对于小桌子来说可以使用。
# exit on error
set -eo pipefail
# tables
TABLE_FROM=<table>
TABLE_TO=<table>
# read
aws dynamodb scan \
--table-name "$TABLE_FROM" \
--output json \
| jq "{ \"$TABLE_TO\": [ .Items[] | { PutRequest: { Item: . } } ] }" \
> "$TABLE_TO-payload.json"
# write
aws dynamodb batch-write-item --request-items file://"$TABLE_TO-payload.json"
# clean up
rm "$TABLE_TO-payload.json"
Run Code Online (Sandbox Code Playgroud)
如果两个表相同,则需要先删除 TABLE_TO 中的所有项目。
DynamoDB 现在支持从 S3 导入。
因此,可能在几乎所有用例中,复制表的最简单且最便宜的方法是
使用“导出到 S3”功能将整个表转储到 S3。由于这使用备份来生成转储,因此表的吞吐量不受影响,并且速度也非常快。您需要启用备份 (PITR)。请参阅https://aws.amazon.com/blogs/aws/new-export-amazon-dynamodb-table-data-to-data-lake-amazon-s3/
使用“从 S3 导入”导入步骤 1 中创建的转储。这会自动要求您创建一个新表。
归档时间: |
|
查看次数: |
26488 次 |
最近记录: |