INTRODUCCIN ETL CON TALEND
OPEN STUDIO FOR BIG DATA
Un proceso ETL (Extraccin, transformacin y Carga) es aquel que permite la extraccin masiva de
datos de distintas fuentes, procesarlos, su transformacin y finalmente carga en un destino que pueden
ser ficheros, una base de datos u otros.
Por tanto en este tipo de procesos, la carga de trabajo mas costosa (en cpu y memoria) se realiza fuera del
origen de los datos, aliviando de carga a las fuentes.
En un proceso ETL terico, los datos se extraen en bruto de las fuentes; todo el procesamiento como
dar formatos a los campos, traducciones, generacin de datos (secuencias), agregacin de estos y
validacin y verificacin de la calidad del dato se podra hacer en la fase de transformacin. Con ello se
minimiza el impacto sobre las fuentes y los sistemas de destino de la informacin.
En la realidad, los procesos que podemos encontrar son de tipo mixto ETL con ELT .
La herramienta Talend Open Studio for Big Data est basada en el entorno de programacin java llamado
Eclipse.
Bloque 1: en este bloque se muestran los distintos jobs y elementos que contiene nuestro repositorio.
Bloque 2: en este bloque se muestran por pestaas los jobs que tengamos abiertos para editar.
Bloque 3: en este bloque se muestran las pestaas de variables de contexto del job, una pestaa de
configuracin para el componente que tengamos seleccionado dentro del job, una pestaa para hacer
ejecuciones del job y otras.
Bloque 4: en este bloque se muestra la lista de componentes que tenemos disponibles para agregar a
nuestros jobs; dichos componentes estn agrupados por categoras.
En un job tendremos principalmente componentes de tres tipos:
Componentes de entrada (Input): se puede obtener la informacin de fichero, una base de datos e
incluso internet.
Componentes de transformacin de datos.
Componentes de salida (Output): como para los de entrada, los componentes de salida pueden volcar la
informacin sobre ficheros, bases de datos u otros.
Existen otros tipos de componentes, como aquellos que permiten realizar operaciones de sistema
operativo o por FTP, pero principalmente se usarn componentes de los tres tipos anteriores.
Ejemplo: un flujo bsico
En este flujo que mostramos de ejemplo se tienen dos entradas: una de un fichero delimitado (un .csv) y
una consulta oracle. El componente tMap se encarga de hacer join complejos entre los datos y permite
varias salidas que generan flujos paralelos (se realizan procesamientos en paralelo, no como en un
procedimiento almacenado Oracle en el que el procesamiento es en serie). En uno de los flujos se hace un
filtro de filas segn una cierta condicin y en el otro se realiza una agregacin de datos y a continuacin
una sustitucion de caracteres. Finalmente se vuelca informacin de salida a un fichero posicional y a una
tabla Oracle.
Dentro de un job, como la herramienta est basada en Java se usan los tipos de campo de dicho lenguaje.
Componentes mas usados:
Vamos a continuacin a describir los componentes que se usan con mayor frecuencia (aunque hay
muchos otros, estos son los que he usado yo habitualmente):
Componentes de Input (entrada al flujo)
Componente
Descripcin
tFileInputDelimited
Permite la insercin de datos desde un fichero delimitado (tipo csv).
tOracleInput
tFileInputFullRow
Permite la insercin de datos desde una base de datos Oracle a travs
de una consulta.
Toma un fichero plano y vuelca cada fila del fichero en un nico
campo.
Componentes de Output (salida del flujo)
Componente
Descripcin
tFileOutputPositional
Permite el volcado de datos a un fichero posicional
tOracleOutput
Permite el volcado a una tabla de base de datos Oracle.
tFileOutputDelimited
Permite el volcado de datos a un fichero delimitado.
Permite el encolumnado de valores de una columna segn valores
tPivotToColumns
de otra. No es recomendable su uso pues existen otras maneras de
realizar esta tarea de manera mas ptima.
Los componentes de output tienen multitud de opciones que permiten por ejemplo:
Sobreescribir el fichero destino o continuar escribiendo tras la ltima lnea existente.
Incluir o no lnea o lineas de cabecera.
Comprimir fichero de salida.
Truncar la tabla destino o hacer borrados selectivos de los datos previos.
Estos componentes pueden ser usados como componentes intermedios en un flujo de manera que este
pueda continuar.
Componentes de procesamiento de datos
Componente
tFilterRow
Descripcin
Permite el filtrado de filas segn condiciones estticas. Se pueden
extraer tanto las filas filtradas como las rechazadas.
tConvertType
Permite convertir tipos de datos de las columnas y especificar formatos.
tFilterColumns
Permite filtrar columnas.
tJavaRow
Permite introducir lgica en cdigo java para el tratamiento de los datos.
tReplace
Permite hacer reemplazo de valores segn condiciones.
tSortRow
Permite ordenar las filas segn condiciones.
tSetGlobalVar
Permite establecer valores para variables globales a partir de datos de
entrada (implicitos) o especificados explcitamente.
Componente
tJoin
Descripcin
Permite realizar join sencillas de datos para dos entradas segn
condiciones. Devuelve tanto datos cruzados como rechazados.
Permite realizar join complejas y otras acciones sobre datos de mltiples
entradas. Asimismo permite tener mltiples salidas lo que nos
tMap
proporciona una manera de paralelizar flujos.
Es uno de los componentes mas potentes de la herramienta.
Permite ejecutar cdigo almacenado PL/SQL en bases de datos oracle
tOracleSP
(procedimientos y funciones). Este componente permite realizar flujos
mixtos ETL/ELT. Se puede usar como Input, Output y procesamiento.
tOracleCommit
tAggregateRow
Permite realizar commit para una conexin abierta que se est usando
por componentes oracle.
Permite el clculo de valores agregados (sumas, max, avg,..)
especificando una agrupacin (similar a group by en SQL).
Varios flujos dentro de un mismo job
La herramienta permite tener varios flujos de datos conectados ordenadamente que se van ejecutando
segn condiciones sobre los flujos o componentes ejecutados previamente.
El inicio de ejecucin de los flujos se configura a travs de triggers que enlazan los flujos o componentes:
Por ejemplo, podemos conectar dos flujos A y B para que B se ejecute si el flujo A ha finalizado
correctamente (On Subjob Ok).
Podemos conectar flujos padres-hijos con una relacin 1-N (1 padre, varios hijos), lo que nos permite
paralelizar flujos (ejecuciones simultneas).
Hay componentes como tPivotToColumns que obligan a finalizar un flujo para poder usar los datos
procesados. En este caso se puede crear otro flujo tomando el fichero de salida de tPivotToColumns como
fichero de entrada para continuar el procesamiento.
Todo flujo que no est conectado con otro del job se ejecutar al comienzo de la ejecucin del job.
Variables de contexto.
Se pueden especificar variables de contexto de igual manera a como se tratan en un proyecto java.
Estas variables se pueden incluir en un fichero de contexto java o bien cargarlas de ficheros de entrada
usando los componentes:
Componente
Descripcin
Carga valores de variables de contexto desde una entrada con los campos:
Key: nombre de la variable de contexto
Value: valor de la variable de contexto
tContextLoad
Se cargarn aquellas variables de contexto que estn creadas previamente.
tJavaRow
Usando este componente se pueden cargar los valores de variables de
contexto usando condiciones sobre los datos de entrada.
Como ejecutar Jobs
La herramienta Talend Open Studio for Big Data permite:
Ejecutar los jobs desde la herramienta de desarrollo.
Exportar el job, creandose un fichero java .jar junto con un .bat (y un .sh para linux) ejecutable que
permite ejecutar el job . De esta manera podemos ejecutar los jobs en cualquier ordenador (PC o no,
porque es java) siempre que se tenga la estructura de carpetas configurada en el job y haya acceso a los
ficheros y BD usadas.
Ejecucin desde la herramienta de desarrollo:
En el bloque3 (ver carptura de pantalla al principio del documento) hay una pestaa Run que permite la
ejecucin del job. Dicha ejecucin se puede hacer con Debug o no. En la misma ventana podemos ver las
trazas insertadas y el log de la ejecucin.
En una ejecucin desde la herramienta se muestran en la ventana del Bloque2 el nmero de filas
procesadas, el tiempo total de trabajo de cada componente, si el flujo ha terminado o est en espera, etc.
Si todo ha ido bien debe aparecer un mensaje final de [exit code=0]
Dentro del job podemos incluir trazas y aadir informacin a este log de ejecucin.
Asimismo se puede realizar un control de excepciones para capturar errores.
En los jobs que he creado he incluido el siguiente flujo para capturar posibles errores java: