BatchPutItem
El objeto de solicitud BatchPutItem
permite indicar a la función de DynamoDB de AWS AppSync que realice una solicitud BatchWriteItem
a DynamoDB para colocar varios elementos, potencialmente en varias tablas. Para este objeto de solicitud, debe especificar lo siguiente:
-
Los nombres de tabla en los que poner los elementos
-
Los elementos completos que poner en cada tabla
Se aplican los límites de BatchWriteItem
de DynamoDB y no puede proporcionar ninguna expresión de condición.
El objeto de solicitud BatchPutItem
tiene la siguiente estructura:
type DynamoDBBatchPutItemRequest = { operation: 'BatchPutItem'; tables: { [tableName: string]: { [key: string]: any}[]; }; };
Los campos se definen de la siguiente manera:
Campos BatchPutItem
-
operation
-
La operación de DynamoDB que se ha de realizar. Para ejecutar la operación de DynamoDB
BatchPutItem
, este valor se debe establecer enBatchPutItem
. Este valor es obligatorio. -
tables
-
Las tablas de DynamoDB en las que poner los elementos. Cada entrada de la tabla representa una lista de elementos de DynamoDB que insertar para esta tabla específica. Al menos debe proporcionarse una tabla. Este valor es obligatorio.
Cosas que tener en cuenta:
-
Los elementos totalmente insertados se devuelven en la respuesta, si la operación se realiza correctamente.
-
Si un elemento no se ha insertado en la tabla, aparece un elemento nulo en el bloque de datos para esa tabla.
-
Los elementos insertados se ordenan por tabla, según el orden en el que se hayan proporcionado dentro del objeto de solicitud.
-
Cada comando
Put
dentro de unBatchPutItem
es atómico, sin embargo, un lote se puede procesar parcialmente. Si un lote se procesa parcialmente debido a un error, la claves sin procesar se devuelven como parte del resultado de invocación dentro del bloque unprocessedKeys. -
BatchPutItem
está limitado a 25 elementos. -
Esta operación no se admite cuando se utiliza con la detección de conflictos. El uso de ambas al mismo tiempo generará un error.
Para el siguiente controlador de solicitudes de función de ejemplo:
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 })], }, }; }
El resultado de invocación disponible en ctx.result
es el siguiente:
{ "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": [] } }
El ctx.error
contiene detalles acerca del error. Está garantizado que los datos de claves, unprocessedItems y cada clave de tabla que se proporcionó en el objeto de solicitud estarán presentes en el resultado de invocación. Los elementos que se han insertado están en el bloque de datos. Los elementos que no se hayan procesado se marcan como null dentro del bloque de datos y se colocan dentro del bloque unprocessedItems.