Publi

Introduciendo datos al servidor MySQL desde CSV con ejemplos (importar desde CSV)

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:

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');

También podría interesarte....

There are 6 comments left Ir a comentario

  1. Luis Gonzalez /
    Usando Google Chrome Google Chrome 17.0.963.79 en Ubuntu Linux Ubuntu Linux

    Buenisimo!! gracias

  2. Claudio Marin /
    Usando Safari Safari 534.53.10 en Mac OS X Mac OS X 10.7.3

    Buenisimo, muchas gracias, esto da para un montón de ideas…

    1. admin / Post Author
      Usando Mozilla Firefox Mozilla Firefox 20.0 en Ubuntu Linux Ubuntu Linux

      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.

  3. Pingback: Exportar datos de MySQL a un fichero CSV o tabulado | Poesía Binaria /

  4. noe /
    Usando Google Chrome Google Chrome 30.0.1599.101 en Windows Windows 7

    muy buen aporte!!

    1. admin / Post Author
      Usando Mozilla Firefox Mozilla Firefox 24.0 en Ubuntu Linux Ubuntu Linux

      Muchas gracias

Leave a Reply to admin Cancle Reply