2015-05-18 6 views
11

मुझे पता है कि यह एक बहुत ही मूर्ख सवाल हो सकता है, लेकिन मैं डायनेमो डीबी के लिए नया हूं।क्या डायनेमो डीबी टेबल में रेंज कुंजी का मूल्य बदलना संभव है?

मेरा संदेह यह है कि डायनेमो डीबी में रेंज कुंजी के मान को अपडेट करना संभव है।

मान लीजिए मेरे तालिका "टेस्ट"

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

मैं Date गुण को संशोधित करना चाहते है। तालिका में

प्रारंभिक मान था:

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

नीचे इस कोड चल रहा है। मैं Name विशेषता जो जीएसआई है उसे बदलने में सक्षम हूं।

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); 

लेकिन जब मैं के रूप में

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) 

item1.put("Date", update); 

मैं कुछ त्रुटि हो रही है के साथ इस लाइन

item1.put("Name", update); 

बदल तो क्या यह संभव है रेंज कुंजी बदलने के लिए मूल्य?

+0

इसकी अनूठी कुंजी की तरह बदला नहीं जा सकता –

उत्तर

8

नहीं, अपवाद संदेश राज्यों की तरह, आप Cannot update attribute Date. This attribute is part of the key

तुम भी AttributeUpdates documentation के तहत इस देख सकते हैं:

विशेषताओं के नाम संशोधित करने, कार्रवाई प्रत्येक, और प्रत्येक के लिए नए मूल्य पर प्रदर्शन करने के लिए। यदि आप उस विशेषता को अपडेट कर रहे हैं जो उस तालिका पर किसी भी अनुक्रमणिका के लिए एक इंडेक्स कुंजी विशेषता है, तो विशेषता प्रकार तालिका विवरण के गुणों परिभाषा में परिभाषित इंडेक्स कुंजी प्रकार से मेल खाना चाहिए। आप किसी भी nonkey विशेषताओं को अद्यतन करने के लिए UpdateItem का उपयोग कर सकते हैं।

प्रलेखन कहा गया है कि आप के लिए "एक विशेषता है जो कि मेज पर किसी भी अनुक्रमित के लिए एक सूचकांक प्रमुख विशेषता है", जब आप एक विशेषता है जो एक सूचकांक पर पेश किया है अद्यतन इसका मतलब है कि जो किसी भी विशेषता को अपडेट कर सकते हैं, यहां तक ​​कि यह इंडेक्स कुंजी का हिस्सा है, मूल आइटम को प्रतिबिंबित करने के लिए इंडेक्स भी अपडेट किया जाएगा।

3

यह थोड़ा दफन है लेकिन UpdateItem के लिए दस्तावेज़ों में यह कहता है: "आप किसी भी nonkey विशेषताओं को अद्यतन करने के लिए UpdateItem का उपयोग कर सकते हैं।"

तो, वर्तमान में किसी आइटम की प्राथमिक कुंजी को अपडेट करने का एकमात्र तरीका पुराने आइटम को हटाना और एक नया लिखना है।

7
AttributeValueUpdate

की डॉक्स से

आप UpdateItem उपयोग नहीं कर सकते किसी भी प्राथमिक प्रमुख विशेषताओं को अद्यतन करने के। इसके बजाय, आपको आइटम को हटाने की आवश्यकता होगी, और फिर PutItem का उपयोग पर नए गुणों के साथ एक नया आइटम बनाएं।

संबंधित मुद्दे