Open1

DynamoDB

ChiHaRuChiHaRu

既存テーブルに複数データを登録する

(1) コンソールからPartiQL

実行クエリ
INSERT INTO "orders" value {'userId' : '00030','orderdate' : '2023/10/28'}
INSERT INTO "orders" value {'userId' : '00031','orderdate' : '2023/10/28'}

複数insertはできない

1クエリずつならいける

実行したいクエリを選択して「実行」でもOK

※公式にもそう書いてある

一度に挿入できる項目は 1 つだけです。1 つの DynamoDB PartiQL ステートメントを発行して、複数の項目を挿入することはできません。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/ql-reference.insert.html

所感

  • いちいちコピペ or 対象insert文を選択して実行するのはわりと不便。。

(2) dyneinを使う

[参考]
公式
https://github.com/awslabs/dynein

Zenn dyneinについて書かれた記事
https://zenn.dev/watany/articles/c0a05d9c8f12f5

csv取り込みもできて便利だが、少なくとも文字列取り込みでは

  • ヘッダが必要で、囲み文字をつけてはいけない
  • ボディはダブルクォーテーション必要
    ことがわかった
実行コマンド
dy import --table orders --format csv --input-file hoge.csv

OKなパターン

ok.csv
userId,orderdate
"181","2023/10/2"
"191","2023/10/28"
"201","2023/10/28"

ボディーにダブルクォーテーションなしはダメ

ng1.csv
userId,orderdate
181,2023/10/2
191,2023/10/28
201,2023/10/28

ヘッダにダブルクォーテーション付きもダメ

ng2.csv
"userId","orderdate"
"181","2023/10/2"
"191","2023/10/28"
"201","2023/10/28"

※そもそもDynamo DBへのCSVからのデフォルトのインポート方式がそうなってるらしい(なんでや
https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/S3DataImport.Format.html

所感

  • PartiQLより幾分楽だが、何かのタイミングでミスしそう。。
    (まぁエラーが出たら整形してやり直せばいいだけですが)
    これもちょっと不便、、

(3) JSON化して、aws cliで取り込む

実行コマンド
aws dynamodb batch-write-item --request-items file://hoge.json
ok.json
{
    "orders": [
        {
            "PutRequest": {
                "Item": {
                    "userId": {
                       "S" : "aab"
                    },
                    "orderdate": {
                       "S" : "29"
                    }
                }
            }
        },
        {
            "PutRequest": {
                "Item": {
                    "userId": {
                       "S" : "bbc"
                    },
                    "orderdate": {
                       "S" : "30"
                    }
                }
            }
        }
    ]
}

※参考※
https://qiita.com/yamamoto_y/items/b9393560a744137a86cb

所感

  • JSON整形のコストはかかるが、一度ツールを作ってしまえば使いまわしがきくので現実的かも。

(4) AWSコンソールの「」よりインポート

そもそも新規テーブル用なので、既存テーブルにはインポートできない。。

※参考※

Amazon S3 のインポートプロセス中に、DynamoDB はインポートされる新しいターゲットテーブルを作成します。既存のテーブルへのインポートは、現在この機能ではサポートされていません。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/S3DataImport.HowItWorks.html

所感

これができれば一番ラクなのですが、、
できるようになってほしい。。

結論

現時点では、

(2) dyneinを使う
もしくは
(3) JSON化して、aws cliで取り込む(ツールを作る)

がいいかな。。