Метод UpdateItem
Статья создана
Обновлена 12 июля 2022 г.
Обновляет атрибуты существующего элемента или добавляет новый элемент, если он не существует. Можно менять, удалять или добавлять значения атрибутов.
Можно задать условие для изменения. Тогда метод отработает только в том случае, если условие выполнится.
В ответе можно получить значения атрибутов, которые были до или после изменения.
Запрос
Запрос содержит данные в формате JSON.
{
"AttributeUpdates": {
"string" : {
"Action": "string",
"Value": {
"B": blob,
"BOOL": boolean,
"BS": [ blob ],
"L": [
"AttributeValue"
],
"M": {
"string" : "AttributeValue"
},
"N": "string",
"NS": [ "string" ],
"NULL": boolean,
"S": "string",
"SS": [ "string" ]
}
}
},
"ConditionExpression": "string",
"Expected": {
"string" : {
"AttributeValueList": [
{
"B": blob,
"BOOL": boolean,
"BS": [ blob ],
"L": [
"AttributeValue"
],
"M": {
"string" : "AttributeValue"
},
"N": "string",
"NS": [ "string" ],
"NULL": boolean,
"S": "string",
"SS": [ "string" ]
}
],
"ComparisonOperator": "string",
"Exists": boolean,
"Value": {
"B": blob,
"BOOL": boolean,
"BS": [ blob ],
"L": [
"AttributeValue"
],
"M": {
"string" : "AttributeValue"
},
"N": "string",
"NS": [ "string" ],
"NULL": boolean,
"S": "string",
"SS": [ "string" ]
}
}
},
"ExpressionAttributeNames": {
"string" : "string"
},
"ExpressionAttributeValues": {
"string" : {
"B": blob,
"BOOL": boolean,
"BS": [ blob ],
"L": [
"AttributeValue"
],
"M": {
"string" : "AttributeValue"
},
"N": "string",
"NS": [ "string" ],
"NULL": boolean,
"S": "string",
"SS": [ "string" ]
}
},
"Key": {
"string" : {
"B": blob,
"BOOL": boolean,
"BS": [ blob ],
"L": [
"AttributeValue"
],
"M": {
"string" : "AttributeValue"
},
"N": "string",
"NS": [ "string" ],
"NULL": boolean,
"S": "string",
"SS": [ "string" ]
}
},
"ReturnConsumedCapacity": "string",
"ReturnValues": "string",
"TableName": "string",
"UpdateExpression": "string"
}
Параметры
Параметр | Описание |
---|---|
Key |
Первичный ключ изменяемого элемента, необходимо указать все ключевые атрибуты. Для простого первичного ключа нужно указать только его значение. Для составного первичного ключа нужно указать значение ключа раздела и ключа сортировки. Тип: ассоциативный массив типа AttributeValue .Длина: 1 - 65535 символов. Обязательно: Да |
TableName |
Имя таблицы, в которой находится изменяемый элемент.Может содержать путь в иерархии каталогов вида path/to/table. Тип: Строка Длина: 3 - 255 символов Шаблон: [a-zA-Z0-9_.-]+ Обязательно: Да |
ConditionExpression |
Условие для обновления элемента. Метод обработает только в том случае, если условие выполнится. Условие состоит из:
Тип: Строка Обязательно: Нет |
ExpressionAttributeNames |
Заполнитель (placeholder), который можно использовать в выражении вместо имени атрибута. Заполнитель должен начинаться с символа решетки # .В каких случаях это может пригодиться:
Percentile конфликтует с зарезервированным словом, и его нельзя в явном виде использовать в выражении. Чтобы обойти эту проблему, нужно в параметре ExpressionAttributeNames указать заполнитель: {"#P":"Percentile"} . И затем вместо настоящего имени атрибута использовать #P .Тип: Строка Длина: 1 - 65535 символов. Обязательно: Нет |
ExpressionAttributeValues |
Заполнитель (placeholder), который можно использовать в выражении вместо значения атрибута, аналогично ExpressionAttributeNames . Заполнитель должен начинаться с символа двоеточия : .Например, нужно проверить, было ли значение атрибута ProductStatus одним из следующих: Available | Backordered | Discontinued . Для этого сначала объявить заполнители : { ":avail":{"S":"Available"}, ":back":{"S":"Backordered"}, ":disc":{"S":"Discontinued"} } . А потом их можно использовать в выражении: ProductStatus IN (:avail, :back, :disc) Тип: Строка типа AttributeValue Обязательно: Нет |
ReturnConsumedCapacity |
Нужно ли возвращать информацию о потребляемой мощности.
Тип: Строка Возможные значения: TOTAL | NONE Обязательно: Нет |
ReturnValues |
Используется, если нужно получить атрибуты элемента до или после изменения. Возможные значения:
Возвращенные значения строго согласованы. Тип: Строка Возможные значения: NONE | ALL_OLD | UPDATED_OLD | ALL_NEW | UPDATED_NEW Обязательно: Нет |
UpdateExpression |
Выражение для обновления. Определяет, как и какие атрибуты нужно обновить. Доступные действия:
SET a=:value1, b=:value2 DELETE :value3, :value4, :value5 Тип: Строка Обязательно: Нет |
Ответ
В случае успеха вернется HTTP с кодом 200.
Запрос возвращает данные в формате JSON.
{
"Attributes": {
"string" : {
"B": blob,
"BOOL": boolean,
"BS": [ blob ],
"L": [
"AttributeValue"
],
"M": {
"string" : "AttributeValue"
},
"N": "string",
"NS": [ "string" ],
"NULL": boolean,
"S": "string",
"SS": [ "string" ]
}
},
"ConsumedCapacity": {
"CapacityUnits": number,
"GlobalSecondaryIndexes": {
"string" : {
"CapacityUnits": number,
"ReadCapacityUnits": number,
"WriteCapacityUnits": number
}
},
"LocalSecondaryIndexes": {
"string" : {
"CapacityUnits": number,
"ReadCapacityUnits": number,
"WriteCapacityUnits": number
}
},
"ReadCapacityUnits": number,
"Table": {
"CapacityUnits": number,
"ReadCapacityUnits": number,
"WriteCapacityUnits": number
},
"TableName": "string",
"WriteCapacityUnits": number
}
}
Параметры
Параметр | Описание |
---|---|
Attributes |
Ассоциативный массив типа AttributeValue , который содержит представление элемента до или после его изменения.Возвращается только в том случае, если в запросе был указан параметр ReturnValues со значением ≠ NONE .Тип: Ассоциативный массив типа AttributeValue Длина: 1 - 65 535 символов. |
ConsumedCapacity |
Единицы мощности, потребленные операцией удаления. Возвращается только в том случае, если в запросе был указан параметр ReturnConsumedCapacity со значением TOTAL .Тип: объект типа ConsumedCapacity |
Ошибки
Параметр | Описание |
---|---|
ConditionalCheckFailedException |
Невозможно проверить условие, указанное в операции. Код состояния HTTP: 400 |
InternalServerError |
Произошла внутренняя ошибка на стороне сервера. Код состояния HTTP: 500 |
ProvisionedThroughputExceededException |
Вы слишком часто отправляете запросы. Попробуйте увеличить интервалы между запросами. Если таких запросов будет не слишком много, Managed Service for YDB постарается обработать их все. Код состояния HTTP: 400 |
RequestLimitExceeded |
Пропускная способность превышает квоту. Код состояния HTTP: 400 |
ResourceNotFoundException |
Указанная таблица не существует, или находится в состоянии не 'ACTIVE'. Код состояния HTTP: 400 |
TransactionConflictException |
Операция отклонена, так как для элемента выполняется другая транзакция. Код состояния HTTP: 400 |
Также могут возникать Общие ошибки, одинаковые для всех методов.