View a markdown version of this page

Produzione e riconciliazione degli articoli messi in blocco - Amazon DynamoDB

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

Produzione e riconciliazione degli articoli messi in blocco

Al termine di un'operazione di invio di articoli in blocco, DynamoDB invia un report nel bucket Amazon S3 specificato in Emette la configurazione S3. Questo rapporto contiene dettagli sugli elementi che non sono stati scritti.

Tipi di report

Quando si avvia l'operazione, OutputType il parametro specifica quali categorie di elementi vengono visualizzate nel rapporto. È possibile richiedere uno o entrambi i seguenti tipi.

OutputType valore Indice
ERROR Elementi non riusciti per motivi deterministici, ad esempio errori di convalida (ad esempio, un articolo che supera la dimensione massima dell'articolo o un attributo chiave obbligatorio mancante).
CONDITION_CHECK_FAILURE Elementi la cui espressione di condizione per articolo non è stata soddisfatta. Ad esempio, un attribute_not_exists(id) condizione non riuscita perché l'elemento esiste già nella tabella.

Conta da DescribeBulkOperation

Il DescribeBulkOperation la risposta fornisce i seguenti conteggi:

  • ProcessedItemCount — Il numero di record di input letti durante l'operazione, 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.

  • FailedItemCount — Il numero di elementi che hanno avuto esito negativo per motivi deterministici, ad esempio errori di convalida. Condition-check i guasti non sono inclusi in questo conteggio.

Importante

Condition-check i guasti non sono indicati come conteggio separato nel DescribeBulkOperation risposta. Per trovare questi articoli, vedi Riconciliazione dei risultati.

Riconciliazione dei risultati

Per avere un quadro completo dei risultati della tua operazione, segui questo flusso di lavoro:

  1. Chiama DescribeBulkOperation fino a quando lo stato è COMPLETED, COMPLETED_WITH_ERRORS, CANCELLED, o FAILED. Registra ProcessedItemCount e FailedItemCount.

  2. Elenca tutti gli oggetti che iniziano con output-prefix/AWSDynamoDB/BulkOperation/account-id:operation-id. Ciò restituisce il manifesto e tutti i file di report. Se non esiste alcun manifesto, seleziona FailureCode. Leggi il manifesto. Per ogni oggetto di input, seleziona fileProcessingStatus e processedRangese confermate che etag corrisponde al tuo oggetto. Quindi leggi ogni file di rapporto. Per elencare e leggere questi oggetti, il chiamante deve s3:ListBucket e s3:GetObject sul bucket di uscita. La politica di scrittura di esempio non concede tali autorizzazioni di lettura.

  3. Utilizza il report Amazon S3 per identificare elementi specifici che richiedono un'azione, ad esempio correggere gli articoli non validi e inviarli nuovamente o esaminare gli articoli che non hanno superato il controllo delle condizioni.

Gli articoli messi in blocco non necessitano di queste autorizzazioni di lettura. Concedili in una dichiarazione separata al responsabile che controlla i risultati.

Questo approccio (conteggio delle API più analisi dei report di Amazon S3) offre la riconciliazione più accurata. L'API fornisce un riepilogo di alto livello e il report Amazon S3 fornisce i dettagli per articolo.

File manifest

Oltre ai file di report, DynamoDB genera un file manifesto nella posizione di output. Il manifesto riporta lo stato di elaborazione di ciascun oggetto di input, in modo da poter scoprire quali oggetti di input non sono stati elaborati o sono stati elaborati solo parzialmente. DynamoDB invia il manifesto nel seguente percorso:

s3://output-bucket/output-prefix/AWSDynamoDB/BulkOperation/account-id:operation-id/manifest-files.json

Il manifesto contiene un oggetto JSON per oggetto di input. Il manifesto è formato da righe JSON non compresse. I file dei report sono compressi con gzip. Ogni oggetto ha i seguenti campi:

  • ingressoSourceArn — Identifica l'oggetto di input in Amazon S3.

  • documentoProcessingStatus — Quanto completamente DynamoDB ha elaborato quell'oggetto.

  • Intervalli elaborati — Gli intervalli di indici di elementi elaborati da DynamoDB, come un array di [start, end] coppie. L'array è vuoto quando DynamoDB non ha elaborato alcun record e per un oggetto di input che non contiene elementi.

  • etag — Il tag di entità dell'oggetto di input.

- Il fileProcessingStatus il campo assume uno dei seguenti valori:

  • COMPLETAMENTE PROCESSATO — DynamoDB ha elaborato ogni elemento dell'oggetto. Per un oggetto senza elementi, processedRanges è vuoto.

  • PARZIALMENTE ELABORATO — DynamoDB non ha elaborato tutti gli elementi dell'oggetto. processedRanges mostra l'intervallo elaborato e può essere vuoto, ad esempio quando il primo record non può essere analizzato.

  • NON_PROCESSATO — L'operazione è terminata prima che DynamoDB raggiungesse questo oggetto, ad esempio perché l'operazione è stata annullata, non riuscita o è scaduta. DynamoDB emette il manifest solo al termine dell'operazione, quindi questo stato non significa mai che l'oggetto è ancora in attesa di essere elaborato.

  • NOT_DISPONIBILE — DynamoDB non è stato in grado di confermare esattamente la quantità di questo oggetto elaborata, quindi non riporta intervalli anziché segnalare il rischio che gli elementi siano stati elaborati quando non lo erano. Considera l'oggetto come non completamente elaborato.

L'esempio seguente mostra una riga per ogni valore di stato. Ogni riga è un singolo oggetto JSON.

{"inputSourceArn":"arn:aws:s3:::amzn-s3-demo-bucket/bulk-input/customers-done.json.gz","fileProcessingStatus":"FULLY_PROCESSED","processedRanges":[[0,9999]],"etag":"9b2cf535f27731c974343645a3985328"} {"inputSourceArn":"arn:aws:s3:::amzn-s3-demo-bucket/bulk-input/orders-partial.json.gz","fileProcessingStatus":"PARTIALLY_PROCESSED","processedRanges":[[0,4999]],"etag":"8f14e45fceea167a5a36dedd4bea2543"} {"inputSourceArn":"arn:aws:s3:::amzn-s3-demo-bucket/bulk-input/inventory-queued.json.gz","fileProcessingStatus":"NOT_PROCESSED","processedRanges":[],"etag":"c9f0f895fb98ab9159f51fd0297e236d"} {"inputSourceArn":"arn:aws:s3:::amzn-s3-demo-bucket/bulk-input/placeholder-not-available.json.gz","fileProcessingStatus":"NOT_AVAILABLE","processedRanges":[],"etag":"45c48cce2e2d7fbdea1afc51c7c6ad26"}

Nel FULLY_PROCESSED esempio, la gamma [0,9999] rappresenta un oggetto i cui 10.000 elementi sono stati tutti elaborati. Nel PARTIALLY_PROCESSED esempio, la gamma [0,4999] significa che gli elementi da 0 a 4999 sono stati elaborati e gli altri no.

Utilizza il manifesto per identificare gli oggetti di input che non sono stati elaborati o sono stati elaborati solo parzialmente. Ciò è distinto dai singoli elementi che hanno avuto esito negativo o la cui condizione non è stata soddisfatta, riportati nell'output relativo ai singoli elementi. Per ulteriori informazioni sull'output per articolo, vedere Tipi di report.

Layout del file di output

Ad esempio, DynamoDB genera una directory per processo interno output-prefix/AWSDynamoDB/BulkOperation/account-id:operation-id-n/output/errors/output-NNNNN.json.gz, con una corrispondenza condition-check-failures/ elenco. I file di output sono linee JSON compresse con gzip. DynamoDB chiude ogni file di output a 200 MiB e ne avvia uno nuovo, in modo che i file di output possano apparire mentre l'operazione è ferma IN_PROGRESS.

I record del rapporto includono itemLocation e errorMessages. itemLocation contiene inputSourceArn e itemIndex. itemIndex può essere assente, ad esempio quando un record troncato impedisce a DynamoDB di leggere il resto dell'oggetto. Condition-check-failure i record includono anche newImage e oldImage, quindi l'output del condition-check può essere più grande dell'input che descrive. ERROR i record possono omettere newImage, ad esempio per un elemento che supera la dimensione massima dell'articolo o un record con un operando di condizione non valido. DynamoDB genera un file per un tipo di report richiesto solo se almeno un elemento appartiene a quel tipo. Se S3BucketOwner non corrisponde al proprietario del bucket di output, l'operazione ha esito negativo e non genera alcun report o manifesto. Un'operazione che fallisce con ResourceInUseException poiché è in corso un'altra operazione sulla tabella non genera alcun manifesto o rapporto.

Fatturazione dei report e degli articoli non riusciti

I seguenti dati di fatturazione si applicano alla produzione di articoli in blocco:

  • Archivio dei report — Gli oggetti dei report in Amazon S3 vengono fatturati alle tariffe di storage standard di Amazon S3.

  • Articoli non riusciti — Gli elementi rifiutati dalla convalida prima del tentativo di scrittura della tabella non vengono conteggiati o fatturati come scritture nella tabella. Gli articoli che arrivano alla tabella e non superano il controllo delle condizioni vengono conteggiati alla scrittura della tabella e fatturati. Un controllo delle condizioni su un elemento mancante viene segnalato come 1.024 byte della tabella di base. Service-side i tentativi falliti che non producono un risultato di scrittura o di verifica delle condizioni non vengono conteggiati.

Autorizzazioni per il bucket di output

DynamoDB legge l'input e genera il report e il manifest con le credenziali del responsabile IAM che chiama StartBulkPutItems. Non si concede l'accesso a un responsabile del servizio DynamoDB. I bucket di input e output possono essere diversi AWS account e il bucket di input può essere in un altro AWS Regione dalla tabella. Per le autorizzazioni minime richieste, consulta Autorizzazioni IAM. Gli articoli messi in blocco non richiedono s3:PutObjectAcl (non imposta ACL sugli oggetti di output), quindi la sua politica di output-bucket è più ristretta di quella utilizzata dall'esportazione di DynamoDB in Amazon S3.

Se il bucket di output utilizza la crittografia lato server con un AWS KMS chiave, è possibile specificare l'algoritmo di crittografia e l'ID della chiave utilizzando S3SseAlgorithm e S3SseKmsKeyId parametri in OutputS3Configuration.

Comprensione BulkOperationUsage

La DescribeBulkOperation la risposta include a BulkOperationUsage campo che riporta i byte scritti per ogni destinazione. Questo campo corrisponde alla tua fattura. L'utilizzo dei report sulle operazioni in blocco avviene tramite BulkOperationUsage piuttosto che tramite ConsumedCapacity campo restituito da operazioni a livello di elemento come PutItem.

L'esempio seguente mostra la struttura di BulkOperationUsage:

"BulkOperationUsage": [{ "TableName": "Orders", "BulkPutBytes": 1792000, "Table": {"BulkPutBytes": 1024000}, "LocalSecondaryIndexes": {"lsi1": {"BulkPutBytes": 256000}}, "GlobalSecondaryIndexes": {"gsi1": {"BulkPutBytes": 512000}}, "VectorIndexes": {"vec1": {"BulkPutVectorBytes": 42000}} }]

Ogni scrittura dell'indice viene misurata in modo indipendente. Gli elementi rifiutati dalla convalida non aggiungono byte a BulkOperationUsage. Gli elementi messi in blocco aggiorna automaticamente gli indici secondari globali e gli indici secondari locali durante l'operazione. Non è necessario eseguire ulteriori passaggi.

Importante

Il livello più alto BulkPutBytes Il totale copre le scritture della tabella e dell'indice secondario. Le scritture sull'indice vettoriale vengono misurate separatamente in BulkPutVectorBytes, nel VectorIndexes mappa, coerente con come PutItem metri di capacità vettoriale. Inserisci BulkPutVectorBytes a BulkPutBytes per il totale completo.