Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon dynamodb 导出|仅使用AWS CLI导入DynamoDB_Amazon Dynamodb_Aws Cli - Fatal编程技术网

Amazon dynamodb 导出|仅使用AWS CLI导入DynamoDB

Amazon dynamodb 导出|仅使用AWS CLI导入DynamoDB,amazon-dynamodb,aws-cli,Amazon Dynamodb,Aws Cli,我的目标是拥有一个简单的工具,用于将dynamodb导出到本地文件(json/csv),只允许aws cli或尽可能少的第三方。我桌子的大小大约是500mb 我现在做了几天的研究,我看到了非常好的项目,比如dynamodump和另一个SDK实现。我还测试了来自Amazon的Datapipeline,但对于我所针对的任务,我希望使用simpleaws cli 假设我已经有了表的映射,比如索引和属性。现在我只想导入我拥有的项。对我来说,实施的最佳解决方案如下: 将表格从aws导出到本地文件: aws

我的目标是拥有一个简单的工具,用于将dynamodb导出到本地文件(json/csv),只允许
aws cli
或尽可能少的第三方。我桌子的大小大约是500mb

我现在做了几天的研究,我看到了非常好的项目,比如
dynamodump
和另一个SDK实现。我还测试了来自Amazon的
Datapipeline
,但对于我所针对的任务,我希望使用simple
aws cli

假设我已经有了表的映射,比如索引和属性。现在我只想导入我拥有的项。对我来说,实施的最佳解决方案如下:

  • 将表格从aws导出到本地文件:
    aws dynamodb扫描——表名SOMETABLENAME——输出json | jq'.Items[]'>SOMETABLENAME.json

  • 使用诸如
    sed
    jq
    awk
    等内容呈现文件。要获得正确的json格式,可以将谁导入aws dynamodb

  • 使用以下命令将项目从SOMETABLENAME导入aws dynamodb:

    aws dynamodb put项--表名SOMETABLENAME--项file://SOMETABLENAME.json


  • DynamoDB发布了一项新功能,可以将数据导出到S3存储桶。这是一个本机、无服务器的解决方案,可根据需要通过CLI使用-请参阅:

    这将帮助您在不进行中间扫描的情况下实现#1,但不幸的是,截至2020年11月,没有本机导入功能将其导入到新表

    如果您感兴趣的只是从一个表到另一个表获取数据,则可以使用PiTR:


    您可以使用aws dynamodb扫描导出数据

    aws dynamodb scan --table-name table_name --region aws_region_name --max-items max_items --output json > ./export.json
    
    然而,DynamoDB在单个请求中检索的数据量有1MB的限制。如果扫描达到1MB限制,它将在响应中返回“NextToken”键。 您需要使用NextToken再次扫描它,直到所有数据都已导出

    aws dynamodb scan --table-name table_name --region aws_region_name --max-items max_items --starting-token nextToken --output json > ./export2.json
    
    关于导入,BatchWriteItem最多可以写入16 MB或25个put或delete请求。您可以将max_项设置为25或使用jq拆分它

    您可以通过jq将json转换为BatchWriteItem cli

    cat filepath | jq "{\"table_name\": [.[] | {PutRequest: {Item: .}}]}" > BatchWriteItem.txt
    
    最后,您可以使用cmd将命令插入到dynamodb

    aws dynamodb batch-write-item --request-items file://filepath
    
    如果数据量很大,最好使用shell脚本。 更多详情:


    最好的解决方案是AWS数据管道,如果支持该地区

    我不确定问题是什么。看起来您已经找到了使用AWS CLI导出表的命令行(使用
    AWS dynamodb scan
    ),以及使用
    AWS dynamodb put项导出表的命令行。你只是想确认一下吗?这里只有AWS Cli帮不了你,因为scan会返回json,记录有限,所以你想导出整个表,然后你需要创建脚本,迭代并将数据存储在本地文件中,而这个链接可能会回答这个问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-更新了脚本的重要部分。谢谢你的提醒