MongoDB. Importación de una tabla relacional usando archivos CSV

Índice

Introducción

En anteriores artículos dimos los primeros pasos con MongoDB usando la shell de mongo y Java.

En este tutorial, vamos a dar un paso más y ver como podemos migrar los datos de nuestras bases de datos relacionales a MongoDB, el cual usa un paradigma NoSQL documental.

Este tutorial se centra exclusivamente en la importación de una tabla, migrar un modelo completo de BD relacional a Mongo requiere más conocimiento y esfuerzo de análisis, por lo que queda fuera del ámbito de este tutorial (puedes ver las conferencias que enumero en la sección referencias).

Exportando datos MySQL a CSV

Imaginamos que queremos exportar al archivo CSV "/Users/cgarcia/paises_data.csv" la tabla de nombre "paises" de una BD MySQL de nombre "mobiletestDB".
Entonces la sentencia necesaria para exportar los datos usando para ello el usuario "invitado" sería:

mysql mobiletestDB --user=invitado -p -e "SELECT * FROM paises INTO OUTFILE '/Users/cgarcia/paises_data.csv' CHARACTER SET utf8 FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"

Introducirias la contraseña del usuario y aceptarías.

Importando datos a MongoDB desde un archivo CSV

Para importar archivos csv a mongo, usaremos la aplicación <mongo_path/bin/>mongoimport.

Ahora imaginemos que deseamos crear una colección de nombre "cities" en una base de datos mongodb de nombre "app1", en donde los campos de cada documento (registro) son "_id,pais,codigo"

mongoimport -d app1 -c cities --drop --stopOnError --type csv --file /Users/cgarcia/paises_data.csv --ignoreBlanks --fields _id,pais,codigo

Es importante que tu CVS esté en formato utf8, en caso de que no lo esté hay muchas formas de realizar la conversión, una de ellas podría ser:

iconv -f iso-8859-1 -t utf-8 /Users/cgarcia/paises_data.csv > /Users/cgarcia/paises_data_ok.csv

Ahora bien, si tu archivo CVS contiene el nombre de los campos en la primera línea, entonces deberás indicar:

mongoimport -d app1 -c cities --drop --stopOnError --type csv --file /Users/cgarcia/paises_data.csv --ignoreBlanks --headerline

La salida de la importación será algo parecido a:

Salida: ----
Sun Mar 10 11:46:02         151386364/151488712 99%
Sun Mar 10 11:46:02             3171700 3293/second
Sun Mar 10 11:46:02 imported 3173958 objects
    

Que si observas, el número de objetos (documentos) importados coincide con el número de líneas del archivo:

wc -l  /Users/cgarcia/paises_data.csv
 3.173.959  /Users/cgarcia/paises_data.csv
    

Referencias

Conclusiones

Como hemos visto, migrar datos de una BD relacional a un modelo documental no es tan traumática, si bien no es lo mimo migrar una sencilla tabla que una completa BD con sus relaciones, el cual requiere un análisis y seguramente el desarrollo de una aplicación de migración o el uso de ETL tipo Talend. Os recomiendo que escucheis la charla que adjunto en la sección referencias.

Bueno, eso es todo, un saludo.
Carlos García.

Categorías del artículo

Comentarios de los lectores