Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Importar .csv o .txt a mysql

Estas en el tema de Importar .csv o .txt a mysql en el foro de Mysql en Foros del Web. A ver tengo un fichero .txt con ciudades del mundo y lo quiero exportar a mysql. 1º) ¿Es mejor pasarlo a .csv? 2º) ¿Cómo lo ...
  #1 (permalink)  
Antiguo 28/09/2009, 06:07
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Importar .csv o .txt a mysql

A ver tengo un fichero .txt con ciudades del mundo y lo quiero exportar a mysql.

1º) ¿Es mejor pasarlo a .csv?

2º) ¿Cómo lo importo?

Tengo una ligera idea, ¿es algo así?

load data infile 'C:\\ruta\\al\\archivo.csv'
into table tabla
fields terminated by ',' enclosed by '"'
LINES TERMINATED BY '\n'
(pais,sintildes,nombre,provincia,longitud,latitud) ;

3º) Aquí viene el principal problema,el archivo comprimido ocupa 30 MB y sin comprimir 120 MB. Esto puede tardar 10 años en exportarse, ¿hay forma de exportarlo en partes?

Muchas gracias al que responda
  #2 (permalink)  
Antiguo 28/09/2009, 06:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Importar .csv o .txt a mysql

1. "Pasarlo a .CSV", depende de su origen.Si es un Excel, hazlo. Si es un .TXT, depende de cómo sea el contenido. No nos estás diciendo nada de cómo están armados los datos en ese archivo.
2. Para darte la sintaxis correcta, necesitamos lo mismo que no estás dando en el primer punto: ¿Es una tabla separada por comas, puntos y coma o tabulaciones? ¿Tiene una línea de encabezados? ¿Los campos numéricos y los de cadenas están ambos encerrados entre comillas o apóstrofes? ¿Tiene datos de fechas? Si tiene datos de fechas, ¿en qué formato están grabados (DMY, MDY, YMD)?
3.
Cita:
,el archivo comprimido ocupa 30 MB y sin comprimir 120 MB.
Eso no es problema. Un backup completo de una base de 170 Mb (más de 50 millones de registros en una des sus principales tablas) puede tardar alrededor de 7 minutos en cargarse en mi PC.
Una tabla cargada con LOAD DATA, por más que tenga la longitud que dices, debería tardar muy poco en cargarse, sobre todo si la tabla a donde se carga no tiene demasiados índices definidos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 28/09/2009, 06:34
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Importar .csv o .txt a mysql

Muchas gracias por la respuesta.

Los registros del archivo siguen la siguiente estructura:

es,sotomerilla,Sotomerilla,58,43.0333333,-7.4
es,sotomerille,Sotomerille,58,43.0333333,-7.4
es,sotopalacios,Sotopalacios,55,42.4333333,-3.6833333
es,sotoparada,Sotoparada,55,42.6166667,-6.9
es,sotorrio,Sotorrio,39,43.35,-3.75
  #4 (permalink)  
Antiguo 28/09/2009, 09:03
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Importar .csv o .txt a mysql

Por la forma de los datos de la muestra (no hay entrecomillados en las cadenas, por ejemplo)
la estructura de la tabla debería ser:
Código sql:
Ver original
  1. CREATE TABLE CIUDAD
  2.   PAIS VARCHAR(10) NOT NULL,
  3.   SINTILDES VARCHAR(100) NOT NULL,
  4.   NOMBRE VARCHAR(200) NOT NULL,
  5.   LONGITUD FLOAT,
  6.   LATITUD FLOAT);
Con una estructura así, sí funcionaría algo como:
Código SQL:
Ver original
  1. LOAD DATA INFILE 'C:\\ruta\\al\\archivo.csv'
  2. INTO TABLE CIUDAD
  3. FIELDS TERMINATES BY  ','
  4. LINES TERMINATED BY '\n';
Si los valores de cadena van encerrados entre comillas (no están así en la muestra), sería:

Código SQL:
Ver original
  1. LOAD DATA INFILE 'C:\\ruta\\al\\archivo.csv'
  2. INTO TABLE CIUDAD
  3. FIELDS TERMINATES BY  ',' OPTIONALLY ENCLOSED BY  '"'
  4. LINES TERMINATED BY '\n';

Cualquier duda, ver: MySQL con clase: Importar/Exportar
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/09/2009, 14:05
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Importar .csv o .txt a mysql

Muchas gracias gnzsoloyo

Si quisiera añadir un campo "id_ciudad" de tipo int y con auto_increment ¿cómo lo haría?
__
Es que he probado a crear la columna en la tabla y luego a importar el fichero y, el campo id_ciudad lo rellena bien pero luego los registros están movidos de columna, donde el país la ciudad...etc
  #6 (permalink)  
Antiguo 28/09/2009, 15:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Importar .csv o .txt a mysql

Cita:
luego los registros están movidos de columna, donde el país la ciudad...etc
Eso solamente debería darse, que yo sepa ante tres circunstancias:
1. No estás asignando la carga de datos a las columnas correctas. Esto significa que, como no hay campo ID_ciudad inicialmente, ese campo hay que omitirlo entre las columnas donde se cargará:
Código sql:
Ver original
  1. LOAD DATA INFILE 'C:\\ruta\\al\\archivo.csv'
  2. INTO TABLE CIUDAD
  3. FIELDS TERMINATES BY  ',' OPTIONALLY ENCLOSED BY  '"'
  4. LINES TERMINATED BY '\n'
  5. (pais, sintildes, nombre, provincia, longitud, latitud) ;
2. Si el corrimiento se da sólo en algunos registros, el problema es que algunos están incompletos (no tienen todas las comas esperadas)
3. Si hay ruptura de datos, entonces el salto de línea no es un "\n". Hay que revisar el caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 29/09/2009, 06:00
 
Fecha de Ingreso: septiembre-2009
Mensajes: 215
Antigüedad: 14 años, 7 meses
Puntos: 1
Respuesta: Importar .csv o .txt a mysql

Muchas gracias funcionó perfecto.

Una cosa por si alguien copia el código y no le funciona:

En la tercera fila es TERMINATED en vez de TERMINATES
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:42.