Sidebar

Cuando se trabaja en el desarrollo de sistemas tarde o temprano nos enfrentamos a la migración de datos de un SGBD a otro, y por lo regular en desarrollos empresariales manejan una gran cantidad de información o también se da el caso que existan archivos planos donde los campos están separados por comas (CSV) o por pipes (|) o algún otro terminador.

Para realizar dicha migración se pueden hacer uso de software comercial, como por ejemplo MYSQL-Front o EMS Manager, ambos cuentan con opciones para importar archivos csv, o algún otro archivo plano, sin embargo estas opciones soy muy tardadas cuando los archivos planos tienen muchos registros. Para ello existe otra alternativa más rápida, el comando es LOAD DATA IN FILE que permite la importación de datos a través de archivos.

La sintaxis de esta opción es la siguiente:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
[REPLACE | IGNORE]
INTO TABLE tbl_name
[FIELDS
[TERMINATED BY 'string']
[[OPTIONALLY] ENCLOSED BY 'char']
[ESCAPED BY 'char' ]
]
[LINES
[STARTING BY 'string']
[TERMINATED BY 'string']
]
[IGNORE number LINES]
[(col_name_or_user_var,...)]
[SET col_name = expr,...)]

LOAD DATA INFILE permite establecer el carácter que identifica a cada campo, como por ejemplo un pipe (|), o también el carácter que determina el final de una línea, entre otras configuraciones varias.

Si deseas saber más sobre esta opción, consulta el manual de referencia de MySQL. http://dev.mysql.com/doc/refman/5.0/es/load-data.html


Experiencia:
¿Por qué afirmo que LOAD DATA IN FILE es muy rápido? La respuesta es porque en el lugar donde laboro me vi en la necesidad de migrar datos de Informix a MySQL. Dicha información me fue entregada en archivos planos separados por pipes (|), había archivos que contenían 2 millones de registros. Al comenzar hice uso de la opción Importar de MySQL Front y de EMS, un archivo lo subió en aproximadamente 20 horas y eran 5, por lo que me di a la tarea de investigar un poco más sobre el comando que he mencionado. El software EMS cuenta con dicha opción y por flojera de escribir en la consola de MySQL los parámetros necesarios para hacer la importación, lo hice desde dicho software, para mi sorpresa, el mismo archivo que había llevado casi 20 horas, se terminó de cargar  en 5 min. La diferencia fue abismal, y leyendo en el manual de MySQL, menciona que este comando un mucho más rápido que hacer inserts, que es lo que hace la opción importar, va generando inserts por cada fila del archivo.

Espero que la información te sea útil y saques provecho de esta opción a veces desconocida por nosotros


Por: José Luis Galicia Sánchez


Tips BD