DynamoDBのUpdate Expressions

Update Expressionsを使用することで、値で更新するだけでなく、設定したExpressionによって評価した結果で更新することができる。

DynamoDBでTTL属性名を指定する

たとえば、統計情報をカウントアップし、最終更新日やTTL属性を設定する場合の例。
この例ではキーはstats_namestats_countが加算したい値。
ExpressionAttributeValuesで定義した値を使用し、UpdateExpressionでADDとSETを使用して更新している。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
stats_name = "namename"
stats_count = 5
last_update_time = "HH:MM:DD"
expire_at = epoc_time

table.update_item(
Key={
'stats_name': stats_name,
},
ExpressionAttributeValues={
':stats_count_up': stats_count,
':set_last_update': last_update_time,
':set_expire_at': expire_at
},
UpdateExpression="""
ADD stats_count :stats_count_up
SET last_update = :set_last_update, expire_at = :set_expire_at
"""
)

ADDとSET

ADDでは既存の型がINTEGERなら加算する。既存の値の型によって挙動が異なる。
SETは上書き保存になる。

Adds the specified value to the item, if the attribute does not already exist. If the attribute does exist, then the behavior of ADD depends on the data type of the attribute:

If the existing attribute is a number, and if Value is also a number, then Value is mathematically added to the existing attribute. If Value is a negative number, then it is subtracted from the existing attribute.