2012-08-02 11 views
21

Mam dość duży plik .txt ~ 9GB i będę chciał załadować ten plik TXT do PostgreSQL. Pierwszy wiersz to nagłówek, a następnie wszystkie dane. Jeśli zgłoszę bezpośrednio COPY dane, nagłówek spowoduje błąd, że typ danych nie pasuje do mojej tabeli postgres, więc będę musiał go jakoś usunąć.Jak wykonać Postgres Copy zignorować pierwszą linię dużego pliku txt

próbki danych: ProjectID, MailId, MailCodeId, prospectid, listid, datemailed, ilości pobrane, suwak, zip4, VectorMajor, VectorMinor, packageid, faza databaseid, limitu2

15,53568419,89734,219906,15,2011-05-11 00:00:00,0,0,90720,2915,NonProfit,POLICY,230,3,1,0 

16,84141863,87936,164657,243,2011-03-10 00:00:00,0,0,48362,2523,NonProfit,POLICY,1507,5,1,0 

16,81442028,86632,15181625,243,2011-01-19 00:00:00,0,0,11501,2115,NonProfit,POLICY,1508,2,1,0 

Chociaż funkcja kopiowania dla PostgreSQL posiada „nagłówek” ustawienie, które można pominąć pierwszego rzędu, to działa tylko dla plików csv:

copy training from 'C:/testCSV.csv' DELIMITER ',' csv header; 

gdy próbuję uruchomić powyższy kod w moim pliku txt, robi błąd:

copy training from 'C:/testTXTFile.txt' DELIMITER ',' csv header 
ERROR: unquoted newline found in data 
HINT: Use quoted CSV field to represent newline. 

Próbowałem dodając „cytat” i „Escape” atrybuty ale polecenie po prostu nie wydają się działać dla pliku txt:

copy training from 'C:/testTXTFile.txt' DELIMITER ',' csv header quote as E'"' escape as E'\\N'; 
ERROR: COPY escape must be a single one-byte character 

Alternatywnie, myślałem o bieganiu Java lub utwórz stagging oddzielna tabela, aby usunąć pierwszy wiersz ... ale te rozwiązania są ekspansywne i czasochłonne. Będę musiał załadować 9 gb danych tylko po to, aby usunąć pierwszy rząd nagłówków ... czy istnieją inne rozwiązania, które pozwalają łatwo usunąć pierwszy wiersz pliku txt, tak że mogę załadować dane do mojej bazy danych Postgres?

+2

Opcja _header_ usuwa pierwszą linię, nie narzędzie zewnętrzne jest potrzebne do tego. Jeśli to prowadzi do "niecytowanej nowej linii znalezionej w danych", rodzi się pytanie: jaka jest dokładnie struktura twojego pliku? Czym się różni od [CSV] (http://en.wikipedia.org/wiki/Comma-separated_values)? –

Odpowiedz

38

opcja Użyj nagłówek z opcją CSV:

WITH CSV HEADER DELIMITER AS ',' 

HEADER Specifies that the file contains a header line with the names of each column in the file. On output, the first line contains the column names from the table, and on input, the first line is ignored. This option is allowed only when using CSV format.

+0

Niestety, mój błąd, nagłówek CSV działa. Dane w moim pliku TXT miały faktycznie inny format niż mój plik CSV, który spowodował błąd. – thiakx

Powiązane problemy