BatchPutItem - AWS AppSync

BatchPutItem

通过使用 BatchPutItem 请求对象,您可以指示 AWS AppSync DynamoDB 函数对 DynamoDB 发出 BatchWriteItem 请求以放置多个项目(可能位于多个表中)。对于该请求对象,您必须指定以下内容:

  • 要将项目放置在其中的表名称

  • 要放置在每个表中的完整项目

DynamoDB BatchWriteItem 限制适用,并且无法提供任何条件表达式

BatchPutItem 请求对象具有以下结构:

type DynamoDBBatchPutItemRequest = { operation: 'BatchPutItem'; tables: { [tableName: string]: { [key: string]: any}[]; }; };

字段定义如下:

BatchPutItem 字段

operation

要执行的 DynamoDB 操作。要执行 BatchPutItem DynamoDB 操作,该字段必须设置为 BatchPutItem。该值为必填项。

tables

要在其中放置项目的 DynamoDB 表。每个表条目表示要为该特定表插入的 DynamoDB 项目列表。必须提供至少一个表。该值为必填项。

要记住的事项:

  • 如果成功,响应中将返回完全插入的项目。

  • 如果尚未向表中插入项目,null 元素将显示在该表的数据块中。

  • 根据在请求对象中提供插入的项目的顺序,将按表对这些结果进行排序。

  • BatchPutItem 中的每个 Put 命令都是原子性的,但可以部分处理一个批次。如果由于错误而部分处理一个批处理,则未处理的键将作为 unprocessedKeys 块内的调用结果的一部分返回。

  • BatchPutItem 限制为 25 个项目。

  • 支持与冲突检测功能一起使用此操作。两者同时使用可能会导致错误。

对于以下示例函数请求处理程序:

import { util } from '@aws-appsync/utils'; export function request(ctx) { const { authorId, postId, name, title } = ctx.args; return { operation: 'BatchPutItem', tables: { authors: [util.dynamodb.toMapValues({ authorId, name })], posts: [util.dynamodb.toMapValues({ authorId, postId, title })], }, }; }

ctx.result 中可用的调用结果如下所示:

{ "data": { "authors": [ null ], "posts": [ // Was inserted { "authorId": "a1", "postId": "p2", "title": "title" } ] }, "unprocessedItems": { "authors": [ // This item was not processed due to an error { "authorId": "a1", "name": "a1_name" } ], "posts": [] } }

ctx.error 包含有关该错误的详细信息。在调用结果中,确保会出现 dataunprocessedItems 键以及在请求对象中提供的每个表键。已插入的项目存在于数据块中。尚未处理的项目将在数据块中标记为 null 并置于 unprocessedItems 块中。