Pythonを使ってDynamoDBにJSONデータをインポート(アップロード)する
Pythonを使って、AWSを代表するNoSQLデータベースであるDynamoDBにJSONデータをインポート(アップロード)する手順およびスクリプトについてご紹介します。
目次
DynamoDBのテーブルを作成する
DynamoDBはNoSQLであるため、テーブル設計時にスキーマを定義する必要がありません。この辺りについては、NoSQLに関する記事でまとめましたので確認してみてください。
hktech.hatenablog.com
AWSにサインインし、DynamoDBマネジメントコンソールにアクセスします。
https://ap-northeast-1.console.aws.amazon.com/dynamodb/home
テーブルを作成します。
今回はセンサーの出力値を格納するテーブルを作成していきます。
プライマリキーは必須項目ですが、RDBMSとは異なり残りのカラム名を指定する必要がありません。テーブル名、プライマリキーはそれぞれ次のように設定します。
- テーブル名: sensor_value
- プライマリキー: id
Python を使ってDynamoDBにJSONデータをインポートする
PythonによるDynamoDBへのデータインポート方法について説明します。
まず、JSON形式のリストデータsensor_data.jsonを用意します。
[{"id": "data_000001", "value": "20"}, {"id": "data_000002", "value": "30"}]
aws_access_key_id, aws_secret_access_keyの中身をそれぞれの環境に合わせて変更し、次のプログラムを実行します。
from boto3.session import Session from decimal import Decimal import json def get_dynamo_table(key_id, access_key, table_name): session = Session( aws_access_key_id=key_id, aws_secret_access_key=access_key, region_name='ap-northeast-1' ) dynamodb = session.resource('dynamodb') dynamo_table = dynamodb.Table(table_name) return dynamo_table def insert_data_from_json(table, input_file_name): with open(input_file_name, "r") as f: json_data = json.load(f) with table.batch_writer() as batch: for record in json_data: record["value"] = Decimal("{}".format(record["value"])) # テーブル側で数値型を指定している場合はこのような処理が必要 batch.put_item(Item=record) print('Successfully inserted data.') if __name__ == '__main__': aws_access_key_id='idhogehoge' aws_secret_access_key='keyhogehoge' input_file_name = './sensor_data.json' dynamo_table = get_dynamo_table(aws_access_key_id, aws_secret_access_key, 'sensor_value') insert_data_from_json(dynamo_table, input_file_name)
DynamoDBマネジメントコンソールにアクセスし、データがちゃんと入っていることを確認できました。