Para desarrollar los procesos, es muy útil disponer de ciertos datos para hacer
pruebas de laboratorio en un entorno controlado, para esa tarea Talend nos ofrece
unos componentes para generar datos de manera automática y aleatoria del número
de registros que nos hagan falta, desde nombre de personas, correos electrónicos
ciudades, cadenas de textos, números, etc…
También mediante la opción parameters podemos limitar la longitud de los campos
generados. Por ejemplo. «Length_>6»
tFixedFlowImput: Generar datos manualmente
Este componente permite generar una tabla de datos en la que podemos
introducir datos de manera manual.
Lo primero es con el botón «Edit Schema» es generar el esquema que
necesitemos para nuestra tabla de datos.
Y luego la forma más cómoda de introducir datos es usar la opción «Use Inline
table» para ir introduciendo lo datos por columnas.
Componentes De Separación Y Generación De Múltiples Flujos De Datos
Hasta ahora en publicaciones anteriores, únicamente hemos visto jobs que trabajan
con un único flujo de datos. Pero es posible separar un flujo en múltiples datos así
como juntar diferentes flujos en uno único.
Componentes de filtro y separación de flujos
tFilterRow: Filtro de datos
Este componente nos permite filtrar unos datos a partir de una o varias condiciones en
las que podemos seleccionar el tipo de condición AND/OR. Este componente nos
ofrece dos flujos de salida:
El flujo de salida «Filter», es decir, el flujo que contiene los datos que
cumplen la condición.
El flujo de salida»Reject», el flujo rechazado que no cumple la condición
El ejemplo de la imagen, se muestra la configuración del filtro del componente y los
dos tipos de flujo de salida del componente tFilterRow.
tSchemaComplianceCheck: Comprobación de los registros que cumplen el
esquema que queremos utilizar.
Este componente es el más usado para «data quality». Es muy útil porque algunas
veces nos encontramos en errores en el proceso debido a que determinados registros
no cumplen el «data type» del esquema. Con este componente podemos detectar y
separar los registros que no cumplen el esquema para solucionar la incidencia.
Este componente es de hecho un filtro pero con un criterio especial de filtro que es
cumplir el esquema que indicamos.
El componente lo podemos configurar para este fin de dos maneras:
Custom defined: Cuando manualmente indicamos las columnas y datatype que
queremos analizar.
Use another schema for compliance check: En esta opción podemos copiar el
esquema actual y hacer los cambios que necesitamos y hacer pasar un check
por todo el esquema, pero teniendo en cuenta que hay que mantener el mismo
orden de los campos.
El subjob de la imagen muestra un ejemplo en el que vemos que el componente tiene
dos salidas: La salida main con los registros correctos que cumplen el esquema y un
flujo de rejects con los registros que no cumplen el esquema.
En el ejemplo creamos manualmente una tabla con una sola columna de tipo string y
introducimos los siguientes registros:
«1»,»dos»,»3″,»4″ y le indicamos en la configuración del componente que la columna
es de tipo «integer». En el flujo main nos desviará los registros que pude convertir a
int, es decir 1,3,4 y en el flujo de rechazo el segundo registro con valor «dos» debido a
que es un string que no puede convertir en número entero (Integer).
tReplicate: Replicar el flujo.
Este componente es utilizado cuando por motivo de proceso necesitamos que el flujo
se replique, por ejemplo para hacer una misma salida de datos a una tabla de una
base de datos y también a un fichero. O por ejemplo si necesitamos dos flujos, uno
con todos sus registros para hacer una salida y la suma o valores agregados con la
finalidad de realizar comprobaciones, etc…
Componentes de Unión de flujos
tUnite: Unir dos flujos
Este componente hace lo contrario al tReplicate, ya que une dos flujos de datos que
tengan un mismo esquema, pero con alguna restricción, ya que no podemos unir un
flujo que haya sido separado en el mismo subjob.
No combina registros, sino que simplemente junta un flujo de datos debajo del otro,
tipo UNION de SQL.
tJoin: Join de flujos.
Lo cierto es que después de la potencia y optimización de proceso y otras
capacidades que nos permite el componente tMap, tJoin queda bastante canivalizado
por el todo poderoso componente tMap y su uso es menor.
Para configurar el componente primero debemos indicar cual es el flujo de principal.
(Por ejemplo el que trae el flujo de ventas que trae las claves foráneas de cliente y de
producto). Por otra parte hay que identificar el flujo de lookup (que puede ser por
ejemplo la tabla de clientes y productos cuyas claves primarias se unen a las foráneas
del flujo principal, para mostrar el nombre de clientes y de los productos que no
aparecen en la tabla ventas).
Luego en la pestaña de configuración del componente tJoin, únicamente debemos
indicar las claves de unión de los dos flujos, sea única de un campo o doble o de más
de un campo. Así como los campos de la tabla de lookup que queremos mantener en
el flujo de salida. Hay que tener en cuenta que los campos del flujo main se mantienen
todos, dado que no es modificable su incorporación.
tMap: Un comodín que une con join, filtra y genera expresiones
Es una joya de Talend, la verdad es que de manera muy intuitiva conecta cualquier
número de flujos de entrada y genera cualquier número de flujos de salida. El tMap,
tiene un asistente gráfico que permite una configuración muy sencilla.
Como en el caso anterior del tJoin lo primero de todo es identificar que flujo es el
principal. El flujo principal o main, que se nos muestra en el job con línea
continua, ha de ser la tabla de hechos o con las medidas o métricas además de
incorporar alguna clave que nos permita conectar con alguna de las otras
tablas que vienen de los flujos de lookup. Los Flujos de lookup se conectaran al
componente de tMap con flujo discontínuo.
Una vez conectados los flujos, configuramos el componente. En los paneles de la
izquierda de la pantalla de configuración de tMap, encontramos los imputs de datos
sobre estos imputs debemos relacionar las claves. Estas relaciones las establecemos
simplemente «drag and drop», es decir arrastrando el campo de la clave foránea del
flujo main a la clave primaria de un flujo de lookup, tras lo cual observamos que los
campos relacionados de cada tabla quedaran conectados mediante una línea de un
color violeta. También nos aparecerán unas llaves sobre los campos clave de las
tablas de lookup de color azul que indican la relación definida en esas claves.
Con el botón de configuración, representado por la llave inglesa, en cada flujo
imput, podemos configurar el tipo de unión de cada flujo con el flujo main, puede ser
de tipo «left outer», o «inner» es decir en «inner» no se incorporan los registros no
coincidentes y el el «left outer» se mantienen todos los registros con clave de unión
«null».
Después de crear las relaciones, ya podemos generar las tablas de salida de datos,
que podemos generar los que necesitemos, creando los mismos con el «+» de la
parte superior del panel derecho. Así nos devuelve este componente de 1 a n salidas
«output».
Los campos de cada flujo de salida los podemos arrastrar de los flujos de origen,
vemos que se nos generan unas líneas de relación entre los campos de los flujos de
entrada y salida. Si seleccionamos un flujo, estas relaciones las vemos en amarillo y
el campo de la tabla de origen lo vemos de color verde y si no está seleccionado la
relación la vemos de color gris.
Pero eso no es todo también podemos filtrar los datos y esto lo podemos hacer
mediante el segundo botón de flecha y +. Una vez le damos al botón se nos abre un
espacio para introducir la condición que la podemos escribir de manera asistida
abriendo el editor pulsando el botón de la derecha de los tres puntos. Una vez
introducida la condición (en el ejemplo filtramos la «zona_1») vemos que se nos
establece una relación de color naranja con los campos implicados en la condición.
Importante indicar que en la condición de la expresión del tMap: Si el campo es
numérico usaríamos el operador «==», es decir, por ejemplo [Link]==1. Pero si es
string utilizaremos la función equals, es decir [Link](«Zona_1»), tal
como muestra la imagen anterior. También podemos crear una nueva salida de los
registros rechazados con la expresión anterior creando otra salida de output, con el
mismo esquema de columnas y en el botón de configuración del output de la llave
inglesa marcar «Catch output reject -> True». De forma similar también podemos
obtener registros rechazados por el tipo de unión inner indicando de igual
manera»Catch lookup inner join reject->»
Pero aquí no se acaba la cosa, no señor… desde el tMap podemos hacer más cosas,
como por ejemplo generar nuevos campos con expresiones.
¿Cómo generar campos con expresiones en tMap? Pues lo primero que
necesitamos es generar en el esquema de salida nuevos campos mediante la tecla
«+» y configurar el tipo de datos que precisamos.
Podemos como ejemplo generar 3 campos nuevos que nos puden ser útiles:
1. Una columna con un valor fijo constante
2. Una fórmula que nos calcule el precio medio (Ventas / Unidades)
3. Una tercera columna de time stamp, que nos marque la fecha y hora de
creación del registro
4. Otra columna de clave primaria del flujo de salida, es decir una columna con la
secuencia numérica que podamos utilizar como clave primaria de una tabla de
datos
Una vez creados los 3 nuevos campos en el esquema ya podemos generat la
expresión, que en nuestro caso será con la ayuda del botón de los 3 puntos que nos
abre el asistente de expresiones.
La primera columna es muy sencilla de crear pues simplemente debemos indicar el
valor de la constante incorporamos en el campo (en el ejemplo una constante de valor
int 1).
La segunda si utilizamos el asistente es muy sencillo, arrastramos o doble clic en los
cuadros de los campos que necesitamos en nuestra expresión al cuadro de
expresiones utilizando los botones de las operaciones que necesitemos:
Arrastramos el campo [Link], pulsamos el botón del operador división / y
arrastramos el campo [Link], quedando la expresión como en la imagen
siguiente
Para la tercera columna de crear una columna que nos indique el sello de tiempo
utilizaremos las funciones que nos ofrece el asistente. Buscamos en la categoría de
funciones TalendDate y elegimos la función getDate. Al seleccionar nos aparece en la
pantalla de expresión la función con un patrón de fecha-hora.
De igual manera actuamos para obtener la columna con la secuencia
numérica. Seleccionamos la categoría «Numeric» y seleccionamos la función
«Sequence». «S1» es el contador de la numeración, si queremos tener más de un
contador que no siga la misma numeración tenemos que crear otro contador, por
ejemplo «S2»
Podemos utilizar así una gran variedad de funciones predefinidas para generar
expresiones que podemos incorporar en campos de salida.
Pero la potencia del tMap no acaba ahí podemos aún hacer más cosas, como por
ejemplo crear y utilizar variables globales que podemos utilizar tanto dentro como
fuera del componente tMap,
¿Cómo crear y asignar variables a campos mediante tMap?
En el cuerpo central de configuración del tMap es donde podemos crear expresiones
que podemos guardar en variables para ser utilizadas en expresiones de campos
generados de los outputs o incluso creando directamente nuevos campos arrastrando
la variable al output. En el ejemplo siguiente, creamos una variable llamada Var1
mediante una expresión que concatenamos dos campos de dos imputs de datos
mediante el + y le añadimos un espacio » » entre medio de los campos.
Componentes Para «Data Quality».
Este grupo de componentes, se utilizan para transformar los datos para cumplir los
requisitos de un esquema. Estos componentes están muy relacionados con el
componente que vimos en el grupo de filtros que era
el tSchemaComplianceCheck que nos separaba en un flujo diferente al principal
aquellos registros que incumplían los requisitos del esquema.
En el ejemplo que se utilizó, separaba el registro «dos» debido que es un dato de
cadena de texto » string» que no cumplía el ser un número entero «integer».
Lo que podemos hacer es cambiar el registro con «dos» por otro con «2». Esto lo
podemos hacer con el componente tReplace.
El componente tReplace permite buscar una cadena de texto y substituirla por
otra. Le podemos indicar si substituye toda la palabra si es «case sensitive» es decir
si discrimina o no Mayúscula/minúscula. También tenemos la opción en Advanced
mode en utilizar expresiones regulares.
En el ejemplo le indicamos que busque «dos» y lo substituya por «2», con lo que una
vez sustituido, tenemos ya todos los datos numéricos que podemos convertir de string
a int. Esta conversión la podemos hacer con el componente tConvertType.
El componente tConvertType nos permite establecer un esquema y mediante la
opción «Autocast» convertir los tipos de origen al «datatype» establecido en el
esquema. También si no queremos convertir todo el esquema, podemos hacerlo
manualmente de algunas columnas mediante la opción «Manual Cast».
El ejemplo muestra como el componente de tSchemaComplianceCheck rechaza los
registros que no cumplen. El componente tReplace substituye los valores para que
cumpla («dos» por «2». Por último el componente tConvertType, cambia el datatype
(En el ejemplo de «string» a «integer».)
El componente tFilterColumns, nos ayuda a eliminar las columnas del esquema que
no sean necesarias, simplemente modificando el esquema.
Otros Componentes De Transformación
Componente tAggregate: Nos permite agregar registros a partir de uno o varios
campos y unas funciones de agregación de forma idéntica al «group by» SQL. En la
parte superior indicamos los campos que queremos agregar y en la inferior los
campos con las funciones de agregación.