BatchPutItem
O objeto de solicitação BatchPutItem
permite que você oriente a função do AWS a fazer uma solicitação BatchWriteItem
ao DynamoDB para incluir vários itens, potencialmente em diversas tabelas. Para esse objeto de solicitação, você deve especificar o seguinte:
-
Os nomes da tabela na qual inserir os itens
-
Os itens completos a serem inseridos em cada tabela
Os limites BatchWriteItem
do DynamoDB se aplicam e nenhuma expressão de condição pode ser fornecida.
O objeto de solicitação BatchPutItem
tem a seguinte estrutura:
type DynamoDBBatchPutItemRequest = { operation: 'BatchPutItem'; tables: { [tableName: string]: { [key: string]: any}[]; }; };
Os campos são definidos da seguinte forma:
Campos BatchPutItem
-
operation
-
A operação do DynamoDB para execução. Para executar a operação
BatchPutItem
do DynamoDB, ela deve ser definida comoBatchPutItem
. Este valor é obrigatório. -
tables
-
As tabelas do DynamoDB nas quais inserir os itens. Cada entrada da tabela representa uma lista de itens do DynamoDB a serem inseridos nesta tabela específica. Pelo menos uma tabela deve ser fornecida. Este valor é obrigatório.
Informações importantes:
-
Os itens totalmente inseridos são retornados na resposta, se bem-sucedidos.
-
Se um item não tiver sido inserido na tabela, um elemento nulo será exibido no bloco de dados dessa tabela.
-
Os itens inseridos são classificados por tabela, com base na ordem em que foram fornecidos dentro do objeto de solicitação.
-
Cada comando
Put
dentro de umBatchPutItem
é atômico, no entanto, um lote pode ser parcialmente processado. Se um lote for parcialmente processado devido a um erro, as chaves não processadas serão retornadas como parte do resultado da chamada dentro do bloco unprocessedKeys. -
O
BatchPutItem
é limitado a 25 itens. -
Essa operação não é compatível quando usada com detecção de conflitos. Usar ambos ao mesmo tempo pode gerar um erro.
Veja a seguir um exemplo de manipulador de solicitação de função:
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 })], }, }; }
O resultado de invocação disponível em ctx.result
é o seguinte:
{ "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": [] } }
O ctx.error
contém detalhes sobre o erro. As chaves data, unprocessedItems e todas as chaves de tabela fornecidas no objeto de solicitação estão presentes no resultado da invocação. Os itens que foram inseridos estão no bloco data. Itens que não foram processados são marcados como nulos no bloco de dados e colocados dentro do bloco unprocessedItems.