EXAloader Exceptions
Wenn ein Fehler beim IMPORT auftritt, rollt die Datenbank immer die aktuelle Transaktion zurück. Der Nutzer erhält eine Fehlermeldung [40001] Global Transaction Rollback. Im Exception-Text findet sich eine detaillierte Erklärung zum aufgetretenen Problem sowie ein zweiter Errorcode, der mit "ETL-" anfängt.
Diese Codes können in folgende Gruppen aufgeteilt werden:
- ETL-21XX CSV Parser Fehler
- ETL-22XX FBV Parser Fehler
- ETL-3XXX Transformationsfehler
- ETL-4XXX Fehler bei externen Datenquelle
Immer wenn es möglich ist, enthalten Fehlermeldungen Datensatznummern, zum Beispiel: "Error while parsing row=2". Eine solche Datensatznummer bezieht sich auf eine Quelldatei, muss aber nicht unbedingt mit der Zeilennummer übereinstimmen. Das ist meist der Fall, wenn ein Zeilenumbruch als Datensatztrennzeichen (ROW SEPARATOR) verwendet wird und Datenbankfelder auch Zeilenumbrüche enthalten können.
Im Folgenden finden Sie für einige dieser Gruppen typische beziehungsweise häufig auftretende Fehler.
Beispiele für IMPORT-Befehl
-
- IMPORT INTO example.mytable FROM CSV AT ftp1 FILE 'mytable.csv';
ETL-21XX CSV Parser Fehler
Bitte beachten Sie, dass CSV nicht standardisiert ist. Das bedeutet, dass Sie bei der Datenübertragung zwischen verschiedenen Systemen auf Kompatibilität achten müssen, um Fehler zu vermeiden. Hierfür ist die Definition der von EXASOL unterstützten CSV Formats von großen Nutzen (siehe User Manual).
In der Tat resultieren beim IMPORT auftretende Probleme meist aus inkompatiblen oder fehlerhaften Dateien. Im Folgenden finden Sie einige typische Beispiele.
ETL-2106: Error while parsing row=2 (starting from 0)
-
- [CSV Parser found at byte 7 (starting with 0 at the beginning of the row) of 33 a field delimiter after an unquoted field (with additional whitespaces). Please check for correct enclosed fields, valid field separators and e.g. unescaped field delimiters that are contained in the data (these have to be escaped)].
Erklärung: Fehlendes Spaltentrennzeichen
In der dritten Zeile fehlt hinter "juhu" das Spaltentrennzeichen (hier: ',')
-
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu" "42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
Lösung: Korrigieren Sie bitte Ihre Eingangsdaten
ETL-2105: Error while parsing row=0 (starting from 0)
-
- [CSV Parser found at byte 33 (starting with 0 at the beginning of the row) of 33 a single field delimiter in enclosed field or not correct enclosed field. Please check for unescaped field delimiters in the data (they have to be
- escaped) and correct enclosing of this field)]
Erklärung: falsch begrenztes CSV Feld
CSV-Parser fand Daten hinter der Feldbegrenzung.
In der Beispieldatei ist in der zweiten Zeile hinter "42" noch das Zeichen 'a' vorhanden.
-
- "juhu","42","2009-12-01","exasol"
- "juhu","42" a,"2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
Lösung: Korrigieren Sie bitte Ihre Eingangsdaten
ETL-2105: Error while parsing row=0 (starting from 0)
-
- [CSV Parser found at byte 33 (starting with 0 at the beginning of the row) of 33 a field delimiter after an unquoted field (with an additional whitespace). Please check for unescaped field delimiters in the data (they have to be escaped) and correct enclosing of this field]
Erklärung: Falsch angegebener Zeilenumbruch
Die Datei enthält <CR><LF> als Zeilenumbruch anstatt normalerweise <LF>. Die Fehlermeldung sieht genauso aus wie im Beispiel oben. <CR> kommt nach dem Anführungszeichen und wird als ungültiges Zeichen außerhalb der Feldbegrenzung interpretiert. Dies kann beispielsweise durch die Bearbeitung mit einigen Textbearbeitungsprogrammen vorkommen.
Lösung: Entweder wird die Datei korrigiert oder Sie könenn das Zeichen für den Zeilenumbruch muss entsprechend angeben:
-
- IMPORT INTO example.mytable FROM CSV
- AT ftp1 FILE 'mytable.csv'
- ROW SEPARATOR='CRLF';
ETL-2101: Error while parsing row=2 (starting from 0)
-
- [CSV Parser found incorrect number of columns. Expected: [4], found [1] columns]
Erklärung: Leere Zeile in einer Datei
In der Beispieldatei ist die dritte Zeile leer. Bei einer Datei mit einer Spalte würde eine leere Zeile eine NULL-Marke bedeuten. Dies erklärt die Eins bei der Anzahl der gefundenen Spalten.
-
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
Lösung: Entweder kann die fehlerhafte Zeile als Kommentar gekennzeichnet werden (führendes Zeichen: '#') oder sie soll aus den Eingangsdaten entfernt werden.
ETL-3XXX Transformationsfehler
Zu dieser Gruppe gehören Fehler, die bei der Interpretation der Daten selbst auftreten. Hier wird zusätzlich zur Datensatznummer auch die entsprechende Spaltennummer und wenn möglich der Wert, der nicht interpretiert werden konnte.
ETL-3013: [Column=2 Row=0]
-
- [Data '01.12.2009' doesn't match FORMAT 'YYYY-MM-DD'. Couldn't identify $3$]
Erklärung: falsches Datumsformat in einer DATE-Spalte
Anstatt in der Schreibweise YYYY-MM-DD ist in einer Datei das Datum im Format DD.MM.YYYY angegeben.
-
- "juhu","42","01.12.2009","exasol"
- "juhu","42","01.12.2009","exasol"
- "juhu","42","01.12.2009","exasol"
- "juhu","42","01.12.2009","exasol"
- "juhu","42","01.12.2009","exasol"
Lösung: Es kann für die dritte Spalte ein abweichendes FORMAT angegeben werden um die Daten zu laden:
-
- IMPORT INTO example.mytable FROM CSV
- AT ftp1 FILE 'mytable.csv'
- (1,2,3 FORMAT='DD.MM.YYYY');
ETL-3022: [Column=1 Row=0]
-
- [Data '42' is out of range for DECIMAL(1,1)]
Erklärung: Einfügen eines Wertes außerhalb des Bereichs der Spalte (OutOfRange)
In diesem Beispiel ist die zweite Spalte vom Typ DECIMAL(1,1). '42' kann nicht eingefügt werden.
-
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
Lösung:
Sie haben 2 Möglichkeiten:
zum einen, können Sie durch Anpassung des Wertebereichs der Zieltabelle die Daten in die so geänderte Zieltabelle einfügen. Wenn die Daten tatsächlich zu groß sind, können Sie die betroffene Spalte beim Ladevorgang auslassen.
ETL-3010: [Column=1 Row=0]
-
- [Data 'juhu' doesn't match format for DECIMAL. Valid data is e.g.: '123.45e-2']
Erklärung: Fehlerhafte Daten
In einer Decimal-Spalte kommt ein Text vor.
- "juhu","42","2009-12-01","exasol" "juhu","juhu","2009-12-01","exasol" "juhu","42","2009-12-01","exasol" "juhu","42","2009-12-01","exasol"
Lösung: Korrigieren Sie bitte Ihre Eingangsdaten
ETL-3002: [Column=0 Row=1]
-
- [Invalid byte stream for UTF-8 encoding. Please check the encoding setting and the input data]
Erklärung: Laden einer Datei im falschen encoding
In diesem Szenario enthält die Datei das Sonderzeichen 'ü' und die Datei ist im encoding 'Latin1' abgespeichert.
Beispieldatei ETL-3002
-
- "juhu","42","2009-12-01","exasol"
- "üppig","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
- "juhu","42","2009-12-01","exasol"
Lösung: Das entsprechende Encoding kann überschrieben werden:
-
- IMPORT INTO example.mytable FROM CSV
- AT ftp1 FILE 'mytable.csv'
- ENCODING='Latin-1';
Beispiele für EXPORT
Beim Exportieren von Daten kommen in der Regel nur Data Exceptions vor. Da die Inhalte der Quelldatenbank nicht verändert werden, tritt auch kein GlobalTransactionRollback auf.
ETL-3XXX Transformationsfehler
Error: [42636] ETL-3003: [Column=0]
[String data right truncation. String length exceeds limit of 2 characters]
Erklärung: der Wert ist zu groß
Es wird versucht, eine Zeichenkette 'juhu' bestehend aus 4 Zeichen in eine Spalte einzufügen, die lediglich 2 Zeichen zulässt (VARCHAR(2))
-
- --lokale EXASolution:
- CREATE TABLE stringtruncorig
- (c1 VARCHAR(10), c2 DECIMAL, c3 DATE, c4 CHAR(10));
- INSERT INTO strintruncorig
- VALUES('juhu', 42, '2009-12-01', 'exasol');
- ---externe EXASolution:
- CREATE TABLE stringtrunc
- (c1 VARCHAR(2), c2 DECIMAL, c3 DATE, c4 CHAR(10));
- EXPORT example.stringtruncorig INTO EXA AT external_exa
- TABLE example.stringtrunc;
Lösung: Folgende Lösungsansätze stehen Ihnen zur Verfügung:
- Anpassung der Datentypen in der externen EXASolution
- Auslassen der entsprechenden Spalte
- Gestaltung der Quelldaten als eine SELECT-Abfrage, wo Daten auf maximal 2 Zeichen abgeschnitten werden.















