Poesía Binaria

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....