Próbuję użyć nowego Amazon DynamoDB JSON API, aby dodać/zastąpić pary klucz-wartość w atrybucie JSON o nazwie "document". Idealnie, chciałbym po prostu uporządkować moje wywołania zapisu, aby wysłać pary KV, aby dodać do atrybutu, i aby Dynamo utworzył atrybut, jeśli jeszcze nie istnieje dla danego klucza podstawowego. Jednakże gdy próbuję to z zaledwie prosty UpdateItemSpec
:Interfejs API DynamoDB: Jak mogę utworzyć żądanie "Dodaj atrybut JSON, jeśli nie jest obecny"?
PrimaryKey primaryKey = new PrimaryKey("key_str", "mapKey");
ValueMap valuesMap = new ValueMap().withLong(":a", 1234L).withLong(":b", 1234L);
UpdateItemSpec updateSpec = new UpdateItemSpec().withPrimaryKey(primaryKey).withUpdateExpression("SET document.value1 = :a, document.value2 = :b");
updateSpec.withValueMap(valuesMap);
table.updateItem(updateSpec);
uzyskać com.amazonaws.AmazonServiceException: The document path provided in the update expression is invalid for update
, czyli DynamoDB nie mógł znaleźć dany atrybut o nazwie „dokument”, do którego należy zastosować tę aktualizację.
udało mi się zbliżyć tę funkcjonalność z serii rozmów:
try {
// 1. Attempt UpdateItemSpec as if attribute already exists
} catch (AmazonServiceException e) {
// 2. Confirm the exception indicated the attribute was not present, otherwise rethrow it
// 3. Use a put-if-absent request to initialize an empty JSON map at the attribute "document"
// 4. Rerun the UpdateItemSpec call from the above try block
}
To działa, ale jest mniej niż idealna, ponieważ będzie to wymagało 3 wywołań DynamoDB każdym razem dodać nowy klucz podstawowy do stół. Eksperymentowałem trochę z funkcją attribute_not_exists
, którą można użyć w Update Expressions, ale nie udało mi się jej uruchomić tak, jak chcę.
Każdy guru Dynama ma jakieś pomysły na to, jak/czy można to zrobić?
Naprawdę chciałbym zobaczyć kod tutaj, ponieważ stoję przed tym samym wyzwaniem. DynamoDB API uderza mnie naiwnością. –
Czy masz pomysł, czy ta odpowiedź jest nadal aktualna? (mając nadzieję, że coś zmienili od 2014 r.) – Nadine