2012-08-02 17 views
21

Tengo un archivo .txt bastante grande ~ 9gb y me gustaría cargar este archivo txt en postgres. La primera fila es el encabezado, seguido de todos los datos. Si publico COPY los datos directamente, el encabezado provocará un error que el tipo de datos no coincida con mi tabla de postgres, por lo que tendré que eliminarlo de alguna manera.Cómo hacer que Copiar Postgres ignore la primera línea del archivo de texto grande

muestra de datos: projectId, MailId, MailCodeId, prospectid, listid, datemailed, cantidad, donado, zip, ZIP4, VectorMajor, VectorMinor, PackageID, fase, DatabaseID, monto2

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 

Mientras que la función de COPIA para postgres tiene la configuración de "cabecera" que puede pasar por alto la primera fila, que sólo funciona para archivos CSV:

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

cuando trato de ejecutar el código anterior en mi archivo txt, se obtiene un error:

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

He intentado añadir "cita" y "escape" atributos, pero simplemente no les parecerá el comando a trabajar para el archivo 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 

Alternativamente, pensé acerca de la ejecución de Java o crear una stagging separada tabla para eliminar la primera fila ... pero estas soluciones son expansivas y requieren mucho tiempo. Tendré que cargar 9 gb de datos solo para eliminar la primera fila de encabezados ... ¿hay otras soluciones para eliminar fácilmente la primera fila de un archivo txt para que pueda cargar los datos en mi base de datos postgres?

+2

La opción _header_ no eliminar la primera línea, no se necesita ninguna utilidad externa para eso. Si eso conduce a "nueva línea no encontrada encontrada en los datos", se plantea una pregunta: ¿cuál es exactamente la estructura de su archivo? ¿En qué se diferencia de [CSV] (http://en.wikipedia.org/wiki/Comma-separated_values)? –

Respuesta

38

opción Usar encabezado con opción 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

Lo siento, mi misatke, cabecera CSV funciona. Los datos en mi archivo txt en realidad tenían un formato diferente de mi archivo csv que dio como resultado el error. – thiakx

Cuestiones relacionadas