アプリとサービスのすすめ

アプリやIT系のサービスを中心に書いていきます。たまに副業やビジネス関係の情報なども気ままにつづります

DynamoDB操作メモ with「NoSQL Workbench」

MLopsのデータパイプライン用にAWSCLIでDynamoDBにtableを作る。

その後、テーブル内のデータを、「NoSQL Workbench」のツールでlocal PCからcsvでtableデータをoutputするまで。


「NoSQL Workbench」はアクセスキーでローカルPCからDynamoDBを操作できる便利なツール。

AmazonRDS(データベース)とDBeaverSQLツール)とのほぼ関係と同じ


目次
1. テーブル名、プライマリキー、ソートキー
2. DynamoDBにAWSCliでテーブルを作り、データを格納する
3. 「NoSQL Workbench」でDynamoDBをlocalPCで操作


1. テーブル名、プライマリキー、ソートキー

テーブル名:wx_data
プライマリキー:sample_time (Number)
ソートキー:device_id(Number)


2. DynamoDBにAWSCLIでテーブルを作り、データを格納する

$ aws --version
# aws-cli/2.11.4 Python/3.11.2 Darwin/22.2.0 exe/x86_64 prompt/off

table作成

TABLE_NAME=wx_data
PRIMARY=sample_time
SOTEDKEY=device_id
$ aws dynamodb create-table \
    --table-name $TABLE_NAME \
    --attribute-definitions \
        AttributeName=$PRIMARY,AttributeType=N \
        AttributeName=$SOTEDKEY,AttributeType=N \
    --key-schema \
        AttributeName=$PRIMARY,KeyType=HASH \
        AttributeName=$SOTEDKEY,KeyType=RANGE \
    --provisioned-throughput \
        ReadCapacityUnits=5,WriteCapacityUnits=5 \
    --table-class STANDARD
# output
{
    "TableDescription": {
        "AttributeDefinitions": [
            {
                "AttributeName": "device_id",
                "AttributeType": "N"
            },
            {
                "AttributeName": "sample_time",
                "AttributeType": "N"
            }
        ],
        "TableName": "wx_data",
        "KeySchema": [
            {
                "AttributeName": "sample_time",
                "KeyType": "HASH"
            },
            {
                "AttributeName": "device_id",
                "KeyType": "RANGE"
            }
        ],
        "TableStatus": "CREATING",
        "CreationDateTime": "2023-03-23T22:51:58.012000+09:00",
        "ProvisionedThroughput": {
            "NumberOfDecreasesToday": 0,
            "ReadCapacityUnits": 5,
            "WriteCapacityUnits": 5
        },
        "TableSizeBytes": 0,
        "ItemCount": 0,
        "TableArn": "arn:aws:dynamodb:ap-northeast-1:*******:table/wx_data",
        "TableId": "ea291b1a-4875-434c-af3f-13f5c43ca5f7",
        "TableClassSummary": {
            "TableClass": "STANDARD"
        },
        "DeletionProtectionEnabled": false
    }
}

tableの確認

# tableの確認
$ aws dynamodb describe-table --table-name wx_data | grep TableStatus
#  "TableStatus": "ACTIVE"

# if table is ACTIVE, point-in-time recovery 
$ aws dynamodb update-continuous-backups --table-name wx_data --point-in-time-recovery-specification PointInTimeRecoveryEnabled=true

# {
#    "ContinuousBackupsDescription": {
#        "ContinuousBackupsStatus": "ENABLED",
#        "PointInTimeRecoveryDescription": {
#            "PointInTimeRecoveryStatus": "ENABLED",
 #           "EarliestRestorableDateTime": "2023-03-23T22:54:04+09:00",
 #           "LatestRestorableDateTime": "2023-03-23T22:54:04+09:00"
 #       }
 #   }
#}

***point-in-time リカバリとは、特定の時点までのデータ変更のリカバリのこと。 一般に、この種類のリカバリは、サーバーをバックアップが行われた時点の状態にする完全バックアップのリストア後に実行される

tableにデータを書き込む

$ aws dynamodb put-item \
    --table-name wx_data  \
    --item '{"sample_time": {"N": "128"}, "device_id": {"N": "888"}, "temperature": {"N": "28"}, "humidity": {"N": "80"}}'


データのcheck

$ aws dynamodb get-item --consistent-read \
    --table-name wx_data \
    --key '{ "sample_time": {"N": "128"}, "device_id": {"N": "888"}}'

>>>
{
    "Item": {
        "device_id": {
            "N": "888"
        },
        "humidity": {
            "N": "80"
        },
        "sample_time": {
            "N": "128"
        },
        "temperature": {
            "N": "28"
        }
    }
}


tableの削除

$ aws dynamodb delete-table --table-name wx_data

3.「NoSQL Workbench」でDynamoDBをlocalPCで操作

docs.aws.amazon.com

「NoSQL Workbench」のDownload


NoSQL Workbench」にawsのアクセスキーとシークレットキーを入力して、login。

Installし終わった。


tableデータをcsvとしてoutput
さっき作ったtable「wx_data」を確認できたので、tableデータをcsvにoutput。

Amazon DynamoDBで「Launch」


「Operation builder」 で Region is が「ap-northeast-1]」。
さっき作ったtable「wx_data」を確認できた。

「Expand to CSV」でtableデータをcsvにoutput。



References

Getting started with DynamoDB
2022/3 NoSQL Workbenchで始めるDynamoDB設計