DynamoDB テーブルの範囲キーの値を変更することは可能ですか? 質問する

DynamoDB テーブルの範囲キーの値を変更することは可能ですか? 質問する

非常に馬鹿げた質問かもしれませんが、私は DynamoDB を初めて使用します。

私の疑問は、DynamoDB で範囲キーの値を更新できるかどうかです。

私のテーブルが「TEST」だとします

{
ID : PK/HK
Date : RK
Name : GSI 
Add : LSI
}

属性を変更したいですDate

表の初期値は次のとおりです:

{
ID = "344"
Date = "5656"
Name = "ABC"
}

Name以下のコードを実行します。GSIである属性を変更することができます。

Map<String,AttributeValue> item = new HashMap<String,AttributeValue>();
item.put("ID", new AttributeValue("344"));
item.put("Date", new AttributeValue("5656"));

Map<String,AttributeValueUpdate> item1 = new HashMap<String,AttributeValueUpdate>();

AttributeValueUpdate update = new AttributeValueUpdate().withValue(new AttributeValue("AMIT")).withAction("PUT");
item1.put("Name", update);


UpdateItemRequest updateItemreq = new UpdateItemRequest("Test",item,item1);
UpdateItemResult updateItemres = dynamoDBUSEast.updateItem(updateItemreq);

しかしこの行を変更すると

item1.put("Name", update);

 item1.put("Date", update);

エラーが発生しています

Exception in thread "main" com.amazonaws.AmazonServiceException: One or more parameter values were invalid: Cannot update attribute Date. This attribute is part of the key (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: HRRP24Q7C48AMD8ASAI992L6MBVV4KQNSO5AEMVJF66Q9ASUAAJG)
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:820)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:439)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:245)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:2908)
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:1256)

では、範囲キーの値を変更することは可能ですか?

ベストアンサー1

いいえ、例外メッセージに記載されているとおり、あなたはCannot update attribute Date. This attribute is part of the key.

これは、AttributeUpdatesドキュメンテーション:

変更する属性の名前、各属性に対して実行するアクション、および各属性の新しい値。そのテーブル上の任意のインデックスのインデックス キー属性である属性を更新する場合、属性タイプは、テーブルの説明の AttributesDefinition で定義されているインデックス キー タイプと一致する必要があります。UpdateItem を使用して、キー以外の属性を更新できます。

ドキュメントには、「そのテーブル上の任意のインデックスのインデックス キー属性である属性」の任意の属性を更新できると記載されています。つまり、インデックスに投影される属性を更新すると、それがそのインデックス キーの一部であっても、そのインデックスも元の項目を反映するように更新されます。

おすすめ記事