非常に馬鹿げた質問かもしれませんが、私は 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 を使用して、キー以外の属性を更新できます。
ドキュメントには、「そのテーブル上の任意のインデックスのインデックス キー属性である属性」の任意の属性を更新できると記載されています。つまり、インデックスに投影される属性を更新すると、それがそのインデックス キーの一部であっても、そのインデックスも元の項目を反映するように更新されます。