Thursday, September 12, 2013

Llenar una tabla de MySQL utilizando un archivo local (MySQL Loader)


Muchas veces me envían reportes llenos de data que desean analizar y/o cruzar con otra. Si los archivos son pequeños no hay problema pues muchas veces podemos hacer el cruce con grep y diffs utilizando shell scripting. Pero, ¿si son millones de records y tienes que comparalos con una tabla existente? Para esto utilizamos el SQL Loader. El SQL loader nos permite cargar archivos directamente a la tabla que necesitamos. 

La estructura del comando es la siguiente:

'load data LOCAL infile '/carpeta/archivo.txt' into TABLE <NombreDeLaTabla> FIELDS <OPCION1> <OPCION2> (CAMPO1,CAMPO2,...,CAMPON);


<OPCION> - Entre las opciones que puedes poner aquí están:
TERMINATED BY ',' : Con este le decimos que los campos estan separados por comas.
ENCLOSED BY '"': Con este le decidmos que los campos estan encerrados entre comillas ".


Hay muchas más pero usualmente estas son las más que uso. 

Si utilizamos las dos opciones le decimos que los campos estan encerrados entre comillas pero separados por comas.

La parte de CAMPO1,CAMPO2 van los nombres de los campos de la tabla a donde vas a insertarlos. Es importante que estén en el mismo orden que se encuentran en el archivo.

Ejemplo:

Tabla Usuarios:
ID NOMBRE

Archivo:
1,Pedro

3,Juan
2,Maria

Para subir este archivo a la tabla Usuarios el comando sería el siguiente:

load data LOCAL infile '/desktop/files/usuarios.csv' into TABLE USUARIOS FIELDS TERMINATED BY ',' '(ID,NOMBRE);

Pendiente a los errores y a los warnings que te pueda tirar el SQL.

Ya con eso el archivo se cargo a tu base de datos! Suerte!