2016-07-25 23 views
-1

Ich lade CSV-Dateien in PostgreSQL-Tabellen mithilfe der Massenlade-Methode COPY. Es gibt einige Felder, die einen schlechten Charakter haben (wie "|", "" ","; "usw.). So bekomme ich beim Laden immer einen anderen Fehler. Ich habe versucht, mit Tabulator-Trennzeichen, Komma-Trennzeichen und andere Optionen auch, aber kein Glück.CSV-Daten beim Laden in PostgreSQL filtern oder bereinigen

gibt es eine Möglichkeit, ich CSV-Daten, bevor sie zu PostgreSQL mit COPY Befehl Laden oder gibt es eine COPY Befehlssyntax reinigen kann, die schlechten Zeichen, um etwas Standard ersetzen kann?

Dies sind die einige der Syntax ich versucht habe.

COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER ',' NULL '?'; 
COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER '|' NULL '?'; 
COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER E'\t' NULL '?'; 
COPY tblsf FROM '/filelocation/test.csv' WITH CSV HEADER DELIMITER '<>' NULL '?'; 

Vielen Dank im Voraus

+0

Wenn Ihre Datei mal geformt ist, haben Sie grundsätzlich zwei Möglichkeiten: (a) Bereiten Sie es vor, bevor Sie versuchen, nach PostgreSQL zu "kopieren"; (b) "KOPIEREN" Sie die Datensätze in eine einspaltige Tabelle und "säubern" Sie die Daten in PostgreSQL. – Nicarus

+0

@Nicarus Es gibt noch zwei weitere Möglichkeiten: (c) benutze 'copy ... from program' von' copy' (seit v 9.3); (d) den Anbieter der Datei bitten, sein Format entsprechend dem CSV-Standard festzulegen. – Abelisto

+0

@Abelisto - Es wird entweder innerhalb von PostgreSQL oder außerhalb davon "gesäubert". :-) – Nicarus

Antwort

1

Manchmal erhalten Sie eine Datei, die nicht mit utf-8 codiert ist. Versuchen Sie folgendes:

iconv -f utf-8 -t utf-8 -c /filelocation/test.csv > /filelocation/test_clean.csv 

Und dann versuchen, die Postgresql Kopie (unter Befehl geht davon aus, dass die Felder durch Kommas getrennt):

COPY tblsf FROM '/filelocation/test_clean.csv' WITH CSV HEADER DELIMITER ','; 

Wenn Sie eine Fehl gebildet Datei haben, zum Beispiel:

company,owner 
John's Pizza, LLC,John Smith 
Burger Co,Jones, Mike 

Sie müssen die Daten in einem korrigierten Format speichern. Zum Beispiel:

"company","owner" 
"John's Pizza, LLC","John Smith" 
"Burger Co","Jones, Mike" 

Sobald Sie eine saubere Datei haben, können Sie es bearbeiten und erneut speichern es ein anderes Trennzeichen (zB in Excel oder mit dem CSV-Modul in Python) verwenden. Bevor es mit dem neuen Trennzeichen zu speichern, werden Sie wollen, dass die Trennzeichen aus der Datei schrubben, beispielsweise im Fall von Rohren |:

sed -i 's/|//g' test_clean.csv