RE: Considerar '' como nulo en carga de datos desde csv

From: "Jorge Tornero" <jorge(dot)tornero(at)cd(dot)ieo(dot)es>
To: <rruizf(at)gmail(dot)com>, <francisco(dot)morosini(at)gmail(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Considerar '' como nulo en carga de datos desde csv
Date: 2011-02-01 21:28:42
Message-ID: 7BDD1998D03D9A4B9DAD0038863D30AF02B98C@ieocadizb.cd.ieo.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola Rodrigo y resto del personal,

lo que tú quieres hacer, bajo mi punto de vista, está pidiendo a gritos sed y/o tr (doy por supuesto que trabajas en GNU/linux). Yo tenía un problema similar con csv en los que el separador decimal era la coma y lo tenía que cambiar a punto y con la orden sed o tr apropiada un fichero de 60MB con 350000 registros se lo merienda en cosa de 0.7 segundos (de veras). Además, te da igual que en los campos de texto no haya comillas, postgresql te los importa igual, de manera que puedes seguir con el copy (más sencillo, simplemente \copy data from 'mifichero.csv' with delimiter ';' csv header (o con el comando COPY, lo que ocurre es que yo uso \copy en psql para evitar rollos de permisos en directorios, etc...)

Con sed:

sed 's/\"//g' <ficheroentrada >ficherosalida

y con tr:

tr -d \" <ficheroentrada >ficherosalida

(revísalos porque son de medio memorieta)

El resultado es espectacular de veras. Adicionalmente, si trabajas en KDE (no sé si Gnome lo permite), te puedes hacer un servicemenu de manera que sólo tendrías que darle al botón derecho del ratón y seleccionar del menú contextual tu acción (eliminar comillas o algo así, a tu gusto) de manera que te sería todo mucho más sencillo. Es más, en tu propio script para el servicemenu puedes incluir la llamada a psql con el comando \copy y ya te haría la importación del tirón. Pero eso es otra historia...

Un saludo, pruébalo y ya nos cuentas.

Jorge Tornero
Centro Oceanográfico de Cádiz
Instituto Español de Oceanografía
Muelle de Levante, s/n
Puerto Pesquero - Cadiz

-----Mensaje original-----
De: pgsql-es-ayuda-owner(at)postgresql(dot)org en nombre de Rodrigo Ruiz Fuentes
Enviado el: mar 01/02/2011 20:52
Para: francisco(dot)morosini(at)gmail(dot)com
CC: pgsql-es-ayuda(at)postgresql(dot)org
Asunto: Re: [pgsql-es-ayuda] Considerar '' como nulo en carga de datos desde csv

On 01/02/11 16:22, Francisco Javier Morosini Eguren wrote:
> hola doc, el copy csv es muy limitado, te recomendaria que hagas un
> programa que lo parsee y lo ingrese directamente a la tabla,
> justamente lo que reportas es debido a que el csv no es muy
> inteligente que digamos.
>
> Saludos
>

Changos!... un programa para ello?, ya no sería tan rápida la carga...
como no habrá algún truco?
La verdad, es que podría dejar los campos como character varying, sin
embargo, luego para utilizar funciones u operadores matemáticos sobre
los datos debo pasarlos a numérico, quizás sea lo más rápido y fácil...

> 2011/2/1 Rodrigo Ruiz Fuentes<rruizf(at)gmail(dot)com>:
>> Estimad(at)s,
>> estoy importando datos desde un archivo CSV con formato definido, los campos
>> vienen separados por punto y coma (;) y entre comillas dobles ("), estoy
>> ejecutando:
>>
>> COPY data FROM '/tmp/archivo.txt' WITH NULL AS '' DELIMITER ';' CSV QUOTE
>> '"';
>>
>> Sin embargo, hay unos campos (latitud y longitud) que son tipo 'double
>> precision', y cuando esos datos vienen vacios (en CSV ""), no reconoce el
>> tipo de dato y falla la carga, intenté como pueden ver con "NULL AS ''" sin
>> embargo sigue fallando.
>> Estoy sobre PostgreSQL 8.4.X, y la pregunta es como puedo hacer para que
>> esos valores que vienen vacíos ("") los tome como null, en el diseño,
>> permite valores nulos.
>>
>> Intentar es una editar directamente el archivo sería muy engorroso, pues
>> pesa mucho y son como 14 millones de registros semanales, y el archivo llega
>> cada semana.
>>
>> Saludos cordiales.-
>>
>> --
>> Rodrigo Ruiz Fuentes
>>
>> -
>> Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
>> Para cambiar tu suscripción:
>> http://www.postgresql.org/mailpref/pgsql-es-ayuda
>>
>
>

--
Rodrigo Ruiz Fuentes

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripcin:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jorge Tornero 2011-02-02 07:23:08 RE: Considerar '' como nulo en carga de datos desde csv
Previous Message Francisco Rodríguez 2011-02-01 19:53:55 Sincronizas postgresql con mysql