Me apasiona la tecnología y disfruto de los retos informáticos. Me gusta la música; rock, jazz, blues, bossa y disfruto además de la comida y de viajar. Soy Gerente de Mantareys S. A. y soy un adicto a la Internet y el conocimiento.

El día de hoy tuve la necesidad de importar archivo de texto plano (.txt) a una base de datos. El inconveniente es que estos separadas sus columnas por tabulación y la base es tan grande que excel simplemente no puede abrirlo.

Mi intención inicial era convertir estos archivos a .csv e importarlos desde phpMyAdmin o algún cliente de base de datos, pero al ser muy grande pensé “no soy el primero con esta necesidad, por lo que debe existir un método de importación desde la consola”, que es el método más rápido y confiable pienso yo.

Por ello me di a la tarea de buscar en la documentación de MySQL y me encontre con la syntax LOAD DATA INFILE que permite el importar bases de datos a partir de un archivo y se ajusta a multiples necesidades.

CONFIGURACIÓN INICIAL

Para que LOAD DATA INFILE función, debes habilitarlo en tu my.cnf de MySQL que generalmente esta en /etc/my.cnf y habilitar este recurso con la siguiente linea de configuración:

Una mejor configuración quedaría así:

UTILIZANDO LOAD DATA INFILE

Inicialmente nos conectamos a la base de datos:

Una vez que ingresamos a MySQL seleccionamos la base de datos donde deseamos hacer la importación con el siguiente comando:

Ahora iniciamos la importación:

Como notaremos, las columnas podemos personalizar la delimitación en FIEDS TERMINATED BY ” para lo que podríamos usar ‘,’ en caso de un archivo separado por comas (.csv) o también ‘;’ en caso de separación por punto y coma, o ‘|’, entre otras. En mi caso particular al estar separado por tabulación use ‘\t’

Adicionalmente podemos definir el fin de la linea con la sentencia LINES TERMINATED BY, en los sistemas mac se usa \r mientas que para windows y linux se usa \n.

Finalmente podemos personalizar los campos de la tabla a los cuales deseamos importar el texto plano, es decir, si tu fichero posee 10 columnas pero tu tabla 15, puedes personalizar estas a cuales columnas deseas se ingresen los datos.

OTRAS PERSONALIZACIONES

En el caso de los archivos .csv estos suelen enmarcar los datos de una columna entre comillas (“”), para lo cual debes usar la sentencia ENCLOSED BY ‘”‘ luego de FIELDS TERMINATED BY ‘,’ lo que quedaría así en caso de un .csv delimitado por comas y sus columnas por doble comillas:

Otra opción interesante es el poder transformar datos al importar, por ejemplo, la fecha de tu archivo esta en dd/mm/yyyy, pero resulta que la necesitas en formato DATE que es yyyy/mm/dd, esto lo puedes solucionar con la sentencia SET que se usaria asi:

Que hacer para que no ingrese la linea de encabezado? Esa linea que generalmente posee los nombres de las columnas. Esto se soluciona con la sintaxis IGNORE 1 ROWS que se utilizaría así:

En mi caso particular mi base tiene 4 campos de fecha con el formato dd/mm/yyyy mientras que deseo ingresarlo en  el formato yyyy/mm/dd que usa el campo DATE de MySQL para mejorar así mis consultas a la base de datos. Mi código final quedo así:

Y así pude importar mi base de datos super fácil y sin morir en el intento 😉

Espero esta información les sea de mucha utilidad como me fue a mi. ¡Feliz semana!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *