[Talend DI] Usando Contextos y Variables

Antes de continuar explicando los diferentes componentes con los que cuenta Talend, les voy a explicar algo bastante importante en el diseño de ETL jobs y que, aprendiendo esto “de primero”, les ayudará a no repetirse mucho y a entender cómo configurar adecuadamente un trabajo.

Configuraciones y Contextos

Cada vez que necesitemos un valor (por ejemplo, usuario y contraseña de una base de datos), tenemos 3 opciones para operar con él:

  1. Hard-coded como un parámetro dentro del propio componente (o igual, hard-coded como parámetro dentro la metadata)
  2. Declarar una variable Java y reutilizarla
  3. Declarar una variable de contexto

Un contexto es una colección de “variables” que podemos almacenar para luego re-utilizar en los diferentes Jobs con los que vamos a trabajar.

bk-tos-di-ug-622_Context_Variabletab

Las variables de contexto pueden ser definidas en una metadata de contexto y cambiadas en tiempo de ejecución. Podemos proporcionar los valores de las variables de contexto en tiempo de ejecución, eso nos permite que los trabajos se ejecuten de diferentes maneras con diferentes parámetros. Por ejemplo, podemos definir diferentes variables de contexto para Production & Devel y, en función del entorno en el que se está ejecutando, establecerá los valores de dichas variables.

Por ejemplo, vamos a crear un contexto para configurar nuestra conexión a la base de datos.

Creando un Grupo de variables de Contexto

Dentro de nuestro Panel de Repositorio, encontraremos el ícono “CONTEXTS”, dónde podremos crear un grupo de contexto y añadir variables que podremos ir re-utilizando.

context1

  1. Botón derecho sobre “Contexts”, seleccionamos “Create a Context Group”.
  2. Como cualquier elemento, definimos su nombre, descripción, y estado (development, testing or production)
  3. agregamos variables una a una, definiendo su tipo, hasta completar el contexto.

Con eso, ya hemos definido un “Contexto”, ahora podemos re-utilizarlo en un Componente.

Conectando a la DB usando variables de Contexto.

¿Recuerdan el elemento “tPostgresConection” que usamos en el Trabajo anterior?, pues bien, ahora usaremos este Contexto para re-configurar la conexión a la DB.

Lo primero que debemos hacer es cargar el conexto en el Job actual, para ello:

  1. Abrimos el Trabajo y buscamos la pestaña “Contexts”, agregamos nuestro contexto haciendo clic en el botón “Select Context Variables”
  2. Seleccionar un contexto de la lista y presionar “Ok”

Peek 14-01-2018 00-44

Ahora que ya contamos con estas variables cargadas, podemos usarlas en nuestro componente.

Peek 14-01-2018 00-56

  1. Hacemos clic sobre el componente y reemplazamos cada parámetro con el nombre de la variable precedido de la palabra “context.”
  2. En el caso de contraseñas, hay que hacer clic en el botón a la derecha y agregar la palabra que usamos para nuestro contexto.

Y ya nuestro componente usará variables y no parámetros estáticos.

Contextos de ejecución

Imaginen que los parámetros de este Job no son los mismos si estamos en local probando nuestro ETL, en el servidor de testing o en producción, ¿cómo hacer en ese caso?, pues nuestros Trabajos pueden ser ejecutados en diferentes contextos de ejecución, con lo cual, el Job puede recibir diferentes valores de parámetros, dependiendo del Contexto de ejecución.

Creando un Contexto de ejecución

Para crer un contexto de ejecución editamos el Contexto anteriormente diseñado y hacemos clic en el símbolo suma de la derecha en “Configure Contexts” creamos cada uno de los contextos de ejecución que necesitamos.

Peek 14-01-2018 01-08

Como vemos, nos permite configurar los valores de las variables para cada uno de los contextos.

Peek 14-01-2018 01-11

En la pestaña de ejecución (RUN) podemos seleccionar contra qué contexto se configurará el Trabajo, de esta manera podemos al momento de ejecutar el Job, indicar qué valores de variables se usarán.

Adicionalmente, podemos seleccionar en la sección de “Contexts” en Contexto “por defecto” a utilizar el Trabajo, esto es útil ya que siempre que se ejecute el Job usará esos valores, incluyendo si se compila.

Peek 14-01-2018 01-12

Creando contextos desde parámetros

En el artículo anterior creamos una conexión a nuestra base de datos desde el Repositorio, cada conexión nos permite guardarla como un Contexto de variables.

  1. Editamos (o creamos) una conexión en el Repositorio (Metadata)
  2. Verificamos que los parámetros sean correctos
  3. Hacemos clic en “Guardar como Contexto” y lo configuramos como un Contexto cualquiera
  4. Volvemos a presionar “Check” para probar que funciona

Peek 14-01-2018 01-19

De esta forma, los parámetros (ya probados) de conexión estarán disponibles para todos los componentes de Repositorio que usen esta conexión, además, igual nos permite configurar diferentes Contextos de Ejecución.

Cargando variables desde Archivos

Imaginemos ahora que podemos cargar la configuración de nuestros Jobs desde un archivo (CSV, INI, json), esto significa que podemos “re-configurar” el Job (incluso ya compilado) cargando/reemplazando el valor de las variables desde un archivo.

Les presento el componente “tContextLoad”.

El componente tContextLoad

El componente lo que hace es recibir un conjunto iterado de variables y sus valores y definir (o reemplazar) los valores existentes-

  • Comenzamos creando un archivo “ini” que no es más que un archivo de texto dónde las claves y los valores se separan por “:”

ini.gif

  • Luego de creado, debemos cargarlo en cada ETL Job dónde vayamos a usar las variables con un componente tFileInputDelimited

Peek 14-01-2018 01-39

Con tFileInputDelimited cargamos el archivo de texto, definiendo que es el separador es “:” (dos puntos, aunque el separador es indiferente y depende del tipo de datos a usar).

Posteriormente, definimos que de este elemento, cargaremos el schema “key:value”, es decir, que vendrá un campo llamado “key” y en otro el “value”.

Peek 14-01-2018 01-40

Ahora, es momento de conectarle a este componente el tContextLoad.

Conectamos vía “Main” la carga del archivo ini al tContextLoad y lo configuramos:

  1. Que no se detenga en errores y/o advertencias
  2. Que imprima los valores en la salida del RUN

Peek 14-01-2018 01-44

Ahora solo basta cargar el Contexto que creamos anteriormente y ejecutar el Trabajo, veremos cómo este “define” las variables con los valores que hemos escrito en nuestro archivo de configuración.

Peek 14-01-2018 01-45

Adicional: definir el Contexto de ejecución y re-definir variables en la línea de comandos

Cuando nuestro Trabajo ya se encuentra compilado e instalado en algún lugar (siendo ejecutado por CRON, Celery o cualquier otra cosa), puede que tengamos que definirle en cual de los contextos de ejecución va a trabajar, o incluso, re-definir alguna variable en un momento específico (ej: ejecución manual del Trabajo).

Esto se hace mediante parámetros en la línea de comandos.

Hemos exportado nuestro job y el archivo que lo invoca se llama “test.sh”.

Para definir un contexto ejecutamos:

test.sh --context=Production

o en contexto “testing”:

test.sh --context=Testing

Si sólo queremos cambiar una única variable (ejemplo: vamos a conectarnos a otro host) ejecutamos de la forma:

–context_param <param-name>=<param-value>

ejemplo:

test.sh --context_param host=192.168.11.2

 

Conclusiones

DRY: Don’t Repeat Yourself, una de las cosas más importantes de la computación es tratar de no repetirse una y otra vez, evitar el “hard-coding” o configuraciones “planas”, por ende, antes de continuar explicando Talend Studio, deberíamos aprender las buenas prácticas y usar configuraciones, variables y contextos para así evitar errores y malas configuraciones.

En la siguiente entrega: Usar componentes tSSH y tInputEmail.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s