通过AWS CLI将DynamoDB表导出为CSV(不使用管道)

lzfw57am  于 2023-01-03  发布在  其他
关注(0)|答案(5)|浏览(194)

我是AWS CLI新手,我正在尝试以CSV格式导出DynamoDB表,以便直接导入PostgreSQL。有没有办法使用AWS CLI来实现这一点?
我看到了这个命令:aws dynamodb scan --table-name <table-name>-但这不提供CSV导出选项。
使用此命令,我可以在终端中看到输出,但不确定如何将其写入文件。

n53p2ov0

n53p2ov01#

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

aws dynamodb scan \
    --table-name mytable \
    --query "Items[*].[id.S,name.S]" \
    --output text

这将给予制表符分隔的输出。你可以使用> output.txt将其重定向到file,然后你可以很容易地将制表符转换为csv格式的逗号。
请注意,您可能需要按照scan documentation
如果扫描的项目总数超过1 MB的最大数据集大小限制,扫描将停止,并将结果作为LastEvaluatedKey值返回给用户,以便在后续操作中继续扫描。结果还包括超过限制的项目数。扫描可能导致没有符合筛选条件的表数据。
另一个选择是github的DynamoDBtoCSV项目。

yacmzcpb

yacmzcpb2#

对于本地主机dynamodb:

$aws dynamodb scan --table-name AOP --region us-east-1 --endpoint-url
http://localhost:8000 --output json > /home/ohelig/Desktop/a.json

对于发电机b:

$aws dynamodb scan --table-name AOP --region us-east-1 --output json > /home/ohelig/Desktop/a.json

然后将JSON转换为CSV或其他格式。
我已经修改了上面的答案,使之更清楚。

rt4zxlrg

rt4zxlrg3#

完整导出所有列而不列出的更好方法是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
41zrol4v

41zrol4v4#

您可以使用jq将aws cli提供的json输出转换为csv

aws dynamodb scan --table-name mytable --query "Items[*].[id.S,name.S]" --output json | jq -r '.[] | @csv' > dump.csv
68de4m5k

68de4m5k5#

您可以使用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

但要注意,如果列数据长度不同,则会产生错误的输出

相关问题