

# BatchWriteItem
<a name="API_BatchWriteItem_v20111205"></a>

**importante**  
***Esta sección se refiere a la versión 2011-12-05 del API, que está obsoleta y no debe utilizarse para nuevas aplicaciones.***  
 **Para consultar la documentación sobre la API de bajo nivel actual, consulte la [Referencia de la API de Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/).**

## Descripción
<a name="API_BatchWriteItems_Description"></a>

Esta operación permite colocar o eliminar varios elementos en una o varias tablas con una sola llamada. 

Para cargar un elemento, puede utilizar `PutItem` y para eliminar un elemento, puede utilizar `DeleteItem`. Sin embargo, si desea cargar o eliminar grandes cantidades de datos, como, por ejemplo, cargar grandes cantidades de datos desde Amazon EMR (Amazon EMR) o migrar datos desde otra base de datos a DynamoDB, `BatchWriteItem` ofrece una alternativa eficiente. 

Si utiliza lenguajes como Java, puede usar hilos para cargar los elementos en paralelo. Esto agrega complejidad a la aplicación, porque debe encargarse de los hilos. Otros lenguajes no admiten los hilos. Por ejemplo, si utiliza PHP, debe cargar o eliminar los elementos uno por uno. En ambos casos, `BatchWriteItem` proporciona una alternativa para procesar en paralelo las operaciones de colocación y eliminación, por lo que aporta la potencia de un grupo de subprocesos sin tener que aumentar la complejidad de la aplicación. 

Tenga en cuenta que cada una de las operaciones individuales de colocación y eliminación que se especifican en una operación `BatchWriteItem` cuesta lo mismo en términos de unidades de capacidad consumidas. Sin embargo, puesto que `BatchWriteItem` lleva a cabo las operaciones especificadas en paralelo, se consigue una latencia menor. Cada una de las operaciones de eliminación de elementos inexistentes consumen una unidad de capacidad de escritura. Para obtener más información sobre las unidades de capacidad provisionadas, consulte [Uso de tablas y datos en DynamoDB](WorkingWithTables.md).

Cuando utilice `BatchWriteItem`, tenga en cuenta las siguientes limitaciones:
+ **Número máximo de operaciones en una sola solicitud**: puede especificar un máximo de 25 operaciones de colocación o eliminación en total; sin embargo, el tamaño total de la solicitud no puede ser mayor que 1 MB (la carga de HTTP). 
+ Puede utilizar la operación `BatchWriteItem` únicamente para colocar y eliminar elementos. No la puede utilizar para actualizar los existentes.
+ **No es una operación atómica**: las operaciones individuales especificadas en una operación `BatchWriteItem` son atómicas; sin embargo, `BatchWriteItem` en su conjunto es una operación basada en el principio "en la medida en que sea posible", no es atómica. Es decir, en una solicitud `BatchWriteItem`, algunas operaciones podrían realizarse correctamente y otras, no. Las operaciones que presentan algún error se devuelven en el campo `UnprocessedItems` en la respuesta. Algunos de estos errores podrían deberse a que se haya superado el desempeño provisionado configurado para la tabla, o a un error transitorio de la red. Puede investigar y, si lo desea, reenviar las solicitudes. Normalmente, se llama a `BatchWriteItem` en bucle, se comprueba en cada iteración si quedan elementos sin procesar y se envía una nueva solicitud `BatchWriteItem` con esos elementos que faltan. 
+ **No se devuelven elementos**: la operación `BatchWriteItem` se ha diseñado para cargar grandes cantidades de datos de forma eficiente. No proporciona la sofisticación que ofrecen `PutItem` y `DeleteItem`. Por ejemplo, `DeleteItem` es compatible con el campo `ReturnValues` del cuerpo de la solicitud para solicitar el elemento eliminado en la respuesta. En cambio, la operación `BatchWriteItem` no devuelve ningún elemento de respuesta.
+ A diferencia de `PutItem` y `DeleteItem`, `BatchWriteItem` no permite especificar condiciones para solicitudes de escritura individuales de la operación.
+ Los valores de los atributos no pueden ser null; los atributos de tipo cadena y binario deben tener una longitud superior a cero; y los atributos de tipo conjunto no pueden estar vacíos. Las solicitudes con valores vacíos se rechazan con la excepción `ValidationException`.

DynamoDB rechaza toda la operación de escritura por lotes si se cumple cualquiera de las siguientes condiciones: 
+ Si una o varias tablas especificados en la solicitud `BatchWriteItem` no existe.
+ Si los atributos de clave principal especificados en un elemento de la solicitud no coinciden con el esquema de clave principal de la tabla correspondiente.
+ Si intenta realizar varias operaciones con el mismo elemento en la misma solicitud `BatchWriteItem`. Por ejemplo, no puede colocar y eliminar el mismo elemento en la misma solicitud `BatchWriteItem`. 
+ Si el tamaño total de la solicitud supera el límite de tamaño de solicitud de 1 MB (la carga de HTTP).
+ Si cualquier elemento individual de un lote supera el límite de tamaño de elemento de 64 KB.

## Solicitudes
<a name="API_BatchWriteItems_RequestParameters"></a>

### Sintaxis
<a name="API_BatchWriteItems_RequestParameters.syntax"></a>

```
// This header is abbreviated. For a sample of a complete header, see API de bajo nivel de DynamoDB.
POST / HTTP/1.1
x-amz-target: DynamoDB_20111205.BatchGetItem 
content-type: application/x-amz-json-1.0 

{
  "RequestItems" :  RequestItems
} 

RequestItems
{
     "TableName1" :  [ Request, Request, ... ],
     "TableName2" :  [ Request, Request, ... ],
     ...
}

Request ::=
  PutRequest | DeleteRequest

PutRequest ::=
{
  "PutRequest" : {
     "Item" : {
        "Attribute-Name1" : Attribute-Value,
        "Attribute-Name2" : Attribute-Value,
         ...
     }
  }
}

DeleteRequest ::=
{
   "DeleteRequest" : {
      "Key" : PrimaryKey-Value
   }
}


PrimaryKey-Value ::= HashTypePK | HashAndRangeTypePK

HashTypePK ::=
{ 
   "HashKeyElement" : Attribute-Value
}

HashAndRangeTypePK
{ 
   "HashKeyElement" : Attribute-Value,
   "RangeKeyElement" : Attribute-Value, 
}

Attribute-Value ::= String | Numeric| Binary | StringSet | NumericSet | BinarySet 

Numeric ::=
{
   "N": "Number"
}

String ::=
{
   "S": "String"
}

Binary ::=
{
    "B": "Base64 encoded binary data"
}

StringSet ::=
{
   "SS": [ "String1", "String2", ... ]
}

NumberSet ::=
{
   "NS": [ "Number1", "Number2", ... ]
}  

BinarySet ::=
{
   "BS": [ "Binary1", "Binary2", ... ]
}
```

En el cuerpo de la solicitud, el objeto JSON `RequestItems` describe las operaciones que desea a realizar. Las operaciones se agrupan por tablas. Puede utilizar `BatchWriteItem` para actualizar o eliminar varios elementos en varias tablas. Para cada solicitud de escritura específica, debe identificar el tipo de solicitud (`PutItem` o `DeleteItem`), seguido de información detallada sobre la operación. 
+ Para una solicitud `PutRequest`, se proporciona el elemento, es decir, una lista de atributos y sus valores.
+ Para una solicitud `DeleteRequest`, se proporcionan el nombre y el valor de la clave principal. 

## Respuestas
<a name="API_BatchWriteItems_ResponseElements"></a>

### Sintaxis
<a name="API_BatchWriteItems_ResponseElements.syntax"></a>

A continuación encontrará la sintaxis del cuerpo JSON devuelto en la respuesta.

```
{
  "Responses" :         ConsumedCapacityUnitsByTable
  "UnprocessedItems" :  RequestItems
} 

ConsumedCapacityUnitsByTable
{
    "TableName1" : { "ConsumedCapacityUnits", : NumericValue },
    "TableName2" : { "ConsumedCapacityUnits", : NumericValue },
     ...
}

RequestItems
This syntax is identical to the one described in the JSON syntax in the request.
```

## Errores especiales
<a name="API_BatchWriteItems_SpecialErrors"></a>

No hay errores específicos de esta operación.

## Ejemplos
<a name="API_BatchWriteItems_Examples"></a>

En el siguiente ejemplo se muestra una solicitud HTTP POST y la respuesta de una operación `BatchWriteItem`. En la solicitud se especifican las siguientes operaciones en las tablas Reply y Thread:
+ Colocar un elemento y eliminar un elemento de la tabla Reply
+ Colocar un elemento en la tabla Thread

Para obtener ejemplos sobre cómo usar el SDK de AWS, consulte [Uso de elementos y atributos en DynamoDB](WorkingWithItems.md).

### Solicitud de ejemplo
<a name="API_BatchWriteItems_Examples_Request"></a>

```
// This header is abbreviated. For a sample of a complete header, see API de bajo nivel de DynamoDB.
POST / HTTP/1.1
x-amz-target: DynamoDB_20111205.BatchGetItem 
content-type: application/x-amz-json-1.0 

{
  "RequestItems":{
    "Reply":[
      {
        "PutRequest":{
          "Item":{
            "ReplyDateTime":{
              "S":"2012-04-03T11:04:47.034Z"
            },
            "Id":{
              "S":"DynamoDB#DynamoDB Thread 5"
            }
          }
        }
      },
      {
        "DeleteRequest":{
          "Key":{
            "HashKeyElement":{
              "S":"DynamoDB#DynamoDB Thread 4"
            },
            "RangeKeyElement":{
              "S":"oops - accidental row"
            }
          }
        }
      }
    ],
    "Thread":[
      {
        "PutRequest":{
          "Item":{
            "ForumName":{
              "S":"DynamoDB"
            },
            "Subject":{
              "S":"DynamoDB Thread 5"
            }
          }
        }
      }
    ]
  }
}
```

### Respuesta de ejemplo
<a name="API_BatchWriteItems_Examples_Response"></a>

En la respuesta del siguiente ejemplo se muestra una operación de colocación que se ha realizado correctamente en las tablas Thread y Reply, y una operación que no se ha podido realizar en la tabla Reply (por ejemplo, porque se ha aplicado una limitación controlada por haberse superado el rendimiento aprovisionado de la tabla). Observe lo siguiente en la respuesta de JSON:
+ El objeto `Responses` muestra que se ha consumido una unidad de capacidad en cada tabla, `Thread` y `Reply`, debido a sendas operaciones de colocación llevadas a cabo en ellas. 
+ El objeto `UnprocessedItems` muestra la operación de eliminación que no se pudo realizar en la tabla `Reply`. A continuación, puede emitir una nueva llamada a `BatchWriteItem` para repetir estas solicitudes sin procesar.

```
HTTP/1.1 200 OK
x-amzn-RequestId: G8M9ANLOE5QA26AEUHJKJE0ASBVV4KQNSO5AEMVJF66Q9ASUAAJG
Content-Type: application/x-amz-json-1.0
Content-Length: 536
Date: Thu, 05 Apr 2012 18:22:09 GMT

{
   "Responses":{
      "Thread":{
         "ConsumedCapacityUnits":1.0
      },
      "Reply":{
         "ConsumedCapacityUnits":1.0
      }
   },
   "UnprocessedItems":{
      "Reply":[
         {
            "DeleteRequest":{
               "Key":{
                  "HashKeyElement":{
                     "S":"DynamoDB#DynamoDB Thread 4"
                  },
                  "RangeKeyElement":{
                     "S":"oops - accidental row"
                  }
               }
            }
         }
      ]
   }
}
```