

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à.

# Esecuzione di un'operazione di invio in blocco di articoli
<a name="BulkPutItems.Requesting"></a>

Fornisci una posizione Amazon S3 per i file di input e una tabella di destinazione. DynamoDB riporta gli elementi che non è stato in grado di scrivere in un bucket di output fornito. Puoi scegliere cosa contiene il report di output tramite [OutputType](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_OutputS3Configuration.html#DDB-Type-OutputS3Configuration-OutputType) parametro: richiesta `ERROR` per gli articoli che non sono stati convalidati, `CONDITION_CHECK_FAILURE` per gli articoli che non soddisfano le loro condizioni, o entrambe.

È possibile eseguire un'operazione di invio in blocco di articoli utilizzando [AWS CLI](AccessingDynamoDB.md#Tools.CLI) o il AWS SDK. Per usare AWS CLI, installalo prima e configuralo con il tuo AWS credenziali. Per ulteriori informazioni, consulta [Accesso a DynamoDB](AccessingDynamoDB.md).

**Nota**  
Non modificare gli oggetti Amazon S3 mentre l'operazione è in corso. La modifica degli oggetti di input può causare il fallimento dell'operazione.

**Topics**
+ [Avvio di un'operazione di inserimento in blocco degli elementi](#BulkPutItems.Requesting.Start)
+ [Monitoraggio dell'avanzamento](#BulkPutItems.Requesting.Describe)
+ [Elenco delle operazioni in blocco](#BulkPutItems.Requesting.List)
+ [Annullamento di un'operazione](#BulkPutItems.Requesting.Cancel)
+ [Concorrenza e quote](#BulkPutItems.Requesting.Limits)

## Avvio di un'operazione di inserimento in blocco degli elementi
<a name="BulkPutItems.Requesting.Start"></a>

Per avviare un'operazione di invio in blocco di articoli, chiama [StartBulkPutItems](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_StartBulkPutItems.html) e fornisci i seguenti input richiesti:
+ [TableName](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_StartBulkPutItems.html#DDB-StartBulkPutItems-request-TableName) — Il nome o l'ARN della tabella di destinazione. La tabella deve essere `ACTIVE`, o `UPDATING` con una modifica che non sia in conflitto con le scritture in blocco. Per informazioni dettagliate, vedi [Requisiti dello stato della tabella](BulkPutItems.Considerations.md#BulkPutItems.Considerations.TableState).
+ [Configurazione degli ingressi 3](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_InputS3Configuration.html) — La posizione Amazon S3 dei tuoi file di input. È necessario specificare [Bucket S3](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_InputS3Configuration.html#DDB-Type-InputS3Configuration-S3Bucket) e [InputFormat](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_InputS3Configuration.html#DDB-Type-InputS3Configuration-InputFormat). Specificare facoltativamente [S3BucketOwner](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_InputS3Configuration.html#DDB-Type-InputS3Configuration-S3BucketOwner), [S3KeyPrefix](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_InputS3Configuration.html#DDB-Type-InputS3Configuration-S3KeyPrefix), e [InputCompressionType](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_InputS3Configuration.html#DDB-Type-InputS3Configuration-InputCompressionType).
+ [Configurazione delle uscite 3](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_OutputS3Configuration.html) — La posizione di Amazon S3 per il report di output. Devi specificare `S3Bucket` e `OutputType`. Una configurazione di output è obbligatoria.

Sono disponibili anche i seguenti parametri opzionali:
+ [PerformanceTier](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_StartBulkPutItems.html#DDB-StartBulkPutItems-request-PerformanceTier) — Scegli `STANDARD` (impostazione predefinita) o `ACCELERATED`. Lo standard si adatta alla maggior parte delle operazioni in cui i tempi di completamento sono flessibili. Accelerated è progettato per carichi di lavoro in cui i tempi di completamento sono più rigidi e mirano a una produttività più elevata rispetto a Standard, in modo che le operazioni di grandi dimensioni possano essere completate più velocemente. Per ulteriori informazioni, consulta [Livelli di prestazioni](BulkPutItems.Tiers.md).
+ **MaxWriteRequestUnits** — Nel contesto delle operazioni di massa, [MaxWriteRequestUnits](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_StartBulkPutItems.html#DDB-StartBulkPutItems-request-MaxWriteRequestUnits) è il numero massimo di unità di richiesta di scrittura al secondo con cui è possibile scrivere l'operazione in blocco. Il limite si applica al totale delle unità di richiesta di scrittura che l'operazione consuma sulla tabella e su tutti i relativi indici. Ad esempio, in una tabella con due indici secondari globali che proiettano entrambi l'elemento, un limite di 1.024 consente circa 340 elementi da 1 KB al secondo. È da utilizzare se si eseguono operazioni a valle sensibili a velocità di scrittura più elevate. Questa impostazione si applica solo alle operazioni in blocco e non ha alcuna relazione con la capacità fornita o su richiesta della tabella. Il valore minimo è 1.024.
+ [ClientToken](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_StartBulkPutItems.html#DDB-StartBulkPutItems-request-ClientToken) — Un token di idempotenza. Se riprovi una richiesta con lo stesso token client, DynamoDB restituisce l'operazione esistente anziché crearne una nuova. DynamoDB conserva il token per 8 ore.

### Formati di input supportati
<a name="BulkPutItems.Requesting.Start.Formats"></a>

`InputFormat` accetta i seguenti valori:
+ `DYNAMODB_JSON`
+ `ION`

`InputCompressionType` accetta i seguenti valori:
+ `GZIP`
+ `ZSTD`
+ `NONE`

### Tipi di output
<a name="BulkPutItems.Requesting.Start.OutputType"></a>

`OutputType` è un elenco e puoi richiedere uno o entrambi i seguenti tipi di report:
+ `ERROR` — Fornisce un report degli elementi che hanno avuto esito negativo per motivi deterministici, ad esempio errori di convalida.
+ `CONDITION_CHECK_FAILURE` — Fornisce un report degli elementi la cui espressione di condizione per elemento non è stata soddisfatta.

### Avvio di un'operazione (AWS CLI)
<a name="BulkPutItems.Requesting.Start.CLI"></a>

L'esempio seguente avvia un'operazione di inserimento in blocco degli elementi che legge i file JSON di DynamoDB da un bucket Amazon S3 e invia il report in un bucket separato.

```
aws dynamodb start-bulk-put-items \
    --table-name MusicCollection \
    --input-s3-configuration '{
        "S3Bucket": "amzn-s3-demo-bucket",
        "S3KeyPrefix": "daily/",
        "InputFormat": "DYNAMODB_JSON",
        "InputCompressionType": "NONE"
    }' \
    --output-s3-configuration '{
        "OutputType": ["ERROR"],
        "S3Bucket": "amzn-s3-demo-bucket1",
        "S3KeyPrefix": "bulk-put-items-output/"
    }' \
    --performance-tier STANDARD
```

### Avvio di un'operazione (Python)
<a name="BulkPutItems.Requesting.Start.Python"></a>

L'esempio seguente utilizza AWS SDK per Python (Boto3) per avviare un'operazione di inserimento in blocco di elementi.

```
import boto3

client = boto3.client("dynamodb")

response = client.start_bulk_put_items(
    TableName="MusicCollection",
    InputS3Configuration={
        "S3Bucket": "amzn-s3-demo-bucket",
        "S3KeyPrefix": "daily/",
        "InputFormat": "DYNAMODB_JSON",
        "InputCompressionType": "NONE",
    },
    OutputS3Configuration={
        "S3Bucket": "amzn-s3-demo-bucket1",
        "OutputType": ["ERROR", "CONDITION_CHECK_FAILURE"],
    },
    PerformanceTier="STANDARD",
)

bulk_operation_arn = response["BulkOperationDescription"]["BulkOperationArn"]
print(f"Started operation: {bulk_operation_arn}")
```

## Monitoraggio dell'avanzamento
<a name="BulkPutItems.Requesting.Describe"></a>

Chiama [DescribeBulkOperation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_DescribeBulkOperation.html) per monitorare lo stato di avanzamento di un'operazione di invio in blocco di articoli. Tre campi segnalano lo stato di avanzamento:
+ [ProcessedItemCount](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BulkOperationDescription.html#DDB-Type-BulkOperationDescription-ProcessedItemCount) — Il numero di record di input letti finora, inclusi i record che non hanno superato la convalida o il controllo delle condizioni. Si tratta del conteggio dei record letti, non degli elementi scritti.
+ **ProcessedInputBytes** — Il numero di byte letti ed elaborati finora da Amazon S3.
+ **TotalInputBytes** — La dimensione totale di tutti gli oggetti di input in Amazon S3.

Per stimare i progressi, confronta [ProcessedInputBytes](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BulkOperationDescription.html#DDB-Type-BulkOperationDescription-ProcessedInputBytes) a [TotalInputBytes](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BulkOperationDescription.html#DDB-Type-BulkOperationDescription-TotalInputBytes). Ad esempio, se il tuo input ammonta a 50 GB e `ProcessedInputBytes` mostra 35 GB, l'operazione è completa all'incirca al 70 percento.

`TotalInputBytes` è assente dalla risposta finché DynamoDB non calcola il totale durante la convalida iniziale dell'input. Il tempo di calcolo varia in base alle condizioni operative e di servizio. Sondaggio `DescribeBulkOperation` finché il campo non è presente.

I campi di avanzamento si aggiornano periodicamente e possono essere aggiornati in momenti diversi. Non sono contatori attivi. Non fare affidamento su un intervallo di aggiornamento fisso.

### Valori di stato
<a name="BulkPutItems.Requesting.Describe.Status"></a>

Il [BulkOperationStatus](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_BulkOperationDescription.html#DDB-Type-BulkOperationDescription-BulkOperationStatus) il campo restituisce uno dei seguenti valori:
+ `IN_PROGRESS` — L'operazione consiste nella lettura di input e nella scrittura di elementi.
+ `COMPLETED` — Tutti gli input sono stati letti e `FailedItemCount` è 0. Gli articoli possono ancora non aver superato il controllo delle condizioni. Se lo hai richiesto, leggi il `CONDITION_CHECK_FAILURE` fai un rapporto per trovarli.
+ `COMPLETED_WITH_ERRORS` — Tutti gli input sono stati letti e `FailedItemCount` è superiore a 0. Rivedi il `ERROR` rapporto.
+ `CANCELLING` — Viene applicata una richiesta di cancellazione.
+ `CANCELLED` — L'operazione è stata interrotta in risposta a una richiesta di cancellazione. Gli elementi già scritti rimangono nella tabella. `CANCELLED` non significa che manchino dei dati. Il manifesto di completamento registra ciò che è stato elaborato. `FailureCode` è `RequestCancelled`.
+ `FAILED` — L'operazione non può essere completata. Vedi il codice di errore.

Se un'operazione supera il tempo massimo di elaborazione, DynamoDB interrompe l'ingestione e l'operazione termina `FAILED` con codice di errore `Timeout` e il messaggio «L'operazione in blocco ha superato il tempo di elaborazione massimo consentito». Il timeout è un risultato atteso per un input molto grande o per un'operazione la cui velocità è limitata `MaxWriteRequestUnits`, piuttosto che un guasto. Gli elementi già scritti rimangono nella tabella e il manifesto di completamento registra lo stato di elaborazione di ciascun oggetto, in modo da poter inviare nuovamente il resto. Aumentare `MaxWriteRequestUnits` nel `StartBulkPutItems` chiamare o suddividere l'input in più oggetti riduce la possibilità di un timeout.

La tabella seguente elenca i codici di errore che a `FAILED` l'operazione può segnalare.


| Codice di errore | Causa | Cosa fare | 
| --- | --- | --- | 
| `Timeout` | L'operazione ha superato il tempo massimo di elaborazione | Invia nuovamente il resto del manifesto di completamento | 
| `ValidationException` | Un errore ha impedito a DynamoDB di leggere un oggetto di input e DynamoDB non ha potuto confermare la lettura di tutti i byte di input memorizzati | Correggi il record, quindi invialo nuovamente con i record all'esterno `processedRanges` | 
| `InputObjectTooLarge` | Un oggetto di input supera i 5 GB | Dividi l'oggetto | 
| `S3ObjectsCountLimitExceeded` | Più di 50.000 oggetti di input | Riduci il numero di oggetti o richiedi un aumento della quota | 
| `SizeLimitExceeded` | Input totale superiore al limite per richiesta (100 GB per Standard, 1 TB per Accelerated) | Dividi l'input o usa Accelerated | 
| `ObjectModifiedInS3DuringImport` | Un oggetto di input modificato durante l'esecuzione | Mantieni invariati gli oggetti di input durante l'esecuzione dell'operazione | 
| `KmsAccessDeniedException`, `KmsDisabledException`, `KmsNotFoundException`, `KmsInvalidKeyUsageException`, `KmsInvalidStateException` | DynamoDB non poteva usare un AWS Chiave KMS per la tabella o gli oggetti Amazon S3 durante l'operazione | Verifica lo stato della chiave e le autorizzazioni chiave del chiamante | 
| `S3AccessDenied` | A DynamoDB è stato negato l'accesso alla posizione di input o output in Amazon S3. Questo codice si verifica anche quando `S3BucketOwner` non corrisponde al proprietario del bucket. | Controlla le autorizzazioni Amazon S3 del chiamante, la policy del bucket e `S3BucketOwner`. | 
| `ResourceInUseException` | Un'altra operazione sullo stesso tavolo è già iniziata | Attendi che l'operazione finisca, quindi ricomincia | 
| `DynamoDBResourceNotFoundException` | La tabella non è stata trovata o non era accessibile | Verifica il nome e lo stato della tabella | 
| `DynamoDBAccessDeniedException` | Il chiamante non è più autorizzato a scrivere sulla tabella | Ripristina `dynamodb:BulkPutItems` sul tavolo, quindi invia nuovamente il resto | 
| `DynamoDBItemCollectionSizeLimitExceededException` | Una raccolta di articoli su una tabella con un indice secondario locale ha superato il limite di dimensione | Riduci i dati relativi a quel valore della chiave di partizione | 

Se DynamoDB non è in grado di inviare il manifesto di completamento nella posizione di output, l'operazione termina `FAILED` anche se ogni elemento è stato scritto. Il messaggio di errore inizia con «Il manifesto non è disponibile». e il codice di errore ne identifica la causa, ad esempio `S3AccessDenied`. Gli elementi già scritti rimangono nella tabella. Controlla Amazon S3 del chiamante e AWS Autorizzazioni KMS per il prefisso di output, quindi confronta la tabella con il tuo input per trovare ciò che è stato scritto.

### Descrizione di un'operazione (AWS CLI)
<a name="BulkPutItems.Requesting.Describe.CLI"></a>

```
aws dynamodb describe-bulk-operation \
    --bulk-operation-arn arn:aws:dynamodb:us-east-1:111122223333:bulk-operation/01759414677739-041d6d92
```

### Descrivere un'operazione (Python)
<a name="BulkPutItems.Requesting.Describe.Python"></a>

```
import boto3

client = boto3.client("dynamodb")

response = client.describe_bulk_operation(
    BulkOperationArn="arn:aws:dynamodb:us-east-1:111122223333:bulk-operation/01759414677739-041d6d92"
)

status = response["BulkOperationDescription"]["BulkOperationStatus"]
processed_items = response["BulkOperationDescription"].get("ProcessedItemCount", 0)
processed_bytes = response["BulkOperationDescription"].get("ProcessedInputBytes", 0)
total_bytes = response["BulkOperationDescription"].get("TotalInputBytes")

print(f"Status: {status}")
print(f"Items processed: {processed_items}")

if total_bytes:
    pct = (processed_bytes / total_bytes) * 100
    print(f"Progress: {pct:.1f}%")
```

## Elenco delle operazioni in blocco
<a name="BulkPutItems.Requesting.List"></a>

Chiama [ListBulkOperations](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_ListBulkOperations.html) per recuperare un elenco suddiviso in pagine di operazioni di massa nel tuo account. Ogni pagina restituisce un massimo di 25 operazioni.

### Operazioni di quotazione (AWS CLI)
<a name="BulkPutItems.Requesting.List.CLI"></a>

```
aws dynamodb list-bulk-operations
```

Le AWS CLI impagina automaticamente e stampa tutte le pagine disponibili. Per impaginare manualmente, disattiva l'impaginazione automatica e usa `--max-items` con `--starting-token`.

```
aws dynamodb list-bulk-operations \
    --max-items 25 \
    --starting-token "{{token-from-a-previous-NextToken}}"
```

### Operazioni di quotazione (Python)
<a name="BulkPutItems.Requesting.List.Python"></a>

```
import boto3

client = boto3.client("dynamodb")

paginator = client.get_paginator("list_bulk_operations")

for page in paginator.paginate():
    for op in page["BulkOperationsSummaryList"]:
        print(f"{op['BulkOperationArn']} - {op['BulkOperationStatus']}")
```

## Annullamento di un'operazione
<a name="BulkPutItems.Requesting.Cancel"></a>

Chiamata [CancelBulkOperation](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_CancelBulkOperation.html) per interrompere un'operazione in corso. L'operazione passa a `CANCELLING` e poi a `CANCELLED`.

**Importante**  
Gli articoli già scritti prima dell'annullamento sono *non* rotolato indietro. Rimangono nella tabella e sono immediatamente leggibili.

Mentre lo stato è `CANCELLING`, i contatori di avanzamento possono essere inferiori ai valori finali. Attendi `CANCELLED` prima di controllare i risultati. Nel manifesto, un oggetto parzialmente elaborato ha lo stato `PARTIALLY_PROCESSED`e `processedRanges` elenca i record elaborati da DynamoDB. Record esterni `processedRanges` non sono stati elaborati. Inviali nuovamente, insieme a tutti i record del `ERROR` rapporto che hai corretto.

### Annullamento di un'operazione (AWS CLI)
<a name="BulkPutItems.Requesting.Cancel.CLI"></a>

```
aws dynamodb cancel-bulk-operation \
    --bulk-operation-arn arn:aws:dynamodb:us-east-1:111122223333:bulk-operation/01759414677739-041d6d92
```

### Annullamento di un'operazione (Python)
<a name="BulkPutItems.Requesting.Cancel.Python"></a>

```
import boto3

client = boto3.client("dynamodb")

client.cancel_bulk_operation(
    BulkOperationArn="arn:aws:dynamodb:us-east-1:111122223333:bulk-operation/01759414677739-041d6d92"
)

print("Cancellation requested. Items already written remain in the table.")
```

## Concorrenza e quote
<a name="BulkPutItems.Requesting.Limits"></a>

Per le quote che si applicano alle operazioni di vendita all'ingrosso di articoli, vedere [Oggetti messi in blocco](ServiceQuotas.md#limits-bulk-put-items).

Non è possibile avviare un'operazione di inserimento in blocco degli elementi su una tabella che sta creando un indice. Il tentativo di eseguire questa operazione restituisce un `ResourceInUseException`.

Una tabella può avere una sola operazione di messa in blocco degli elementi in corso alla volta. Se è in corso un'altra operazione sulla tabella, `StartBulkPutItems` restituisce un `ResourceInUseException`. Se si avviano più operazioni contemporaneamente sulla stessa tabella, ogni chiamata può restituire un ARN. Viene quindi eseguita un'operazione e le altre falliscono con `FailureCode` `ResourceInUseException`. Chiama `DescribeBulkOperation` per confermare che l'operazione è in corso. Per caricare più tabelle contemporaneamente, avvia un'operazione per ogni tabella.