通过 AWS CLI(不使用管道)将 DynamoDB table 导出为 CSV
Export a DynamoDB table as CSV through AWS CLI (without using pipeline)
我是 AWS CLI 的新手,我正在尝试以 CSV 格式导出我的 DynamoDB table,以便我可以将它直接导入到 PostgreSQL 中。有没有办法使用 AWS CLI 来做到这一点?
我遇到了这个命令:aws dynamodb scan --table-name <table-name>
- 但它不提供 CSV 导出选项。
使用此命令,我可以在终端中看到输出,但我不确定如何将其写入文件。
如果所有项目都具有相同的属性,例如id
和name
都是字符串,那么运行:
aws dynamodb scan \
--table-name mytable \
--query "Items[*].[id.S,name.S]" \
--output text
这将给出制表符分隔的输出。您可以使用 > output.txt
将其重定向到文件,然后您可以轻松地将制表符转换为 csv 的逗号。
请注意,您可能需要根据 scan documentation:
进行分页
If the total number of scanned items exceeds the maximum dataset size limit of 1 MB, the scan stops and results are returned to the user as a LastEvaluatedKey value to continue the scan in a subsequent operation. The results also include the number of items exceeding the limit. A scan can result in no table data meeting the filter criteria.
另一个选项是 github 的 DynamoDBtoCSV 项目。
对于本地主机 dynamodb:
$aws dynamodb scan --table-name AOP --region us-east-1 --endpoint-url
http://localhost:8000 --output json > /home/ohelig/Desktop/a.json
对于 dynamodb:
$aws dynamodb scan --table-name AOP --region us-east-1 --output json > /home/ohelig/Desktop/a.json
然后将 JSON 转换为 CSV 或其他格式。
我已经修改了上面的答案以使其清楚。
您可以使用 jq 将 aws cli 给出的 json 输出转换为 csv
aws dynamodb scan --table-name mytable --query "Items[*].[id.S,name.S]" --output json | jq -r '.[] | @csv' > dump.csv
完整导出所有列而不列出的更好方法是 Dynamo db export to csv
基本上
aws dynamodb scan --table-name my-table --select ALL_ATTRIBUTES --page-size 500 --max-items 100000 --output json | jq -r '.Items' | jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ].S])[] | @csv' > export.my-table.csv
您可以使用jq将json转换成csv
aws dynamodb query \
--table-name <table-name> \
--index-name <index-name> \
--select SPECIFIC_ATTRIBUTES \
--projection-expression "attributes1, attributes2,..." \
--key-condition-expression "#index1 = :index1 AND #index2 = :index2" \
--expression-attribute-names '{"#index1": "index1","#index2": "index2"}' \
--expression-attribute-values '{":index1": {"S":"key1"},":index2": {"S":"key2"}}' \
--output json | jq -r '.Items' | jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ][]?])[] | @csv' > output.csv
但要小心如果列数据长度不同会产生错误的输出
我是 AWS CLI 的新手,我正在尝试以 CSV 格式导出我的 DynamoDB table,以便我可以将它直接导入到 PostgreSQL 中。有没有办法使用 AWS CLI 来做到这一点?
我遇到了这个命令:aws dynamodb scan --table-name <table-name>
- 但它不提供 CSV 导出选项。
使用此命令,我可以在终端中看到输出,但我不确定如何将其写入文件。
如果所有项目都具有相同的属性,例如id
和name
都是字符串,那么运行:
aws dynamodb scan \
--table-name mytable \
--query "Items[*].[id.S,name.S]" \
--output text
这将给出制表符分隔的输出。您可以使用 > output.txt
将其重定向到文件,然后您可以轻松地将制表符转换为 csv 的逗号。
请注意,您可能需要根据 scan documentation:
进行分页If the total number of scanned items exceeds the maximum dataset size limit of 1 MB, the scan stops and results are returned to the user as a LastEvaluatedKey value to continue the scan in a subsequent operation. The results also include the number of items exceeding the limit. A scan can result in no table data meeting the filter criteria.
另一个选项是 github 的 DynamoDBtoCSV 项目。
对于本地主机 dynamodb:
$aws dynamodb scan --table-name AOP --region us-east-1 --endpoint-url
http://localhost:8000 --output json > /home/ohelig/Desktop/a.json
对于 dynamodb:
$aws dynamodb scan --table-name AOP --region us-east-1 --output json > /home/ohelig/Desktop/a.json
然后将 JSON 转换为 CSV 或其他格式。
我已经修改了上面的答案以使其清楚。
您可以使用 jq 将 aws cli 给出的 json 输出转换为 csv
aws dynamodb scan --table-name mytable --query "Items[*].[id.S,name.S]" --output json | jq -r '.[] | @csv' > dump.csv
完整导出所有列而不列出的更好方法是 Dynamo db export to csv
基本上
aws dynamodb scan --table-name my-table --select ALL_ATTRIBUTES --page-size 500 --max-items 100000 --output json | jq -r '.Items' | jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ].S])[] | @csv' > export.my-table.csv
您可以使用jq将json转换成csv
aws dynamodb query \
--table-name <table-name> \
--index-name <index-name> \
--select SPECIFIC_ATTRIBUTES \
--projection-expression "attributes1, attributes2,..." \
--key-condition-expression "#index1 = :index1 AND #index2 = :index2" \
--expression-attribute-names '{"#index1": "index1","#index2": "index2"}' \
--expression-attribute-values '{":index1": {"S":"key1"},":index2": {"S":"key2"}}' \
--output json | jq -r '.Items' | jq -r '(.[0] | keys_unsorted) as $keys | $keys, map([.[ $keys[] ][]?])[] | @csv' > output.csv
但要小心如果列数据长度不同会产生错误的输出