本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
TransactWriteItems
TransactWriteItems请求映射文档允许您告诉 D Amazon AppSync ynamoDB 解析器向 DynamoDB TransactWriteItems 请求写入多个项目,可能写入多个表。对于此请求模板,您必须指定以下各项:
-
每个请求项目的目标表名称
-
要执行的每个请求项目的操作。支持四种类型的操作:PutItem、UpdateItemDeleteItem、和 ConditionCheck
-
要写入的每个请求项目的键
DynamoDB TransactWriteItems 限制适用。
TransactWriteItems 映射文档具有以下结构:
{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "table1", "operation": "PutItem", "key": { "foo": ... typed value, "bar": ... typed value }, "attributeValues": { "baz": ... typed value }, "condition": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table":"table2", "operation": "UpdateItem", "key": { "foo": ... typed value, "bar": ... typed value }, "update": { "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value } }, "condition": { "expression": "someExpression", "expressionNames": { "#foo":"foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table3", "operation": "DeleteItem", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } }, { "table": "table4", "operation": "ConditionCheck", "key":{ "foo": ... typed value, "bar": ... typed value }, "condition":{ "expression": "someExpression", "expressionNames": { "#foo": "foo" }, "expressionValues": { ":bar": ... typed value }, "returnValuesOnConditionCheckFailure": true|false } } ] }
TransactWriteItems 字段
- 字段定义如下:
-
-
version -
模板定义版本。仅支持
2018-05-29。该值为必填项。 -
operation -
要执行的 DynamoDB 操作。要执行
TransactWriteItemsDynamoDB 操作,该字段必须设置为TransactWriteItems。该值为必填项。 -
transactItems -
要包含的请求项目。该值是请求项目的数组。必须提供至少一个请求项目。该
transactItems值为必填项。对于
PutItem,字段定义如下:-
table -
目标 DynamoDB 表。该值是表名的字符串。该
table值为必填项。 -
operation -
要执行的 DynamoDB 操作。要执行
PutItemDynamoDB 操作,该字段必须设置为PutItem。该值为必填项。 -
key -
DynamoDB 键,表示要放置的项目的主键。DynamoDB 项目可能具有单个哈希键,也可能具有哈希键和排序键,具体取决于表结构。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该值为必填项。
-
attributeValues -
要放入 DynamoDB 中的项目的其余属性。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该字段是可选的。
-
condition -
根据 DynamoDB 中已有的对象状态,确定请求是否应成功的条件。如果未指定条件,则
PutItem请求将覆盖该项目的任何现有条目。您可以指定在状况检查失败时是否重新检索现有项目。有关事务条件的更多信息,请参阅事务条件表达式。该值为可选项。
对于
UpdateItem,字段定义如下:-
table -
要更新的 DynamoDB 表。该值是表名的字符串。该
table值为必填项。 -
operation -
要执行的 DynamoDB 操作。要执行
UpdateItemDynamoDB 操作,该字段必须设置为UpdateItem。该值为必填项。 -
key -
DynamoDB 键,表示要更新的项目的主键。DynamoDB 项目可能具有单个哈希键,也可能具有哈希键和排序键,具体取决于表结构。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该值为必填项。
-
update -
update部分用于指定一个更新表达式,以描述如何更新 DynamoDB 中的项目。有关如何编写更新表达式的更多信息,请参阅 DynamoDB 文档 UpdateExpressions 。此部分是必需的。 -
condition -
根据 DynamoDB 中已有的对象状态,确定请求是否应成功的条件。如果未指定条件,则
UpdateItem请求将更新现有条目,而不考虑其当前状态。您可以指定在状况检查失败时是否重新检索现有项目。有关事务条件的更多信息,请参阅事务条件表达式。该值为可选项。
对于
DeleteItem,字段定义如下:-
table -
要在其中删除项目的 DynamoDB 表。该值是表名的字符串。该
table值为必填项。 -
operation -
要执行的 DynamoDB 操作。要执行
DeleteItemDynamoDB 操作,该字段必须设置为DeleteItem。该值为必填项。 -
key -
DynamoDB 键,表示要删除的项目的主键。DynamoDB 项目可能具有单个哈希键,也可能具有哈希键和排序键,具体取决于表结构。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该值为必填项。
-
condition -
根据 DynamoDB 中已有的对象状态,确定请求是否应成功的条件。如果未指定条件,则
DeleteItem请求将删除项目,而不考虑其当前状态。您可以指定在状况检查失败时是否重新检索现有项目。有关事务条件的更多信息,请参阅事务条件表达式。该值为可选项。
对于
ConditionCheck,字段定义如下:-
table -
要在其中检查条件的 DynamoDB 表。该值是表名的字符串。该
table值为必填项。 -
operation -
要执行的 DynamoDB 操作。要执行
ConditionCheckDynamoDB 操作,该字段必须设置为ConditionCheck。该值为必填项。 -
key -
DynamoDB 键,表示要检查条件的项目的主键。DynamoDB 项目可能具有单个哈希键,也可能具有哈希键和排序键,具体取决于表结构。有关如何指定“类型化值”的更多信息,请参阅类型系统(请求映射)。该值为必填项。
-
condition -
根据 DynamoDB 中已有的对象状态,确定请求是否应成功的条件。您可以指定在状况检查失败时是否重新检索现有项目。有关事务条件的更多信息,请参阅事务条件表达式。该值为必填项。
-
-
要记住的事项:
-
如果成功,响应中只返回请求项目的键。键的顺序将与请求项目的顺序相同。
-
交易以 all-or-nothing某种方式执行。如果任何请求项目导致错误,则整个交易都不会执行,并返回错误详细信息。
-
不能有两个请求项目针对同一个项目。否则它们会导致TransactionCanceledException错误。
-
如果交易的错误是 TransactionCanceledException,则
cancellationReasons区块将被填充。如果请求项目的条件检查失败且 您没有将returnValuesOnConditionCheckFailure指定为false,则表中存在的项目将被检索并存储在cancellationReasons块的相应位置的item中。 -
TransactWriteItems限制为 100 个请求项目。 -
不支持与冲突检测功能一起使用此操作。两者同时使用可能会导致错误。
对于以下示例请求映射模板:
{ "version": "2018-05-29", "operation": "TransactWriteItems", "transactItems": [ { "table": "posts", "operation": "PutItem", "key": { "post_id": { "S": "p1" } }, "attributeValues": { "post_title": { "S": "New title" }, "post_description": { "S": "New description" } }, "condition": { "expression": "post_title = :post_title", "expressionValues": { ":post_title": { "S": "Expected old title" } } } }, { "table":"authors", "operation": "UpdateItem", "key": { "author_id": { "S": "a1" }, }, "update": { "expression": "SET author_name = :author_name", "expressionValues": { ":author_name": { "S": "New name" } } }, } ] }
如果事务成功,$ctx.result 中可用的调用结果如下所示:
{ "keys": [ // Key of the PutItem request { "post_id": "p1", }, // Key of the UpdateItem request { "author_id": "a1" } ], "cancellationReasons": null }
如果由于 PutItem 请求的条件检查失败而导致事务失败,则 $ctx.result 中提供的调用结果如下所示:
{ "keys": null, "cancellationReasons": [ { "item": { "post_id": "p1", "post_title": "Actual old title", "post_description": "Old description" }, "type": "ConditionCheckFailed", "message": "The condition check failed." }, { "type": "None", "message": "None" } ] }
$ctx.error 包含有关该错误的详细信息。键 keys 和 cancellationReasons 保证出现在 $ctx.result 中。
要查看更完整的示例,请按照 DynamoDB 事务教程进行操作,这里 AppSync 有教程:Dynamo DB 事务解析器。