Come posso risolvere gli errori di caricamento dei dati quando utilizzo il comando COPY in Amazon Redshift?

4 minuti di lettura
0

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:

  1. 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).

  2. Apri la console Amazon Redshift.

  3. 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;
  4. 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);
  5. 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.

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

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

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

Utilizzo dei suggerimenti di Amazon Redshift Advisor

AWS UFFICIALE
AWS UFFICIALEAggiornata 4 mesi fa