AWS - 导入JSON文件以加载Dynamo表

21

我有一个 JSON 文件,想要使用它来加载我的 AWS Dynamo 表。在 AWS 控制台中,只有一个一次创建记录的选项。这不好 :)。

实际上,我的 .JSON 文件是一个对象数组,其中包含表中每个列的数据,例如:

{
    "Column1": "Column1 Value",
    "Column2": "Column2 Value",
    "Column3": "Column3 Value",
    "Column4": "Column4 Value",
  },

有没有通过AWS控制台导入我的JSON文件的方式来完成这个操作?还是说我必须使用AWS JS SDK编程来实现?

4个回答

18

E.J. Brennan的回答对于单个记录似乎是正确的,但它并没有回答原问题(需要添加一组记录)。

对于这个问题,命令如下:

aws dynamodb batch-write-item --request-items file://aws-requests.json

但是,您需要制作一个修改后的JSON文件,如下所示(注意指定数据类型的DynamoDB JSON):

{
    "YourTableName": [
        {   
            "PutRequest": {
                "Item": { 
                    "Column1": { "S": "Column1 Value" },
                    "Column2": { "S": "Column2 Value" },
                    "Column3": { "S": "Column3 Value" },
                    "Column4": { "S": "Column4 Value" },
                }
            }
        },
        {
            "PutRequest": {
                "Item": { 
                    "Column1": { "S": "Column1 Value" },
                    "Column2": { "S": "Column2 Value" },
                    "Column3": { "S": "Column3 Value" },
                    "Column4": { "S": "Column4 Value" },
                }
            }
        }
    ]
}

3
你好,我看到这个解决方案允许每个批量写入项目请求最多25次写入。这可能很重要,需要让人们知道(我刚试了1600次) :) - Ash Oldershaw

13

谢谢!是的,我必须调整JSON,但它起作用了。 - 29er
@29er,你能告诉我们你是如何调整JSON的吗?从文档中我了解到item.json文件仅包含一个项目。你是否能够从单个item.json文件中加载一系列项目?这就是问题所在,不是吗? - Costin
5
嗨,是的,我修改了JSON后,我使用了aws dynamodb batch-write-item --table-name mytable --request-items file://TableItems.json - 29er
1
仅澄清一下,我们遵循的是此处的说明:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithItems.html - 29er
2
但是,你调整后的JSON长什么样子,@29er? - theineffablebob
1
@29er,你的意思是使用“put-item”的答案是不正确的吗? - NealeU

1
我在Python中使用了boto3来加载数据。
import boto3
import json

dynamodbclient=boto3.resource('dynamodb')
sample_table = dynamodbclient.Table('ec2metadata')

with open('/samplepath/spotec2interruptionevent.json', 'r') as myfile:
    data=myfile.read()

# parse file
obj = json.loads(data)

#instance_id and cluster_id is the Key in dynamodb table 

    response=sample_table.put_item(
                              Item={
                                  'instance_id': instanceId,
                                  'cluster_id': clusterId,
                                  'event':obj

                              }
                              )

这是一个关于JavaScript的示例:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Js.02.html#GettingStarted.Js.02.02


0
上面的代码不会读取单个的JSON对象,如果您想从一个包含多个对象的JSON文件中读取,可以使用以下代码:
import boto3
import json

dynamodbclient=boto3.resource('dynamodb')
sample_table = dynamodbclient.Table('ec2metadata')

with open('/samplepath/spotec2interruptionevent.json', 'r') as myfile:
    data=myfile.read()

# parse file
objects = json.loads(data)

#instance_id and cluster_id is the Key in dynamodb table 

   for object in objects:
       instance_id = object["instance_id"]
       cluster_id =  object["cluster_id"]
       sample_table.put_item=(item=object)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接