У меня есть тестовая таблица DynamodB, описанная таким образом:
"Table": {
"AttributeDefinitions": [
{
"AttributeName": "p_key",
"AttributeType": "S"
},
{
"AttributeName": "s_key",
"AttributeType": "S"
}
],
"TableName": "test_table",
"KeySchema": [
{
"AttributeName": "p_key",
"KeyType": "HASH"
},
{
"AttributeName": "s_key",
"KeyType": "RANGE"
}
],
"TableStatus": "ACTIVE",
"CreationDateTime": 1582577061.111,
"ProvisionedThroughput": {
"NumberOfDecreasesToday": 0,
"ReadCapacityUnits": 5,
"WriteCapacityUnits": 5
},
"TableSizeBytes": 0,
"ItemCount": 0,
"TableArn": "arn:aws:dynamodb:us-west-2:XXXXXX:table/test_table",
"TableId": "e5a518fc-4411-4218-b7ff-XXXXXX"
}
}
Я пытаюсь выполнить sh запрос put_item и проверяю наличие другого неиндексного значения. В таблице, описанной выше, допустим, у меня есть элемент:
"Items": [
{
"p_key": {
"S": "test"
},
"s_key": {
"S": "0"
},
"test_value": {
"N": "123"
}
}
],
"Count": 1,
"ScannedCount": 1,
"ConsumedCapacity": null
}
Я хочу создать новый элемент с новым ключом сортировки (s_key), только если он не имеет уже существующего значения в базе данных. , Итак, я попробовал следующее:
aws dynamodb put-item \
--item '{"p_key": {"S":"test"}, "s_key": {"S": "1"}, "test_value":{"N":"123"}}' \
--table-name test_table \
--condition-expression "#tv <> :v" \
--expression-attribute-values '{":v":{"N":"123"}}' \
--expression-attribute-names '{"#tv":"test_value"}'
Но условие не соответствует и запись записывается. Подобные тесты, но с сортировкой или ha sh keep, по-видимому, эффективно предотвращают запись.
Может кто-нибудь указать, что мне не хватает?