DynamoDBのSet型でデータの数が0個になったとき、Attribute自体が残るか消えるか確認してみた

DynamoDBのSet型でデータの数が0個になったとき、Attribute自体が残るか消えるか確認してみた

Attribute自体が消えました。
Clock Icon2024.10.16

DynamoDBにはSet型があります。このSet型のデータを削除したとき、データの数が0個になったらどうなるんだ?と気になったので、試してみました。

おすすめの方

  • DynamoDBのSet型でデータの数が0個になったときの動作を知りたい方
  • DynamoDBのSet型でデータを削除したい方

適当なDynamoDBテーブルを用意する

次のDynamoDBテーブルを作成します。

  • Name: set-test-table
  • PK: itemId
aws dynamodb create-table \
    --table-name set-test-table \
    --attribute-definitions AttributeName=itemId,AttributeType=S \
    --key-schema AttributeName=itemId,KeyType=HASH \
    --billing-mode PAY_PER_REQUEST

DynamoDBでSet型のデータを追加する

Set型のデータを追加するスクリプト

add.py
import boto3

table = boto3.resource("dynamodb").Table("set-test-table")

def main() -> None:
    put(
        {
            "itemId": "item1",
            "tags": {
                "Apple",
                "Banana",
            },
        }
    )

    add("item1", {"Cherry", "Durian"})

def put(item: dict) -> None:
    table.put_item(Item=item)

def add(item_id: str, tags: set[str]) -> None:
    table.update_item(
        Key={"itemId": item_id},
        UpdateExpression="ADD #tags :tags",
        ExpressionAttributeNames={"#tags": "tags"},
        ExpressionAttributeValues={":tags": tags},
    )

if __name__ == "__main__":
    main()

実行すると、tagsに4つのデータがある

01_dynamodb

DynamoDBでSet型のデータを削除する

では、次にset型のデータ4つを「DELETE」ですべて削除します。REMOVEではありません。

Set型のデータを削除するスクリプト

delete.py
import boto3

table = boto3.resource("dynamodb").Table("set-test-table")

def main() -> None:
    delete("item1", {"Apple", "Banana", "Cherry", "Durian"})

def delete(item_id: str, tags: set[str]) -> None:
    table.update_item(
        Key={"itemId": item_id},
        UpdateExpression="DELETE #tags :tags",
        ExpressionAttributeNames={"#tags": "tags"},
        ExpressionAttributeValues={":tags": tags},
    )

if __name__ == "__main__":
    main()

実行すると、tagsが消えた

tagsのデータが消えましたが、tags自体も無くなりました。tags自体は残ると思っていたので、個人的には予想外の結果です。

11_dynamodb

12_dynamodb

さいごに

DynamoDBのSet型でデータの数が0個になったとき、Attribute自体が消えました。

参考

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.