Esto nos resultará muy util a la hora de cargar datos en nuestra base de datos. imaginemos que tenemos una tabla como esta:
1 2 3 4 5 6 7 | CREATE TABLE Testing.NewTable ( Id BIGINT, Nombre VARCHAR(100), Email VARCHAR(100), Telefono VARCHAR(100) ) ENGINE=MyISAM; |
por ahora vacía, pero tenemos todos los datos que necesitamos en un archivo CSV como este:
Tabla de contenidos
Caso más simple
1;Antonio;antonio@dominio.com;123456789
2;Armando;armando@dominio.com;234567891
3;Carlos;carlos@dominio.com;345678912
4;Ceferino;cefe@dominio.com;456789123
5;Cipriano;cipri@dominio.com;567891234
El primer ejemplo es fácil, simplemente hacemos:
1 2 3 | LOAD DATA INFILE '/tmp/nombres.csv' INTO TABLE Testing.NewTable FIELDS TERMINATED BY ';' (Id, Nombre, Email, Telefono); |
Y ya tenemos todos los datos dentro.
Ignorando campos
Ahora nuestro CSV es el siguiente:
3211;Antonio;antonio@dominio.com;123456789
32132;Armando;armando@dominio.com;234567891
35453;Carlos;carlos@dominio.com;345678912
42344;Ceferino;cefe@dominio.com;456789123
12335;Cipriano;cipri@dominio.com;567891234
El problema es que queremos nuestros Ids ordenados, podemos configurar el AUTO_INCREMENT en el Id de nuestra tabla, sólo tenemos que ignorar el primer elemento, para eso, utilizamos variables:
1 2 3 | LOAD DATA INFILE '/tmp/nombres.csv' INTO TABLE Testing.NewTable FIELDS TERMINATED BY ';' (@ignorado, Nombre, Email, Telefono); |
Definiendo campos fijos
Hemos añadido un campo a nuestra tabla, llamado Categoría:
1 | ALTER TABLE Testing.NewTable ADD Categoria VARCHAR(100); |
En esta ocasión queremos decir que todos los que vienen de este archivo CSV pertenecen a la categoría «Amigos»
1 2 3 | LOAD DATA INFILE '/tmp/nombres.csv' INTO TABLE Testing.NewTable FIELDS TERMINATED BY ';' (@ignorado, Nombre, Email, Telefono) SET Categoria='Amigos'; |
Modificando valores
Ahora, imaginémonos que todos mis amigos del CSV son hermanos, y por tanto se apellidan todos Fernández, queremos modificar el dato Nombre de entrada a la tabla, concatenándolo con el apellido:
1 2 3 | LOAD DATA INFILE '/tmp/nombres.csv' INTO TABLE Testing.NewTable FIELDS TERMINATED BY ';' (@ignorado, @nombre, Email, Telefono) SET Categoria='Amigos', Nombre=CONCAT(@nombre, ' ', 'Fernández'); |
A partir de aquí, podemos hacer operaciones matemáticas con los datos extraídos antes de insertarlos en la tabla, o llamar a cualquier función de MySQL para procesar alguno de los datos, incluso para tener más opciones, podemos crear nuestra propia función, en fin, las posibilidades son muchas.
Ignorando la cabecera
Muchos archivos CSV contienen una cabecera indicando qué es cada campo, al importar esos datos no nos interesa importarla, en el ejemplo, vamos a saltarnos las dos primeras líneas del CSV:
1 2 3 4 5 | LOAD DATA INFILE '/tmp/nombres.csv' INTO TABLE Testing.NewTable FIELDS TERMINATED BY ';' IGNORE 2 LINES (@ignorado, @nombre, Email, Telefono) SET Categoria='Amigos', Nombre=CONCAT(@nombre, ' ', 'Fernández'); |
Buenisimo!! gracias
Buenisimo, muchas gracias, esto da para un montón de ideas…
Muchas gracias, yo lo uso muy a menudo y es muy fácil cuando tienes un poco de práctica. Es más ahora mismo estoy escribiendo un mini-post para hacer justo lo contrario, exportar datos desde MySQL a CSV.
Pingback: Exportar datos de MySQL a un fichero CSV o tabulado | Poesía Binaria /
muy buen aporte!!
Muchas gracias