Ich habe ein Problem in einem Prozess Ich schreibe Daten aus einer großen flachen Datei zu erfassen. Ich Vorverarbeitung die flache Datei ein Python-Wrapper mit UTF8 Spezifikationen wie folgt verwendet: wrFile = io.open("outFile","w+",encoding='utf8')
GPFdist einfügen von Flat-Datei löst Fehler 'ungültige Byte-Sequenz für die Codierung "UTF8": 0x00' auf Einfügen
Ich bin die Quelldatei Zeile für Zeile zu lesen mit: lineACT = linecache.getline("inFile", i+j) lineNxt = linecache.getline("inFile", i+j+1)
Ferner wird, nachdem die Linien Vorverarbeitung ich schreibe die Datei wie folgt: wrFile.write(lineACT)
Durch Iteration durch die Anzahl der Zeilen in der Infile, ich erstelle das outfile.
Jetzt ist die Datei bereit, in eine externe postgresql
Tabelle mit der folgenden Abfrage aufgenommen werden. Der Lader Anwendung wird in Java
geschrieben und alle Konfigurationen verwenden eine Properties-Datei übergeben:
-- CREATE EXTERNAL TABLE FOR A SPECIFIC CLIENT
CREATE EXTERNAL TABLE outTable ( col1 character(3), col2
character(3),.....)
LOCATION ('<LocationOf outFile>')
FORMAT 'CUSTOM' (formatter=fixedwidth_in,col1='3',col2='3'......)
LOG ERRORS INTO errorTable SEGMENT REJECT LIMIT 2 ROWS;
-- INSERT INTO DELTA TABLE
INSERT INTO deltaTable
SELECT col1, col2,......
FROM outTable
;
-- DROP EXTERNAL TABLE
DROP EXTERNAL TABLE IF EXISTS outTable;
das Laufen auf einem UNIX
Box wirft mich eine Ausnahme:
Cause: org.postgresql.util.PSQLException: ERROR: Segment reject limit reached. Aborting operation. Last error was: Expected line size from the formatting string: 1655, but the actual size is: 455 (seg43 slice1 uxpbdpsdw06.dstcorp.net:1028 pid=335160)
Hinweis: Jede Zeile in outFile hat 1655 Zeichen. Säulenstruktur der beiden outTable & deltaTable sind auch 1655 Wenn ich überprüfen, in die errorTable ich diese finden in errmsg
Spalte:
invalid byte sequence for encoding "UTF8": 0x00
Nun, ich vermute, dass die Datenbank nicht Akzeptieren der null
Zeichen '0x00'
in der Datei aufgrund der Codierungseigenschaften der db, die ich überprüft habe, ist 'UTF8'
Ich habe versucht, die null Zeichen aus der Datei mit den folgenden Bash-Befehle zu entfernen:
sed 's/\x0/-9/g' outFile > outFile_
&
tr < outFile -d '\000' > outFile_
aber nichts hat sich bis jetzt gearbeitet. Kann jemand bitte einen Vorschlag einreichen, wie es funktioniert?
-
Vielen Dank im Voraus!
Haben Sie bestätigt, dass die "outFile_" tatsächlich die Nullbytes entfernt hat? Haben Sie auch "outFile" durch "outFIle_" ersetzt, oder ändern Sie die Tabelle, um Daten von "outFile_" zu laden? –
Wenn Sie in Python vorverarbeiten, dann entfernen Sie die Nullbytes dann? 'line.replace (" \ 0 "," ")' oder was auch immer, vorausgesetzt, sie sind ansonsten bedeutungslos. –