Cómo migrar sus datos desde un entorno local a cloud: Amazon S3

Cómo migrar sus datos desde un entorno local a cloud: Amazon S3

  • Eric Higaki
    Eric Higaki joined Talend in 2017 as an Associate Evangelist. In this role, Eric works on the community team to provide technical support and brand awareness. Prior to Talend, Eric worked on the Integration team at the largest protein producing company in the world, while also studying at Colorado State University. Go Rams!

Migración a cloud

2018 fue el año de la tecnología cloud y, a medida que un mayor número de empresas adoptan esta tecnología, es importante ser conscientes de los beneficios que puede reportar para su negocio. Una de las principales dificultades que tienen las empresas hoy en día es cómo trasladar sus datos desde sus bases de datos locales a su solución de almacenamiento cloud. Puede resultar un proceso largo y tedioso si no se dispone de las herramientas adecuadas. ¡Por suerte, Talend le puede ayudar!

Yo en su día en Talend también tuve que migrar nuestra base de datos local, MySQL, a nuestro almacén cloud, Amazon S3. En lugar de asumir las complejidades de Apache Sqoop, decidí crear una tarea en Talend que se ejecutara cuando tuviéramos que migrar nuevos datos a cloud. Con este método me ahorré tiempo que necesitaba y ahora puedo emplearlo para analizar mis datos recién migrados. En esta entrada del blog analizaré cómo creé esa tarea. Sin más dilación, ¡vayamos al grano!

Cómo crear una conexión

Como con cualquier otra tarea de Talend, lo primero es crear las conexiones. Tengo una base de datos MySQL, por lo que utilizaré el componente tMysqlConnection. También tengo que crear una conexión a mi almacén cloud de S3 con tS3Connection. Como la conexión a MySQL y S3 son los primeros pasos cada vez que se ejecute esta tarea, también tenemos que añadir tPrejob delante de ambos componentes.

Acuérdese de que Talend es una herramienta de generación de código, así que con tPrejob puedo controlar qué se compilará primero siempre y garantizar así que siempre me conecte a mis bases de datos. Una vez haya configurado ambos componentes de conexión, puedo conectar juntos tPrejob, tMysqlConnection y tS3Connection como muestra la captura de pantalla inferior.

Obtención de tablas y configuración del esquema dinámico

Ahora que estoy conectado a mis plataformas de almacenamiento puedo empezar mi proceso de migración a cloud desde MySQL a Amazon S3. Para empezar necesito una lista de todas las tablas que quiero trasladar desde la base de datos. Con tMysqlTableList puedo especificar qué tablas quiero enumerar con la "cláusula WHERE”. No obstante, en este caso tan solo me interesa extraer datos de las tablas de clientes.

Ahora que ya tengo la lista de todas las tablas que deseo transferir, el próximo paso es obtener una lista de las columnas de esa tabla.

Las variables globales “tMysql” son una forma fantástica de extraer valores de componentes. Estas variables globales pueden extraer datos de los componentes "tMysql" para que los utilicen otros componentes. En este caso “((String)globalMap.get(“tMysqlTableList_1_CURRENT_TABLE”))” hará que el componente extraiga columnas de las tablas que el componente tMysqlTableList está compilando. Talend simplifica la extracción de variables globales sin tener que memorizarlas. Basta con escribir “tMysql”, presionar Ctrl + Espacio y todas las variables globales “tMysql” aparecerán en una lista para que elija la que me interesa.

A continuación, tendré que añadir un tFixedFlowInput para generar las columnas "tableName" (Nombre de tabla) y "columnName" (Nombre de columna). Los valores tan solo aparecerán en el componente tFixedFlowInput si primero configuro el esquema para esas columnas. Una vez configurado el esquema podré ajusta el valor de esas columnas, que será ((String)globalMap.get(“tMysqlTAbleList_1_CURRENT_TABLE”)) para “tableName” y ((String)globalMap.get(“tMysqlTAbleList_1_COLUMN_NAME”)) para “columnName”.

Añadir un tLogRow después del flujo fijo me permitirá ver los nombres de las tablas y columnas de las que extrae datos mi tarea mostrando la información en la consola de ejecución. Aquí abajo aparece una captura de pantalla actualizada de mi tarea hasta este punto.

Ahora es el momento de configurar el esquema dinámico que los datos utilizarán cuando sean extraídos de mi base de datos local. Como su nombre indica, un esquema dinámico es un tipo de esquema que cambiará según la columna que se esté leyendo en ese momento, por lo que resultará esencial para la tarea.

Para configurar un esquema dinámico utilizaré un componente espectacular llamado tSetDynamicSchema. Más allá de tener un gran nombre, tSetDynamicSchema me permitirá configurar dinámicamente el esquema a partir del valor "columnName". Ahora que el esquema es dinámico, ya no tengo que mover cada tabla individualmente, sino que puedo mover diferentes tablas con facilidad.

Leer los datos y escribir las tablas

Una vez configurado el esquema dinámico, ya estoy listo para empezar a leer los datos de la tabla con la tipología dinámica que se ha creado desde el componente tSetDynamicSchema. Como estoy leyendo datos de mi base de datos local, tengo que utilizar un componente de entrada que lea de mi base de datos MySQL: tMysqlInput. En primer lugar necesito editar el esquema del componente tMysqlInput para usar el tipo de BD dinámico. Para el nombre de la columna de este esquema he utilizado “dynamic_row” con el tipo “Dynamic” (como era de suponer) y tipo de BD “VARCHAR”.

Tras configurar el esquema puedo pasar a configurar el componente tMysqlInput para asegurarme que los datos se estén extrayendo de la tabla actual que aparece en tMysqlTableList.

Ahora los datos de las tablas se están leyendo a partir de la tabla que aparece en la lista, sin embargo aún se tienen que escribir los datos a un archivo CSV. Para ello voy a utilizar tFileOutputDelimited. Tengo que fijarme que "File Name" (Nombre de archivo) coincida con la ruta de archivo exacta.

¡Uf! Arriba los ánimos, que ya casi estamos. He aquí una vista actualizada de la tarea que he creado hasta este punto.

Trasladar archivos a Amazon S3

Hasta ahora esta tarea lee todas las tablas con el nombre cliente y las escribe en archivos CSV en una carpeta concreta. Ahora que ya puedo extraer datos de tablas ubicadas en mi base de datos local, tengo que terminar la tarea transfiriendo esos archivos a Amazon S3.

Con tFileList podré obtener una lista de todos los archivos de una carpeta determinada o, en este caso, de todas las tablas que he extraído de mi base de datos local. Lo único que tengo que hacer es indicar el directorio donde están ubicados los archivos.

Cuando obtenga la lista de todos los archivos podré empezar a trasladarlos a uno de mis buckets de S3. Para ello necesito el componente tS3Put. No tengo más que indicar el "Bucket", la "Key" (Clave) y el "File" (Archivo). "Key" es el nombre del archivo en S3 y "File" el nombre del archivo que se está subiendo a S3.

Ahora que la configuración de tFileList y tS3Put ya está lista, solo falta darle los últimos retoques a la tarea de migración a cloud. ¿Recuerdan las conexiones que he abierto al principio de la tarea? Gracias a tPostjob, tMysqlClose y tS3Close puedo cerrar las conexiones que he abierto cada vez que se ejecuta la tarea. Igual que antes, quiero poder controlar lo que sucede una vez compilado el bucle principal y por ello necesito el componente tPostjob. ¡Pan comido! La tarea terminada debería tener un aspecto parecido a este.

Ejecutar la tarea

Si se ejecuta la tarea y todo está a las mil maravillas, la consola de ejecución debería coincidir con el pantallazo siguiente. Como ven, la consola muestra la tabla que se está leyendo y escribiendo, además del nombre de columna correspondiente.

Ahora que la tarea está completa puedo trasladar cuantas tablas desee de mi base de datos local a mi almacén cloud sin tener que crear múltiples tareas para cada tabla ni tener que fastidiarme programándolo manualmente. Qué bien sienta estar listo para trabajar en cloud.

Ver esta demostración EN DIRECTO

¿Quiere ver esta demostración en directo? Acompáñemos el jueves 22 de marzo en la página de Facebook de Talend durante #TalendDevLive, en el que crearé esta tarea paso a paso y responderé cualquier pregunta que tengan. ¡No se lo pierdan!

Join The Conversation

0 Comments

Deja un comentario

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