Wie behebe ich Fehler beim Laden von Daten, wenn ich den COPY-Befehl in Amazon Redshift verwende?
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:
-
Ü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|65050In 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).
-
Öffne die Amazon-Redshift-Konsole.
-
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; -
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); -
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.
-
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 lengthIm 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 -
Ä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|65050Hinweis: Die Länge muss mit der definierten Spaltenlänge übereinstimmen.
-
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
- Themen
- Analytics
- Tags
- Amazon Redshift
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor einem Jahr
AWS OFFICIALAktualisiert vor einem Jahr