

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

**Importante**  
***In questa sezione si fa riferimento alla versione API 2011-12-05, che è obsoleta e non deve essere utilizzata per le nuove applicazioni.***  
 **Per informazioni sull'API di basso livello corrente, consulta la [Amazon DynamoDB API Reference](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/).**

## Descrizione
<a name="API_BatchWriteItems_Description"></a>

Questa operazione consente di inserire ed eliminare più elementi da una o più tabelle con un'unica chiamata. 

Per caricare un elemento è possibile utilizzare `PutItem` mentre per eliminare un elemento è possibile utilizzare `DeleteItem`. Tuttavia, se desideri caricare o eliminare grandi quantità di dati, ad esempio caricare grandi quantità di dati da Amazon EMR (Amazon EMR) o migrare dati da un altro database in DynamoDB, `BatchWriteItem` rappresenta un'alternativa efficiente. 

Se si utilizzano linguaggi come Java, è possibile utilizzare i thread per caricare gli elementi in parallelo. Ciò aggiunge complessità all'applicazione per gestire i thread. Altri linguaggi non supportano il threading. Ad esempio, se si utilizza PHP, è necessario caricare o eliminare gli elementi uno alla volta. In entrambe le situazioni, `BatchWriteItem` fornisce un'alternativa in cui le operazioni put ed delete specificate vengono elaborate in parallelo, offrendo così la potenza dell'approccio del pool di thread senza dover introdurre complessità nell'applicazione. 

Si noti che ogni singola operazione put ed delete specificata in un'operazione `BatchWriteItem` costa uguale in termini di unità di capacità consumate. Tuttavia, perché `BatchWriteItem` esegue le operazioni specificate in parallelo, si ottiene una latenza inferiore. Le operazioni di eliminazione su elementi inesistenti consumano 1 unità di capacità di scrittura. Per ulteriori informazioni sulle unità di capacità consumate, consulta [Utilizzo di tabelle e dati in DynamoDB](WorkingWithTables.md).

Quando si utilizza `BatchWriteItem`, tenere presente le limitazioni seguenti:
+ **Operazioni massime in una singola richiesta**: è possibile specificare un totale massimo di 25 operazioni put o delete; tuttavia, la dimensione totale della richiesta non può superare 1 MB (il payload HTTP). 
+ È possibile utilizzare l'operazione `BatchWriteItem` solo per inserire ed eliminare elementi. Non è possibile utilizzarla per aggiornare gli elementi esistenti.
+ **Non è un'operazione atomica**: le singole operazioni specificate in `BatchWriteItem` sono atomiche; tuttavia `BatchWriteItem`nel suo complesso è un'operazione "migliore sforzo" e non un'operazione atomica. In altre parole, in una richiesta `BatchWriteItem` alcune operazioni potrebbero avere esito positivo e altre potrebbero non riuscire. Le operazioni non riuscite vengono restituite in un campo `UnprocessedItems` nella risposta. Alcuni di questi errori potrebbero essere dovuti al superamento della velocità effettiva assegnata configurata per la tabella o a un errore temporaneo, ad esempio un errore di rete. È possibile esaminare e inviare nuovamente le richieste. In genere `BatchWriteItem` viene richiamato in un loop e in ogni iterazione vengono controllati gli elementi non elaborati, quindi si invia una nuova richiesta `BatchWriteItem` con gli elementi non elaborati. 
+ **Non restituisce alcun elemento**: `BatchWriteItem` è progettato per caricare grandi quantità di dati in modo efficiente. Non fornisce alcune delle sofisticazioni offerte da `PutItem` e `DeleteItem`. Ad esempio, `DeleteItem` supporta il campo `ReturnValues` nel corpo della richiesta per richiedere l'elemento eliminato nella risposta. L'operazione `BatchWriteItem` non restituisce alcun elemento nella risposta.
+ A differenza di `PutItem` e `DeleteItem`, `BatchWriteItem` non consente di specificare le condizioni sulle singole richieste di scrittura nell'operazione.
+ I valori degli attributi non devono essere nulli; gli attributi di tipo stringa e binario devono avere lunghezze maggiori di zero e gli attributi di tipo set non devono essere vuoti. Le richieste con valori vuoti verranno rifiutate con una`ValidationException`.

DynamoDB rifiuta l'intera operazione di scrittura in batch se si verifica una delle seguenti condizioni: 
+ Se una o più tabelle specificate nella richiesta `BatchWriteItem` non esiste.
+ Se gli attributi della chiave primaria specificati su un elemento nella richiesta non corrispondono allo schema di chiave primaria della tabella corrispondente.
+ Se si prova a eseguire più operazioni sullo stesso elemento nella stessa richiesta `BatchWriteItem`. Ad esempio, non è possibile inserire ed eliminare lo stesso elemento nella stessa richiesta `BatchWriteItem`. 
+ Se la dimensione totale della richiesta supera il limite di 1 MB (il payload HTTP).
+ Se un singolo elemento in un batch supera il limite di dimensioni degli elementi di 64 KB.

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

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

```
// This header is abbreviated. For a sample of a complete header, see API DynamoDB di basso livello.
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", ... ]
}
```

Nel corpo della richiesta, l'oggetto JSON `RequestItems` descrive le operazioni che desideri eseguire. Le operazioni sono raggruppate per tabelle. È possibile utilizzare `BatchWriteItem` per aggiornare o eliminare più elementi in più tabelle. Per ogni richiesta di scrittura specifica, è necessario identificare il tipo di richiesta (`PutItem`, `DeleteItem`) seguito da informazioni dettagliate sull'operazione. 
+ Per un `PutRequest`, si fornisce l'elemento, ovvero un elenco di attributi e i relativi valori.
+ Per un `DeleteRequest`, si forniscono il nome e il valore della chiave primaria. 

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

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

Di seguito è riportata la sintassi del corpo JSON restituito nella risposta.

```
{
  "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.
```

## Errori speciali
<a name="API_BatchWriteItems_SpecialErrors"></a>

Nessun errore specifico per questa operazione.

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

Il seguente esempio mostra una richiesta HTTP POST e la risposta di un'operazione `BatchWriteItem`. La richiesta specifica le seguenti operazioni nelle tabelle Reply e Thread:
+ Inserimento ed eliminazione di un elemento dalla tabella Reply.
+ Inserisci un elemento nella tabella Thread

Per gli esempi di utilizzo dell'SDK AWS, consulta [Utilizzo di elementi e attributi in DynamoDB](WorkingWithItems.md).

### Richiesta di esempio
<a name="API_BatchWriteItems_Examples_Request"></a>

```
// This header is abbreviated. For a sample of a complete header, see API DynamoDB di basso livello.
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"
            }
          }
        }
      }
    ]
  }
}
```

### Risposta di esempio
<a name="API_BatchWriteItems_Examples_Response"></a>

La risposta di esempio seguente mostra un'operazione put nelle tabelle Thread e Reply completata e un'operazione di eliminazione nella tabella Reply non riuscita (per motivi quali la limitazione causata quando si supera la velocità effettiva assegnata nella tabella). Nella risposta JSON, tenere presente quanto segue:
+ L'oggetto `Responses` mostra che un'unità di capacità è stata utilizzata su entrambe le tabelle `Thread` e `Reply` come risultato dell'operazione put riuscita su ciascuna di queste tabelle. 
+ L'oggetto `UnprocessedItems` mostra l'operazione di eliminazione non riuscita sulla tabella `Reply`. È quindi possibile emettere una nuova chiamata `BatchWriteItem` per rispondere a queste richieste non elaborate.

```
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"
                  }
               }
            }
         }
      ]
   }
}
```