DynamoDBのItemを一度に削除する(batch-write-item)


DynamoDBのItemを一度に削除する方法です。 batch-write-item を使うことで一度に削除することができます。 今回はLocalStackで試したので、--endpoint-url オプションを使用しています。 AWSの場合は最後の行を除いて実行してください。

テーブルを作成

pokemon-table という名前でテーブルを作成します。 プライマリーキーに pokemonID を指定します。

$ aws dynamodb create-table \
    --table-name pokemon-table \
    --attribute-definitions AttributeName=pokemonID,AttributeType=S \
    --key-schema AttributeName=pokemonID,KeyType=HASH \
    --provisioned-throughput ReadCapacityUnits=1,WriteCapacityUnits=1 \
    --endpoint-url=http://localhost:4566

Itemの追加

Snorlax, Ditto, Pikachu, Eevee の4つのItemを追加します。

$ aws dynamodb put-item \
    --table-name pokemon-table \
    --item '{"pokemonID": {"S": "Snorlax"}}' \
    --endpoint-url=http://localhost:4566 | jq
$ aws dynamodb put-item \
    --table-name pokemon-table \
    --item '{"pokemonID": {"S": "Ditto"}}' \
    --endpoint-url=http://localhost:4566 | jq
$ aws dynamodb put-item \
    --table-name pokemon-table \
    --item '{"pokemonID": {"S": "Pikachu"}}' \
    --endpoint-url=http://localhost:4566 | jq
$ aws dynamodb put-item \
    --table-name pokemon-table \
    --item '{"pokemonID": {"S": "Eevee"}}' \
    --endpoint-url=http://localhost:4566 | jq

テーブルの中のItemをすべて表示

4つのItemがあることがわかります。

$ aws dynamodb scan \
    --table-name pokemon-table \
    --endpoint-url=http://localhost:4566 | jq

Itemを一度に削除する

batch-write-item を使い、Itemを一度に削除します。

$ aws dynamodb batch-write-item \
  --request-items '{"pokemon-table":[{"DeleteRequest":{"Key":{"pokemonID":{"S":"Snorlax"}}}},{"DeleteRequest":{"Key":{"pokemonID":{"S":"Ditto"}}}},{"DeleteRequest":{"Key":{"pokemonID":{"S":"Pikachu"}}}},{"DeleteRequest":{"Key":{"pokemonID":{"S":"Eevee"}}}}]}' \
  --endpoint-url=http://localhost:4566 | jq

--request-items のJSONの内容はこちらです。

{
   "pokemon-table":[
      {
         "DeleteRequest":{
            "Key":{
               "pokemonID":{
                  "S":"Snorlax"
               }
            }
         }
      },
      {
         "DeleteRequest":{
            "Key":{
               "pokemonID":{
                  "S":"Ditto"
               }
            }
         }
      },
      {
         "DeleteRequest":{
            "Key":{
               "pokemonID":{
                  "S":"Pikachu"
               }
            }
         }
      },
      {
         "DeleteRequest":{
            "Key":{
               "pokemonID":{
                  "S":"Eevee"
               }
            }
         }
      }
   ]
}

テーブルの中のItemをすべて表示

Itemが全て消えていることを確認します。

$ aws dynamodb scan \
    --table-name pokemon-table \
    --endpoint-url=http://localhost:4566 | jq

参考

batch-write-item