Quote e convalida dei formati di importazione - Amazon DynamoDB

Quote e convalida dei formati di importazione

Quote di importazione

La funzionalità DynamoDB di importazione da S3 può supportare fino a 50 processi di importazione simultanea, con una dimensione totale dell'oggetto di origine di importazione pari a 15 TB alla volta nelle regioni us-east-1, us-west-2 e eu-west-1. In tutte le altre regioni, sono supportate fino a 50 attività di importazione simultanee con una dimensione totale di 1 TB. Ogni processo di importazione può elaborare fino a 50.000 oggetti Amazon S3 in tutte le Regioni. Queste quote predefinite vengono applicate a tutti gli account. Se ritieni di dover modificare le quote, contatta il team del tuo account e la questione viene esaminata caso per caso. Per ulteriori informazioni sui limiti di DynamoDB, consulta Service Quotas.

Errori di convalida

Durante il processo di importazione, DynamoDB potrebbe riscontrare errori durante l'analisi dei dati. Per ogni errore, DynamoDB genera un registro CloudWatch e conserva un conteggio del numero totale di errori riscontrati. Se il formato dell'oggetto Amazon S3 è errato o se il suo contenuto non è in grado di formare un elemento DynamoDB, è possibile saltare l'elaborazione della parte rimanente dell'oggetto.

Nota

Se l'origine dei dati di Amazon S3 ha più elementi che condividono la stessa chiave, gli elementi verranno sovrascritti finché non ne rimarrà uno. Potrebbe sembrare che un elemento sia stato importato e che gli altri siano stati ignorati. Gli elementi duplicati verranno sovrascritti in ordine casuale, non vengono conteggiati come errori e non vengono inviati ai file di log di CloudWatch.

Una volta completata l'importazione, puoi vedere il numero totale di elementi importati, il numero totale di errori e il numero totale di elementi elaborati. Per un'ulteriore verifica, puoi anche controllare la dimensione totale degli elementi importati e la dimensione totale dei dati elaborati.

Esistono tre categorie di errori di importazione: errori di convalida API, errori di convalida dei dati ed errori di configurazione.

Errori di convalida API

Gli errori di convalida API sono errori a livello di elemento restituiti dall'API di sincronizzazione. Le cause più comuni sono dovuti a problemi di autorizzazione, parametri obbligatori mancanti ed errori di convalida dei parametri. I dettagli relativi al motivo per cui la chiamata API non è riuscita sono contenuti nelle eccezioni generate dalla richiesta ImportTable.

Errori di convalida dei dati

Gli errori di convalida dei dati possono verificarsi a livello di elemento o di file. Durante l'importazione, gli elementi vengono convalidati in base alle regole DynamoDB prima di venire importati nella tabella di destinazione. Quando un elemento non supera la convalida e non viene importato, il processo di importazione salta l'elemento e passa all'elemento successivo. Alla fine del processo, lo stato di importazione è impostato su FAILED (Non riuscito) con un codice FailureCode (codice di errore), ItemValidationError (errore di convalida elemento) e FailureMessage (messaggio di errore) indicante "Some of the items failed validation checks and were not imported. Please check CloudWatch error logs for more details." (Alcuni elementi non hanno superato i controlli di convalida e non sono stati importati. Controlla i registri degli errori CloudWatch per ulteriori dettagli.)

Le cause più comuni degli errori di convalida dei dati includono oggetti non analizzabili, oggetti in un formato errato (l'input specifica DYNAMODB_JSON ma l'oggetto non è in formato DYNAMODB_JSON) e la mancata corrispondenza tra lo schema e le chiavi della tabella di origine specificate.

Errori di configurazione

Gli errori di configurazione sono in genere errori del flusso di lavoro dovuti alla convalida delle autorizzazioni. Il flusso di lavoro di importazione verifica alcune autorizzazioni dopo aver accettato la richiesta. Se si verificano problemi durante la chiamata a una delle dipendenze richieste come Amazon S3 o CloudWatch, il processo contrassegna lo stato di importazione con FAILED (Non riuscito). I codici failureCode e failureMessage indicano la causa dell'errore. Se applicabile, il messaggio di errore contiene anche l'ID della richiesta che è possibile utilizzare per analizzare il motivo dell'errore in CloudTrail.

Gli errori di configurazione comuni includono URL errati per i bucket Amazon S3 e l'impossibilità di accedere ai bucket Amazon S3, ai registri CloudWatch Logs e alle chiavi AWS KMS utilizzate per decrittografare l'oggetto Amazon S3. Per ulteriori informazioni, consulta l'argomento relativo all'utilizzo e chiavi dati.

Convalida di oggetti Amazon S3 di origine

Per convalidare gli oggetti S3 di origine, esegui questi passaggi.

  1. Convalidare il formato dei dati e il tipo di compressione

    • Assicurarsi che tutti gli oggetti Amazon S3 corrispondenti associati al prefisso specificato abbiano lo stesso formato (DYNAMODB_JSON, DYNAMODB_ION, CSV)

    • Assicurarsi che tutti gli oggetti Amazon S3 corrispondenti associati al prefisso specificato siano compressi allo stesso modo (GZIP, ZSTD, NONE)

      Nota

      Gli oggetti Amazon S3 non devono avere l'estensione corrispondente (.csv/.json/.ion/.gz/.zstd ecc.) poiché il formato di input specificato nella chiamata ImportTable ha la precedenza.

  2. Verificare che i dati di importazione siano conformi allo schema di tabella desiderato

    • Assicurarsi che ogni elemento nei dati di origine includa la chiave primaria. Per le importazioni una chiave di ordinamento è facoltativa.

    • Accertarsi che il tipo di attributo associato alla chiave primaria e a qualsiasi chiave di ordinamento corrisponda al tipo di attributo nello schema di tabella e nello schema GSI, come specificato nei parametri di creazione della tabella

Risoluzione dei problemi

Log CloudWatch

Per i processi di importazione non riusciti, i messaggi di errore dettagliati vengono pubblicati nei registri CloudWatch. Per accedere a questi registri, recupera prima i valori importArn dall'output e describe-import usando questo comando:

aws dynamodb describe-import --import-arn arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311 }

Output di esempio:

aws dynamodb describe-import --import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658528578619-c4d4e311", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "7b7ecc22-302f-4039-8ea9-8e7c3eb2bcb8", "ClientToken": "30f8891c-e478-47f4-af4a-67a5c3b595e3", "S3BucketSource": { "S3BucketOwner": "ACCOUNT", "S3Bucket": "my-import-source", "S3KeyPrefix": "import-test" }, "ErrorCount": 1, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658528578.619, "EndTime": 1658528750.628, "ProcessedSizeBytes": 70, "ProcessedItemCount": 1, "ImportedItemCount": 0, "FailureCode": "ItemValidationError", "FailureMessage": "Some of the items failed validation checks and were not imported. Please check CloudWatch error logs for more details." } }

Recupera il gruppo di log e l'ID di importazione dalla risposta precedente e utilizza questi valori per recuperare i registri degli errori. L'ID di importazione è l'ultimo elemento del percorso del campo ImportArn. Il nome del gruppo di log è /aws-dynamodb/imports. Il nome del flusso di log degli errori è import-id/error. Per questo esempio, sarebbe 01658528578619-c4d4e311/error.

Chiave pk mancante nell'elemento

Se l'oggetto S3 di origine non contiene la chiave primaria specificata come parametro, l'importazione avrà esito negativo, ad esempio quando si definisce la chiave primaria per l'importazione come nome di colonna "pk".

aws dynamodb import-table —s3-bucket-source S3Bucket=my-import-source,S3KeyPrefix=import-test.csv \ —input-format CSV --table-creation-parameters '{"TableName":"target-table","KeySchema": \ [{"AttributeName":"pk","KeyType":"HASH"}],"AttributeDefinitions":[{"AttributeName":"pk","AttributeType":"S"}],"BillingMode":"PAY_PER_REQUEST"}'

La colonna "pk" non è presente nell'oggetto di origine import-test.csv che include i seguenti contenuti:

title,artist,year_of_release The Dark Side of the Moon,Pink Floyd,1973

Questa importazione non avrà esito negativo a causa di un errore di convalida dell'elemento perché manca la chiave primaria nell'origine dei dati.

Esempio di registro degli errori CloudWatch:

aws logs get-log-events —log-group-name /aws-dynamodb/imports —log-stream-name 01658528578619-c4d4e311/error { "events": [ { "timestamp": 1658528745319, "message": "{\"itemS3Pointer\":{\"bucket\":\"my-import-source\",\"key\":\"import-test.csv\",\"itemIndex\":0},\"importArn\":\"arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658528578619-c4d4e311\",\"errorMessages\":[\"One or more parameter values were invalid: Missing the key pk in the item\"]}", "ingestionTime": 1658528745414 } ], "nextForwardToken": "f/36986426953797707963335499204463414460239026137054642176/s", "nextBackwardToken": "b/36986426953797707963335499204463414460239026137054642176/s" }

Questo registro degli errori riporta che uno o più valori di parametro non sono validi e che manca la chiave "pk" nell'elemento. Poiché questo processo di importazione non è riuscito, la tabella "target-table" ora esiste ed è vuota perché non sono stati importati elementi. Il primo elemento è stato elaborato e l'oggetto non ha superato la convalida dell'elemento.

Per risolvere il problema, elimina innanzitutto la tabella "target-table" se non è più necessaria. Usa quindi un nome di colonna chiave primaria esistente nell'oggetto di origine oppure aggiorna i dati di origine nel modo seguente:

pk,title,artist,year_of_release Albums::Rock::Classic::1973::AlbumId::ALB25,The Dark Side of the Moon,Pink Floyd,1973

Tabella di destinazione esistente

Se si avvia un processo di importazione e si riceve una risposta come segue:

An error occurred (ResourceInUseException) when calling the ImportTable operation: Table already exists: target-table

Per correggere questo errore, è necessario scegliere un nome di tabella che non esiste già e provare a rieseguire l'importazione.

Il bucket specificato non esiste.

Se il bucket di origine non esiste, l'importazione avrà esito negativo e registrerà i dettagli del messaggio di errore in CloudWatch.

Esempio di descrizione dell'importazione:

aws dynamodb —endpoint-url $ENDPOINT describe-import —import-arn "arn:aws:dynamodb:us-east-1:531234567890:table/target-table/import/01658530687105-e6035287" { "ImportTableDescription": { "ImportArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table/import/01658530687105-e6035287", "ImportStatus": "FAILED", "TableArn": "arn:aws:dynamodb:us-east-1:ACCOUNT:table/target-table", "TableId": "e1215a82-b8d1-45a8-b2e2-14b9dd8eb99c", "ClientToken": "3048e16a-069b-47a6-9dfb-9c259fd2fb6f", "S3BucketSource": { "S3BucketOwner": "531234567890", "S3Bucket": "BUCKET_DOES_NOT_EXIST", "S3KeyPrefix": "import-test" }, "ErrorCount": 0, "CloudWatchLogGroupArn": "arn:aws:logs:us-east-1:ACCOUNT:log-group:/aws-dynamodb/imports:*", "InputFormat": "CSV", "InputCompressionType": "NONE", "TableCreationParameters": { "TableName": "target-table", "AttributeDefinitions": [ { "AttributeName": "pk", "AttributeType": "S" } ], "KeySchema": [ { "AttributeName": "pk", "KeyType": "HASH" } ], "BillingMode": "PAY_PER_REQUEST" }, "StartTime": 1658530687.105, "EndTime": 1658530701.873, "ProcessedSizeBytes": 0, "ProcessedItemCount": 0, "ImportedItemCount": 0, "FailureCode": "S3NoSuchBucket", "FailureMessage": "The specified bucket does not exist (Service: Amazon S3; Status Code: 404; Error Code: NoSuchBucket; Request ID: Q4W6QYYFDWY6WAKH; S3 Extended Request ID: ObqSlLeIMJpQqHLRX2C5Sy7n+8g6iGPwy7ixg7eEeTuEkg/+chU/JF+RbliWytMlkUlUcuCLTrI=; Proxy: null)" } }

FailureCode è S3NoSuchBucket, con FailureMessag contenente dettagli come l'ID della richiesta e il servizio che ha generato l'errore. Poiché l'errore è stato rilevato prima dell'importazione dei dati nella tabella, non viene creata una nuova tabella DynamoDB. In alcuni casi, quando si verificano questi errori dopo l'avvio dell'importazione dei dati, la tabella con i dati parzialmente importati viene conservata.

Per correggere questo errore, assicurati che il bucket Amazon S3 di origine esista e quindi riavvia il processo di importazione.