Direkt zum Inhalt

Wie behebe ich Fehler beim Laden von Daten, wenn ich den COPY-Befehl in Amazon Redshift verwende?

Lesedauer: 4 Minute
0

Ich habe versucht, den COPY-Befehl zu verwenden, um eine flache Date zu laden. Ich stoße jedoch auf Probleme oder Fehler beim Laden von Daten in Amazon Redshift.

Kurzbeschreibung

Verwende die Tabelle STL_LOAD_ERRORS, um Datenladefehler zu identifizieren, die beim Laden einer flachen Datei auftreten. Die Tabelle STL_LOAD_ERRORS kann dir helfen, den Fortschritt eines Datenladevorgangs zu verfolgen und alle Ausfälle oder Fehler aufzuzeichnen. Nachdem du das Problem behoben hast, verwende den COPY-Befehl, um die Daten in der flachen Datei neu zu laden.

Hinweis: Wenn du den COPY-Befehl verwendest, um eine flache Datei im Parquet-Format zu laden, kannst du auch die Tabelle SVL_S3LOG verwenden, um Fehler zu identifizieren.

Lösung

Hinweis: Für die folgenden Schritte wird ein Beispieldatensatz mit Städten und Veranstaltungsorten verwendet.

Gehe wie folgt vor, um mithilfe der Tabelle STL_LOAD_ERRORS Datenladefehler zu identifizieren:

  1. Überprüfe die Daten in der flachen Beispieldatei und vergewissere dich, dass die Quelldaten gültig sind:

    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

    In der vorherigen Beispieldatei demo.txt sind die fünf verwendeten Felder durch Pipe-Zeichen getrennt. Weitere Informationen findest du unter LISTING aus einer durch Pipe getrennten Datei laden (Standardtrennzeichen).

  2. Öffne die Amazon-Redshift-Konsole.

  3. Verwende die folgende Datendefinitionssprache (DDL), um eine Beispieltabelle zu erstellen:

    CREATE TABLE VENUE1(VENUEID SMALLINT,  
    VENUENAME VARCHAR(100),  
    VENUECITY VARCHAR(30),  
    VENUESTATE CHAR(2),  
    VENUESEATS INTEGER  
    ) DISTSTYLE EVEN;
  4. Um die Ursache des Datenladefehlers zu identifizieren, erstelle eine Ansicht mit einer Vorschau der relevanten Spalten aus der STL_LOAD_ERRORS-Tabelle:

    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. Um die Daten zu laden, führe den COPY-Befehl aus:

    copy Demofrom 's3://your_S3_bucket/venue/'  
    iam_role 'arn:aws:iam::123456789012:role/redshiftcopyfroms3'  
    delimiter '|' ;

    Hinweis: Ersetze your_S3_bucket durch den Namen deines S3-Buckets und arn:aws:iam::123456789012:role/redshiftcopyfroms3 durch den ARN für deine AWS Identity and Access Management (IAM)-Rolle. Die IAM-Rolle muss über Berechtigungen für den Zugriff auf Daten aus dem S3-Bucket verfügen. Weitere Informationen findest du unter Parameter.

  6. Um die Details der Ladefehler der Tabelle anzuzeigen und zu überprüfen, frage die Ladeansicht ab:

    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

    Im vorherigen Beispiel wird die Ausnahme durch den Längenwert verursacht und muss der Spalte venuestate hinzugefügt werden. Der Wert (NC ,25 |) ist länger als die in der VENUESTATE CHAR(2)-DDL definierte Länge.
    Führe eine der folgenden Aufgaben aus, um dieses Problem zu beheben:
    Wenn zu erwarten ist, dass die Daten die definierte Länge der Spalte überschreiten, aktualisiere die Tabellendefinition, um die Spaltenlänge zu ändern.
    -oder-
    Wenn die Daten nicht richtig formatiert oder transformiert sind, ändere die Daten in der Datei, um den richtigen Wert zu verwenden.
    Die Ausgabe der Abfrage enthält die folgenden Informationen:
    Die Datei, die den Fehler verursacht
    Die Spalte, die den Fehler verursacht
    Die Zeilennummer in der Eingabedatei
    Den Grund für die Ausnahme

  7. Ändere die Daten in der Ladedatei, um die richtigen Werte zu verwenden:

    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

    Hinweis: Die Länge muss mit der definierten Spaltenlänge übereinstimmen.

  8. Lade die Daten erneut:

    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.

    Hinweis: Die Tabelle STL_LOAD_ERRORS kann nur eine begrenzte Anzahl von Protokollen für ungefähr 4 bis 5 Tage halten. Standardbenutzer können nur ihre eigenen Daten anzeigen, wenn sie die Tabelle STL_LOAD_ERRORS abfragen. Um alle Tabellendaten anzeigen zu können, musst du ein Superuser sein.

Ähnliche Informationen

Bewährte Methoden für Amazon Redshift für das Entwerfen von Tabellen

Bewährte Methoden für Amazon Redshift für das Laden von Daten

Systemtabellen zur Problembehandlung beim Laden von Daten

Arbeiten mit Empfehlungen von Amazon Redshift Advisor

AWS OFFICIALAktualisiert vor 3 Jahren