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

Verwenden Sie die Tabelle STL_LOAD_ERRORS, um Datenladefehler zu identifizieren, die beim Laden einer flachen Datei auftreten. Die Tabelle STL_LOAD_ERRORS kann Ihnen helfen, den Fortschritt eines Datenladevorgangs zu verfolgen und alle Ausfälle oder Fehler aufzuzeichnen. Nachdem Sie das Problem behoben haben, verwenden Sie den Befehl COPY, um die Daten in der flachen Datei neu zu laden.

Hinweis: Wenn Sie den Befehl COPY verwenden, um eine flache Datei im Parquet-Format zu laden, können Sie auch die Tabelle SVL_S3LOG verwenden, um Fehler zu identifizieren.

Behebung

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

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

  1. Überprüfen Sie die Daten in Ihrer flachen Beispieldatei und stellen Sie sicher, 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 obigen Beispieldatei demo.txt sind die 5 verwendeten Felder durch Pipe-Zeichen getrennt. Weitere Informationen finden Sie unter LISTING aus einer durch Pipe getrennten Datei laden (Standardbegrenzer).

  2. Öffnen Sie die Amazon Redshift-Konsole.

  3. Verwenden Sie 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, erstellen Sie 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ühren Sie den Befehl COPY aus:

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

    Hinweis: Ersetzen Sie your_S3_bucket durch den Namen Ihres S3-Buckets und arn:aws:iam::123456789012:role/redshiftcopyfroms3 durch den ARN für Ihre AWS Identity and Access Management (IAM)-Rolle. Die IAM-Rolle muss über Berechtigungen für den Zugriff auf Daten aus Ihrem S3-Bucket verfügen. Weitere Informationen finden Sie unter Parameter.

  6. Um die Details der Ladefehler der Tabelle anzuzeigen und zu überprüfen, fragen Sie 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 obigen 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ühren Sie eine der folgenden Aufgaben aus, um dieses Problem zu beheben:
    Wenn zu erwarten ist, dass die Daten die definierte Länge der Spalte überschreiten, aktualisieren Sie die Tabellendefinition, um die Spaltenlänge zu ändern.
    -oder-
    Wenn die Daten nicht richtig formatiert oder transformiert sind, ändern Sie 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. Ändern Sie die Daten in Ihrer 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. Laden Sie 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 vorhalten. Standardbenutzer können nur ihre eigenen Daten anzeigen, wenn sie die Tabelle STL_LOAD_ERRORS abfragen. Um alle Tabellendaten anzeigen zu können, müssen Sie ein Superuser sein.

Verwandte 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 OFFICIAL
AWS OFFICIALAktualisiert vor 5 Monaten