Come posso risolvere gli errori di caricamento dei dati quando utilizzo il comando COPY in Amazon Redshift?
Ho provato a usare il comando COPY per caricare un file flat. Tuttavia, ho riscontrato problemi o errori di caricamento dei dati in Amazon Redshift.
Breve descrizione
Usa la tabella STL_LOAD_ERRORS per identificare gli errori di caricamento dei dati che si verificano durante il caricamento di un file flat. La tabella STL_LOAD_ERRORS può aiutarti a monitorare l'avanzamento del processo di caricamento dei dati e registrare eventuali problemi o errori. Dopo aver risolto il problema, usa il comando COPY per ricaricare i dati nel file flat.
Nota: se si utilizza il comando COPY per caricare un file flat in formato Parquet, è possibile utilizzare anche la tabella SVL_S3LOG per identificare gli errori.
Risoluzione
Nota: i passaggi seguenti sfruttano un set di dati di luoghi e città di esempio.
Per identificare gli errori di caricamento dei dati usando la tabella STL_LOAD_ERRORS, completa i passaggi seguenti:
-
Controlla i dati nel tuo file flat di esempio e conferma che i dati di origine siano validi:
7|BMO Field|Toronto|ON|016|TD Garden|Boston|MA|0 23|The Palace of Auburn Hills|Auburn Hills|MI|0 28|American Airlines Arena|Miami|FL|0 37|Staples Center|Los Angeles|CA|0 42|FedExForum|Memphis|TN|0 52|PNC Arena|Raleigh|NC ,25 |0 59|Scotiabank Saddledome|Calgary|AB|0 66|SAP Center|San Jose|CA|0 73|Heinz Field|Pittsburgh|PA|65050
Nel file demo.txt dell'esempio precedente, un carattere pipe separa i cinque campi utilizzati. Per ulteriori informazioni, consulta la sezione Caricamento di LISTING da un file delimitato da pipe (Delimitatore predefinito).
-
Apri la console Amazon Redshift.
-
Usa il seguente linguaggio di definizione dei dati (DDL) per creare una tabella di esempio:
CREATE TABLE VENUE1(VENUEID SMALLINT, VENUENAME VARCHAR(100), VENUECITY VARCHAR(30), VENUESTATE CHAR(2), VENUESEATS INTEGER ) DISTSTYLE EVEN;
-
Per identificare la causa dell'errore di caricamento dei dati, crea una vista per visualizzare in anteprima le colonne pertinenti della tabella STL_LOAD_ERRORS:
create view loadview as(select distinct tbl, trim(name) as table_name, query, starttime, trim(filename) as input, line_number, colname, err_code, trim(err_reason) as reason from stl_load_errors sl, stv_tbl_perm sp where sl.tbl = sp.id);
-
Per caricare i dati, esegui il comando COPY:
copy Demofrom 's3://your_S3_bucket/venue/' iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3' delimiter '|' ;
Nota: sostituisci your_S3_bucket con il nome del tuo bucket S3 e arn:aws:iam::123456789012:role/redshiftcopyfroms3 con l'ARN per il tuo ruolo AWS Identity and Access Management (IAM). Il ruolo IAM deve avere le autorizzazioni per accedere ai dati dal bucket S3. Per ulteriori informazioni, consulta la sezione Parametri.
-
Per visualizzare ed esaminare i dettagli dell'errore di caricamento della tabella, esegui una query per la visualizzazione del caricamento:
testdb=# select * from loadview where table_name='venue1';tbl | 265190 table_name | venue1 query | 5790 starttime | 2017-07-03 11:54:22.864584 input | s3:// your_S3_bucket/venue/venue_pipe0000_part_00 line_number | 7 colname | venuestate err_code | 1204 reason | Char length exceeds DDL length
Nell'esempio precedente, l'eccezione è causata dal valore della lunghezza e deve essere aggiunta alla colonna venuestate. Il valore (NC ,25 |) è più lungo della lunghezza stabilita nel DDL VENUESTATE CHAR (2).
Per risolvere questo problema, completa una delle operazioni seguenti:
Se si prevede che i dati superino la lunghezza stabilita per la colonna, allora bisognerà aggiornare la definizione della tabella per modificare la lunghezza della colonna.
-oppure-
Se i dati non sono formattati o trasformati in modo corretto, modifica i dati nel file per utilizzare il valore giusto.
L'output della query include le seguenti informazioni:
Il file che causa l'errore
La colonna che causa l'errore
Il numero di riga nel file di input
Il motivo dell'eccezione -
Modifica i dati nel file di caricamento per utilizzare i valori corretti:
7|BMO Field|Toronto|ON|016|TD Garden|Boston|MA|0 23|The Palace of Auburn Hills|Auburn Hills|MI|0 28|American Airlines Arena|Miami|FL|0 37|Staples Center|Los Angeles|CA|0 42|FedExForum|Memphis|TN|0 52|PNC Arena|Raleigh|NC|0 59|Scotiabank Saddledome|Calgary|AB|0 66|SAP Center|San Jose|CA|0 73|Heinz Field|Pittsburgh|PA|65050
Nota: la lunghezza deve essere allineata alla lunghezza stabilita per la colonna.
-
Effettua nuovamente il caricamento dei dati:
testdb=# copy Demofrom 's3://your_S3_bucket/sales/' iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3' delimiter '|' ; INFO: Load into table 'venue1' completed, 808 record(s) loaded successfully.
Nota: la tabella STL_LOAD_ERRORS può contenere solo un numero limitato di log e per circa 4-5 giorni. Quando interrogano la tabella STL_LOAD_ERRORS, gli utenti standard possono visualizzare solo i propri dati. Per visualizzare tutti i dati della tabella bisogna essere un superutente.
Informazioni correlate
Best practice di Amazon Redshift per la progettazione di tabelle
Best practice di Amazon Redshift per il caricamento di dati
Tabelle di sistema per la risoluzione di caricamento dei dati
Video correlati
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa