コンサルでデータサイエンティスト

仕事でPythonを書いてます。機械学習、Webマーケティングに興味があります。趣味は旅です。

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

テーブルを作成します。

f:id:hktech:20180929003641p:plain


今回はセンサーの出力値を格納するテーブルを作成していきます。

f:id:hktech:20180929003814p:plain


プライマリキーは必須項目ですが、RDBMSとは異なり残りのカラム名を指定する必要がありません。テーブル名、プライマリキーはそれぞれ次のように設定します。

  • テーブル名: sensor_value
  • プライマリキー: id

Python を使ってDynamoDBにJSONデータをインポートする

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マネジメントコンソールにアクセスし、データがちゃんと入っていることを確認できました。

f:id:hktech:20180929003944p:plain

まとめ

Pythonを使ってDynamoDBにJSONデータをアップロードする手順についてご紹介しました。大量のデータをPythonスクリプトで一気にアップロードしたいときに使ってみてはいかがでしょうか。