通过 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 导出选项。

使用此命令,我可以在终端中看到输出,但我不确定如何将其写入文件。

如果所有项目都具有相同的属性,例如idname都是字符串,那么运行:

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

但要小心如果列数据长度不同会产生错误的输出