http://www.jgarces.info/introduccion-a-informatica-powercenter/
Informatica PowerCenter
CONTENIDOS
DISEÑO Y EJECUCIÓN DE PROCESOS
1. Definir el Source
a. Desde una Base de Datos Relacional
b. Desde un Archivo Plano
c. Desde un Archivo Cobol
d. Desde un Objeto XML
b. Desde un Archivo Plano
c. Desde un Archivo Cobol
d. Desde un Objeto XML
2. Definir el Target
a. Desde una Base de Datos Relacional
b. Desde Objeto XML
c. A partir de un Source
b. Desde Objeto XML
c. A partir de un Source
3. Creación del Mapping
a. Conversión de Tipos de Datos
b. Source Qualifier – Normalizer
c. Edición de Expresiones
i. Funciones de Agregación
ii. Funciones de Caracteres
iii. Funciones de Conversión
iv. Funciones de Limpieza de Datos
v. Funciones de Fecha
vi. Funciones Numéricas
vii. Funciones Científicas
viii. Funciones Especiales
d. Validación de Mappings
b. Source Qualifier – Normalizer
c. Edición de Expresiones
i. Funciones de Agregación
ii. Funciones de Caracteres
iii. Funciones de Conversión
iv. Funciones de Limpieza de Datos
v. Funciones de Fecha
vi. Funciones Numéricas
vii. Funciones Científicas
viii. Funciones Especiales
d. Validación de Mappings
4. Construcción de Workflows
a. Agregar una Tarea (Session Task)
b. Configurar Conexiones
b. Configurar Conexiones
5. Ejecución de Workflows
MAPPLETS
Ventajas de utilizar Mapplets
Limitaciones en la construcción de Mapplets
Limitaciones en la construcción de Mapplets
TRANSFORMACIONES
Source Qualifier
Expression
Filter
Sorter
Agreggator
Joiner
Update Strategy
Router
Sequence
Expression
Filter
Sorter
Agreggator
Joiner
Update Strategy
Router
Sequence
INTRODUCCIÓN
Informática PowerCenter es una herramienta ETL (del inglés Extraction, Transformation and Load) que permite realizar tareas de extracción, transformación y carga de datos de diferentes sistemas, permitiendo generar, entre otros, los DataWarehouse de una empresa.
Informática cuenta con una parte cliente y otro servidor. El cliente se ejecuta en sistemas operativos Windows y el servidor en Unix, Linux o Windows.
Como se puede ver en la imagen I, el elemento central de la herramienta es un Repositorio que contiene toda la información centralizada. Las herramientas cliente son cinco:
- Repository Manager: Tareas de administración del repositorio
- Designer: Diseño de las transformaciones
- Workflow Manager: Configuración del servidor y las ejecuciones
- Workflow Monitor: Revisión de ejecuciones
- Repository Server Administration Console: Administración del repositorio y de los servidores de repositorio
Este documento se centra en el desarrollo de mappings y los elementos que este proceso involucra, analizándose las herramientas Designer, Workflow Manager y Workflow Monitor.
DISEÑO Y EJECUCIÓN DE PROCESOS
El proceso de diseño se puede resumir en los siguientes pasos:
- Definir el Source
- Definir el Target
- Creación del Mapping
- Creación del Workflow
- Ejecución de los Workflow
Definir el Source
El source es la fuente de los datos. Define desde dónde y cómo se obtendrán los datos que serán transformados y cargados al target final. La definición del source se puede obtener de diferentes maneras:
- Una Base de Datos Relacional
- Un Archivo Plano
- Un archivo Cobol
- Un Objeto XML
También se puede crear directamente en forma manual, enlazándose igualmente con alguna de las fuentes de datos anteriores.
Para ingresar en la pantalla de creación de sources se debe buscar el siguiente icono en la barra de herramientas
lo cual habilitará el panel “Source Analyzer” en el cuál se podrá realizar la edición de los diferentes sources como se muestra en la Imagen 1.1.
Analicemos cada una de las formas de generar un source:
Al realizar un source desde una tabla de base de datos se nos consultará el origen, ya sea Microsoft SQL Server, Oracle, Informix, ODBC u otra y se desplegará una lista con todas las tablas que pueden ser usadas para generar el source (ver Imagen 1.2). Luego, podrá agregar o editar sus columnas y tipos de datos, según se muestra en la Imagen 1.3.
Es conveniente realizar siempre una descripción del source y de los campos que puedan requerirlo, al igual que para todos los objetos que sean generados durante el desarrollo, permitiendo con ello que los diseños puedan ser entendidos por cualquier miembro del equipo, facilitando así su posterior seguimiento y modificación.
Desde un Archivo Plano
La definición de sources por medio de archivos planos soporta campos con separadores o de ancho fijo. Este proceso se puede ver en 3 pasos que se presentan en las imágenes 1.4, 1.5 y 1.6, que corresponden a un archivo plano delimitado por tabulaciones.
Este ejemplo varía con respecto a la generación desde un archivo con campos de ancho fijo en que ya no se detectará cada columna en forma automática, como se muestra en la Imagen 1.6, sino que nos pedirá definir el ancho de cada una para dividir el texto.
Al igual que con los sources definidos desde base de datos, se pueden editar sus opciones:
En ambos casos es posible saltar una cierta cantidad de filas antes de comenzar a obtener los datos, lo que permite pasar por alto los encabezados o comentarios que pueda contener el archivo.
Desde un Archivo Cobol
La importación desde un archivo Cobol se puede realizar directamente desde la definición de éste, teniendo presente que el proceso debe ser realizado verificando que el archivo cumpla con el estándar de definición de Cobol, respetando espacios y puntos finales. Informática realiza la importación y genera un source en base al sistema VSAM. En la siguiente imagen podemos ver un ejemplo de este tipo de source.
Como se puede ver en la Imagen 1.10, Informática realiza la conversión de los tipos de datos y mantiene el esquema de agrupamiento que poseía el archivo, lo que se puede apreciar por los espacios que existen al inicio de los nombres de los campos.
Al igual que en los archivos de texto plano, se pueden editar las opciones del archivo Cobol, como se puede ver en la imagen 1.11.
En la Imagen 1.12, se puede ver cómo se realiza la conversión de los tipos de datos entre Cobol e Informática.
Desde un Objeto XML
Además de las formas de generación ya vistas, se puede realizar la importación de sources desde las siguientes fuentes XML:
- Archivo DTD
- Definiciones de Esquemas XML (XSD)
- Archivos XML
Cuando se importa desde un DTD o un archivo de Definición de Esquema XML, Informática puede dar una definición bastante exacta de los datos, basado en las descripciones que entregan este tipo de archivos. Cuando se importa directamente del archivo XML, sin tener asociado un archivo de esquema, la detección de los tipos se realiza basándose en los propios datos.
Informática representa las jerarquías XML de archivos XML, DTD o de esquemas como grupos lógicos relacionados con claves primarias y foráneas al definir el source. Informática puede generar dichos grupos y claves o pueden ser generados por el propio usuario.
Definir el Target
El target indica hacia dónde van los datos transformados obtenidos desde el source, en qué base de datos o archivo serán cargados.
Para ingresar a la pantalla de creación de targets se debe presionar el siguiente icono
lo cual habilitará el panel “Target Designer” para editar los targets, como se puede ver en la Imagen 2.1.
La generación del target puede ser de varias formas:
- Desde una Base de Datos Relacional
- Desde Objeto XML
- A partir de un Source
- Crear manualmente, lo que se enlazará con alguna de las opciones anteriores.
Desde una Base de Datos Relacional
La creación de un target desde una base de datos relacional es muy similar a la creación del source que se genera del mismo modo. Se nos pedirá los datos de conexión y luego se desplegará el listado de tablas que posee la base de datos, de la que seleccionaremos la que corresponda a nuestro target.
Como se ve en la Imagen 2.2, al generar el target podremos editar y agregar nuevas columnas, modificar su orden, tipos de datos y claves primarias.
Desde Objeto XML
Como en el caso de los sources, los targets también pueden ser importados desde fuentes XML como:
- Archivo DTD
- Definiciones de Esquemas XML (XSD)
- Archivos XML
Se aplican aquí los mismos criterios que se han comentado en la definición de sources desde objetos XML.
A partir de un Source
Si el target es similar o posee la misma estructura que algún source generado anteriormente, la forma más rápida de generar el target pude ser arrastrando dicho source hacia el área del “Warehouse Designer”, como se muestra en la Imagen 2.3.
Creación del Mapping
Los mappings representan el flujo de los datos desde el source hasta el target. Es la combinación del conjunto de sources, la aplicación de las diferentes transformaciones y la posterior carga en los targets. Los flujos de datos pasan de izquierda a derecha como puertos por las transformaciones, pudiendo ser de entrada, salida o entrada/salida.
Para ingresar a la interfaz de diseño de mappings se debe presionar el siguiente ícono
, como se muestra en la Imagen 3.1.
En el panel de la izquierda podremos encontrar todos los objetos que hemos generado, sources, targets, mappings, mapplets, etc. y en el panel inferior tenemos todos los mensajes que Informática entrega durante en desarrollo, ya sea validaciones, errores, alertas u otras.
Durante la edición del mapping podemos encontrarnos con diferentes tipos de vistas de los objetos que ponemos en él, como son: vista iconizada, vista normal y vista de edición de la transformación. En las imágenes 3.2 y 3.3 podemos ver cada una de ellas.
La vista iconizada sólo nos permite tener mayor espacio para el diseño, ya que no pueden editarse los puertos ni los links entre las transformaciones. Por otro lado, la vista normal permite copiar y enlazar los puertos entre los diferentes objetos.
La vista de edición es utilizada para agregar, modificar o eliminar puertos de una transformación, así como editar sus atributos o propiedades. Además, en esta vista es posible editar expresiones personalizadas, como se muestra en la Imagen 3.3 y que se verán en detalle más adelante en este mismo punto.
Conversión de Tipos de Datos
Cuando los datos son leídos desde el servidor para un source, los tipos de datos nativos son convertidos a los tipos de datos que Informática maneja, realizándose igualmente, una conversión desde los tipos de datos de Informática a los tipos de datos del target.
Los datos se convierten de uno a otro cuando:
- Pasan datos entre puertos con diferentes tipos de datos
- Pasan datos desde una expresión a un puerto
- Se usan funciones de transformación
- Se usan operadores aritméticos
Sólo es soportada la conversión de:
- Tipos de datos numéricos ? Tipos de datos numéricos
- Tipos de datos numéricos ? String
- Tipos de datos Date/Time ? Date ó String
Para mayor información sobre la conversión de tipos de datos se puede leer la ayuda de Informática en “Client Help > Index > port-to-port data conversion“.
Source Qualifier – Normalizer
Source Qualifier y Normalizer son dos transformaciones utilizadas para interpretar los tipos de datos de los diferentes sources y convertirlos a los tipos de datos que Informática utiliza, insertándose en los mapping automáticamente al agregar cualquier tipo de source.
Todo mapping que contenga sources desde una base de datos relacional o archivos planos debe tener una transformación Source Qualifier, como se muestra en la imagen 3.5.
Imagen 3.5. Source Qualifier
Para aquellos sources que provengan desde una base de datos relacional se habilitara en el Source Qualifier una opción con la que podrá personalizar la selección de los datos mediante una consulta SQL, como se muestra en la imagen 3.6 y 3.7.
Imagen 3.7. Editor Sql personalizado
El uso de la opción de Sql Query fuerza al servidor a utilizar el SELECT especificado en lugar del query por defecto. Sobrescribe toda configuración para Join, Filtro de Source, Número de Puertos Ordenados y Distinct. Además, debe obtener las columnas en el mismo orden que lo haría el query por defecto.
Por otro lado, se encuentran los Normalizer, que se insertan en los mappings al agregar cualquier source del tipo VSAM (COBOL), como se muestra en la imagen 3.7.
Edición de Expresiones
Una expresión es una instrucción de cálculo o condicional que puede ser agregada a una transformación. Esta expresión usa el lenguaje de tranformación de Informática que contiene un grán número de funciones diseñadas para el manejo común de datos. Por ejemplo, la función TO_CHAR es usada para convertir de date a string, la función SUBSTR es usada para obtener una porción de una cadena de caracteres.
Una expresión está compuesta por puertos (input, input/output, variable), funciones, operadores, variables, literales, valores de retorno y constantes. Las expresiones pueden ser utilizadas en las siguientes transformaciones:
- Expression – En puertos de Salida
- Aggregator – En puertos de Salida
- Rank – En puertos de Salida
- Filter – En la Transformación
- Update Strategy – En la Transformación
Para editar una expresión se debe presionar el botón que aparece en la columnaExpression como se muestra la imagen 3.8.
Al abrirse el Editor de Expresiones se encontrará con una ventana como la mostrada en la imagen 3.9, la cual cuenta con un panel (a la izquierda) donde se encuentran todas las funciones, puertos y variables que se pueden utilizar en la expresión. En la zona de edición (a la derecha) podremos modificar la expresión escribiendo directamente las instrucciones que deseemos y luego realizar la validación con el botón “Validate” o simplemente presionando “OK”.
Para insertar comentarios dentro de la expresión sólo se debe poner el prefijo “–” ó “//” a la línea que se desea comentar.
Veamos ahora cada una de las funciones que se pueden utilizar en el editor de expresiones que han sido agrupadas según las necesidades que se puedan presentar.
Funciones de Agregación
Son funciones que permiten realizar cálculos sobre conjuntos de valores realizando la agrupación de los mismos.
Nombre
|
Sintaxis
|
Descripción
|
AVG
|
AVG( numeric_value [,filter_condition ] )
|
Retorna el promedio de todos los valores en el grupo.
|
COUNT
|
COUNT( value [, filter_condition ] )
ó COUNT( * [, filter_condition ] ) |
Retorna el número de registros con valores no nulos en el grupo
|
FIRST
|
FIRST( value [, filter_condition ] )
|
Retorna el primer registro en el grupo.
|
LAST
|
LAST( value [, filter_condition ] )
|
Retorna el último registro en el grupo
|
MAX
|
MAX( value [, filter_condition ] )
|
Retorna el máximo valor o la última fecha encontrada en un grupo.
|
MEDIAN
|
MEDIAN( numeric_value [,filter_condition ] )
|
Retorna la media de todos los valores en el puerto seleccionado.
|
MIN
|
MIN( value [, filter_condition ] )
|
Retorna el mínimo valor o la primera fecha encontrada en un grupo.
|
PERCENTILE
|
PERCENTILE( numeric_value,percentile [, filter_condition ] )
|
Retorna el percentil de un grupo.
|
STDDEV
|
STDDEV( numeric_value [,filter_condition ] )
|
Retorna la desviación estándar de un grupo.
|
SUM
|
SUM( numeric_value [,filter_condition ] )
|
Retorna la suma de todos los registros de un grupo.
|
VARIANCE
|
VARIANCE( numeric_value [,filter_condition ] )
|
Retorna la varianza de todos los registros de un grupo.
|
Funciones de Caracteres
Nombre
|
Sintaxis
|
Descripción
|
ASCII
|
ASCII ( string )
|
En modo ASCII retorna el número ASCII del primer carácter del string.
En modo Unicote retorna el número Unicote del primer carácter del string.
Esta función es idéntica en comportamiento a la función CHRCODE.
|
CHR
|
CHR( numeric_value )
|
Retorna el carácter ASCII o Unicote correspondiente al número especificado.
|
CHRCODE
|
CHRCODE ( string )
|
En modo ASCII retorna el número ASCII del primer carácter del string.
En modo Unicote retorna el número Unicote del primer carácter del string.
Esta función es idéntica en comportamiento a la función CHRCODE.
|
CONCAT
|
CONCAT( first_string,second_string )
|
Concatena dos strings.
|
INITCAP
|
INITCAP( string )
|
Convierte la primera letra de cada palabra del string en mayúscula y las demás letras en minúsculas.
|
INSTR
|
INSTR( string, search_value [, start[, occurrence ] ] )
|
Retorna la posición de un carácter dentro de un string contando desde la izquierda a la derecha.
|
LENGTH
|
LENGTH( string )
|
Retorna el número de caracteres de un string.
|
LOWER
|
LOWER( string )
|
Convierte a minúsculas los caracteres de un string.
|
LPAD
|
LPAD( first_string, length [,second_string ] )
|
Agrega caracteres al inicio de un string.
|
LTRIM
|
LTRIM( string [, trim_set ] )
|
Elimina los espacios en blanco al inicio de un string.
|
REPLACECHR
|
REPLACECHR( InputString,OldCharSet, NewChar )
|
Reemplaza un carácter en un string.
|
REPLACESTR
|
REPLACESTR ( InputString,OldString1, [OldString2, ...OldStringN,] NewString )
|
Reemplaza una string dentro de otro.
|
RPAD
|
RPAD( first_string, length [,second_string ] )
|
Agrega caracteres al final de un string.
|
RTRIM
|
RTRIM( string [, trim_set ] )
|
Elimina los espacios en blanco al final de un string.
|
SUBSTR
|
SUBSTR( string, start [, length ] )
|
Retorna una porción de un string.
|
UPPER
|
UPPER( string )
|
Convierte en mayúsculas los caracteres de un string.
|
Funciones de Conversión
Funciones de conversión de tipos de datos. Éstas son útiles para evitar problemas en comparaciones y asignaciones de puertos.
Nombre
|
Sintaxis
|
Descripción
|
TO_CHAR
|
TO_CHAR( numeric_value )
TO_CHAR( date [, format ] ) |
Convierte números y fechas en texto.
|
TO_DATE
|
TO_DATE( string [, format ] )
|
Convierte un string en una fecha. Es posible indicar el formato que tiene la fecha por el parámetro format.
|
TO_DECIMAL
|
TO_DECIMAL( value [, scale] )
|
Convierte cualquier valor (excepto binario) en un decimal.
|
TO_FLOAT
|
TO_FLOAT( value )
|
Convierte cualquier valor (excepto binario) a un flotante de doble precisión.
|
TO_INTEGER
|
TO_INTEGER( value )
|
Convierte cualquier valor (excepto binario) a un número entero, redondeando la porción decimal.
|
Funciones de Limpieza de Datos
Agrupación de funciones que ayudan en la limpieza de datos.
Nombre
|
Sintaxis
|
Descripción
|
INSTR
|
INSTR( string, search_value [,start [, occurrence ] ] )
|
Retorna la posición de un carácter dentro de un string contando desde la izquierda a la derecha.
|
IS_DATE
|
IS_DATE( value )
|
Retorna verdadero si el valor es una fecha válida.
|
IS_NUMBER
|
IS_NUMBER( value )
|
Retorna verdadero si el valor es un número válido.
|
IS_SPACES
|
IS_SPACES( value )
|
Retorna verdadero si el valor está conformado enteramente por espacios.
|
ISNULL
|
ISNULL( value )
|
Retorna verdadero si el valor es nulo.
|
LTRIM
|
LTRIM( string [, trim_set ] )
|
Elimina los espacios en blanco al inicio de un string.
|
METAPHONE
|
METAPHONE( string [,length] )
|
Codifica caracteres del alfabeto de la lengua inglesa (A-Z). Codifica letras mayúsculas y minúsculas en mayúsculas.
|
REPLACECHR
|
REPLACECHR( InputString,OldCharSet, NewChar )
|
Reemplaza un carácter en un string.
|
REPLACESTR
|
REPLACESTR ( InputString,OldString1, [OldString2, ... OldStringN,] NewString )
|
Reemplaza una string dentro de otro.
|
RTRIM
|
RTRIM( string [, trim_set ] )
|
Elimina los espacios en blanco al final de un string.
|
SOUNDEX
|
SOUNDEX( string )
|
Codifica un string en una cadena de cuatro caracteres.
|
SUBSTR
|
SUBSTR( string, start [, length ] )
|
Retorna una porción de un string.
|
TO_CHAR
|
TO_CHAR( numeric_value )
TO_CHAR( date [, format ] ) |
Convierte números y fechas en texto.
|
TO_DATE
|
TO_DATE( string [, format ] )
|
Convierte un string en una fecha.
|
TO_DECIMAL
|
TO_DECIMAL( value [, scale ] )
|
Convierte cualquier valor (excepto binario) en un decimal.
|
TO_FLOAT
|
TO_FLOAT( value )
|
Convierte cualquier valor (excepto binario) a un flotante de doble precisión.
|
TO_INTEGER
|
TO_INTEGER( value )
|
Convierte cualquier valor (excepto binario) a un número entero, redondeando la porción decimal.
|
Funciones de Fecha
Nombre
|
Sintaxis
|
Descripción
|
ADD_TO_DATE
|
ADD_TO_DATE( date, format,amount )
|
Agrega un número específico de una parte a una fecha/hora.
|
DATE_COMPARE
|
DATE_COMPARE( date1, date2)
|
Retorna 1, 0, -1 o NULL si date1 es mayor, menor, igual o NULL respectivamente.
|
DATE_DIFF
|
DATE_DIFF( date1, date2, format )
|
Retorna la diferencia entre dos fecha en años, meses, días, horas, minutos o segundos.
|
GET_DATE_PART
|
GET_DATE_PART( date, format)
|
Retorna una parte de una fecha.
|
LAST_DAY
|
LAST_DAY( date )
|
Retorna el último día de un mes.
|
MAX
|
MAX( date, filter_condition )
|
Retorna la mayor fecha de un grupo.
|
MIN
|
MIN( date, filter_condition )
|
Retorna la menor fecha de un grupo.
|
ROUND
|
ROUND( date [, format ] )
|
Redondea una parte de una fecha.
|
SET_DATE_PART
|
SET_DATE_PART( date, format, value )
|
Establece un valor específico para una parte de una fecha.
|
TRUNC
|
TRUNC( date [, format ] )
|
Trunca una fecha a un especificado año, mes, día, hora o minuto.
|
Funciones Numéricas
Funciones para operaciones matemáticas y de manejo de números.
Nombre
|
Sintaxis
|
Descripción
|
ABS
|
ABS( numeric_value
) |
Retorna el valor absoluto de un número.
|
CEIL
|
CEIL( numeric_value
) |
Retorna el número entero más pequeño mayor o igual el valor numérico especificado.
|
CUME
|
CUME( numeric_value [,filter_condition ] )
|
Retorna el total de todos los valores.
|
EXP
|
EXP( exponent )
|
Retorna el valor e elevado a un exponente, donde e = 2.71828183.
|
FLOOR
|
FLOOR( numeric_value )
|
Retorna el número entero más grande inferior o igual el valor numérico especificado.
|
LN
|
LN( numeric_value )
|
Retorna el logaritmo natural de un número.
|
LOG
|
LOG( base, exponent )
|
Retorna el logaritmo de un número.
|
MOD
|
MOD( numeric_value, divisor )
|
Retorna el resto de una división entera.
|
MOVINGAVG
|
MOVINGAVG( numeric_value, recordset [, filter_condition ] )
|
Retorna el promedio (registro a registro) de un grupo de registros.
|
MOVINGSUM
|
MOVINGSUM( numeric_value, recordset [, filter_condition ] )
|
Retorna la suma (registro a registro) de un grupo de registros.
|
POWER
|
POWER( base, exponent )
|
Retorna el resultado de un valor elevado a un exponente.
|
ROUND
|
ROUND( numeric_value [,precision ] )
|
Redondea un número a un número específico de decimales.
|
SIGN
|
SIGN( numeric_value )
|
Indica si un valor es positivo, negativo o 0 (cero).
|
SQRT
|
SQRT( numeric_value )
|
Retorna la raíz cuadrada de un valor positivo.
|
TRUNC
|
TRUNC( numeric_value [,precision ])
|
Trunca un valor a un número específico de dígitos.
|
Funciones Científicas
Funciones para cálculos científicos.
Nombre
|
Sintaxis
|
Descripción
|
COS
|
COS(numeric_value )
|
Retorna el coseno de un número expresado en radianes.
|
COSH
|
COSH(numeric_value )
|
Retorna el coseno hiperbólico de un valor expresado en radianes.
|
SIN
|
SIN( numeric_value)
|
Retorna el seno de un valor expresado en radianes.
|
SINH
|
SINH(numeric_value )
|
Retorna el seno hiperbólico de un valor expresado en radianes.
|
TAN
|
TAN( numeric_value)
|
Retorna la tangente de un valor expresada en radianes.
|
TANH
|
TANH(numeric_value )
|
Retorna la tangente hiperbólica de un número expresada en radianes.
|
Funciones Especiales
Funciones condicionales y de apoyo a la construcción de expresiones.
Nombre
|
Sintaxis
|
Descripción
|
ABORT
|
ABORT( string )
|
Detiene la sesión y usa un error especificado.
|
DECODE
|
DECODE( value, first_search, first_result [,second_search, second_result ]…[, default ] )
|
Busca un puerto para un valor específico.
|
ERROR
|
ERROR( string )
|
Causa que Informática salte el registro y utilice el error especificado.
|
IIF
|
IIF( condition, value2 [, value2 ] )
|
Retorna uno o más valores de acuerdo a la condición especificada.
|
LOOKUP
|
LOOKUP( result, search1, value1 [, search2, value2]… )
|
Busca un valor en una columna origen. Se recomienda utilizar la transformación Lookup en su lugar.
|
Validación de Mappings
Generalmente, la validación es realizada al momento de guardar un mapping, aunque durante el diseño puede realizar varios tipos de validaciones.
Una validación típica en diseño es cuando se intentan conectar dos puertos. Si Informática detecta un error al intentar conectar los puertos, exhibe un símbolo que indica que los puertos no pueden ser conectados. También exhibe un mensaje de error en la barra de estado. Al intentar conectar puertos, Informática busca los siguientes errores:
- Puertos mal conectados por tipos de datos: Antes de realizar una conexión de puertos, Informática comprueba los tipos de datos de éstos. Si bien no es necesario que sean idénticos, deben ser compatibles, ejemplo: char y varchar.
- Puertos de salida que conectan a un source: Informática evita que se conecten puertos a un source.
- Conexión de un source con una transformación distinta a un Source Qualifier: Informática valida que todo source deba estar conectado a un Source Qualifier.
- Puertos de entrada que conectan a puertos de entrada o de salida que conectan a salidas: Debido a la lógica de flujo de datos entre source y targets no es posible realizar este tipo de conexiones.
- Copiado de Columnas en un Target: Los usuarios no pueden copiar columnas en la definición del target, el Warehouse Designer es el único que puede realizar este tipo de modificaciones.Los mappings pueden contener muchos tipos de problemas, por ejemplo:
- Una transformación puede estar mal configurada.
- Una expresión incluida en una transformación puede tener una sintaxis errónea.
- Un target puede no recibir datos desde ningún source.
- Un puerto de salida no es utilizado
Informática realiza la validación de la conexión de puertos entre transformaciones, compila las expresiones y guarda el mapping.
El resultado de la validación es mostrado en la ventana Output en la pestaña Validate (ver imagen 3.10).
Construcción de Workflows
Como su nombre lo indica, los Workflows son flujos de trabajo donde se organiza la ejecución de los diferentes mappings. El diseño de los Workflows se realiza en elWorkflow Manager, que se puede abrir desde cualquier ventana buscando el ícono o directamente en el menú, como se muestra en la imagen 4.1.
Imagen 4.1. Diferentes formas de abrir el Workflow Manager
Al abrir el Workflow Manager nos encontraremos con una ventana como la que se muestra en la Imagen 4.2.
Imagen 4.2. Diseñador de Workflows
En la construcción de un Workflow nos encontraremos con un inicio (Start), una o más sesiones (Session), comandos (Command), mensajes (Email), decisiones (Decision), asignaciones (Assignment), contadores de tiempo (Timer), controladores (Control), tiempos de espera de eventos (Event Wait) y levantadores de eventos (Event Raise).
En la imagen 4.3 podemos ver un ejemplo de Workflow con algunos de los elementos más comunes.
Como se aprecia en la imagen, las dos sesiones se ejecutarán en forma paralela y el comando sólo se podrá ejecutar cuando la sesión 1 haya finalizado.
Cuando diseñamos un Workflow nos podemos encontrar con 3 tipos de órdenes en la ejecución de éstos: secuenciales, concurrentes y combinados. Podemos ver un ejemplo de cada uno en las imágenes 4.4, 4.5 y 4.6.
Imagen 4.4. Diseño de un Workflow secuencial, donde cada componente
se ejecuta después de que el anterior ha finalizado.
Imagen 4.5. Diseño de un Workflow concurrente,
donde todos los componentes se ejecutan en paralelo
Imagen 4.6. Diseño de un Workflow combinado, donde existen componentes
que se ejecutan en paralelo y otros secuencialmente.
El orden en la ejecución de las diferentes tareas es de vital importancia para un óptimo uso de los recursos, pues tareas que no son dependientes entre sí pueden realizarse en paralelo para así disminuir el tiempo de ejecución de los Workflows.
Para crear un nuevo Workflow debemos ir al menú de nuestro Workflow Manager y seleccionar la opción Workflows->Create…, como se muestra en la imagen 4.7.
Imagen 4.7. Creación de un nuevo Workflow
Al seleccionar la opción indicada, aparecerá una ventana (Imagen 4.8) en la que se nos pedirá el nombre del Workflow (obligatorio para comenzar el diseño) y algunos parámetros que podremos configurar con posterioridad.
Imagen 4.8. Parámetros de nuevo Workflow
Al hacer presionar OK ya podremos comenzar el diseño de nuestro Workflow. En forma automática nos mostrará el primer componente (Start), el inicio de todo Workflow.
Durante la construcción del Workflow insertaremos una serie de componentes que deben ser unidos por un enlace que indique su orden. Este puede ser obtenido presionando el siguiente icono en la barra de herramientas
.
Como podemos ver en la Imagen 4.9, nos podemos encontrar con dos tipos de enlaces, absolutos y condicionales.
Un enlace condicional sólo permitirá que la ejecución de la siguiente tarea se lleve a cabo si se cumple la condición que se está evaluando, de no ser así, la ejecución de las tareas siguientes no se realiza.
a. Agregar una Tarea (Session Task)
Las tareas son el principal componente de un Workflow y se utilizan para agregar los diferentes mappings que hemos realizado. Todas las configuraciones que se incluyen en esta tarea son utilizadas para realizar el movimiento de los datos desde los sources a los targets.
Para agregar una nueva tarea se debe presionar el icono
o ir al menú Tasks -> Create…, como se aprecia en la imagen 4.10.
Al seleccionar la opción indicada, nos mostrará una nueva ventana (imagen 4.11) donde ingresaremos el nombre de nuestra tarea y presionaremos el botón Create.
Imagen 4.11. Creación de una nueva tarea
Luego de ingresar el nombre debemos seleccionar el mapping que formará parte de la tarea, para ello se desplegará la siguiente ventana (imagen 4.12).
Imagen 4.12. Selección de mapping para una tarea
Una vez agregada la tarea al Workflow, debemos configurar los diferentes parámetros que posee el mapping, conexiones a servidores, direcciones y nombres de archivos, valores de variables, entre otras.
Para configurar el mapping se debe seleccionar la pestaña Mapping en las propiedades de la tarea, como se muestra en la imagen 4.13.
Imagen 4.13. Modificación de propiedades de los sources de un mapping
Como se observa en la imagen, cada objeto del mapping puede ser configurado independientemente, definiéndose, como en el caso de los sources, su origen, conexión al servidor, nombre de archivo o tabla de la base de datos, etc.
Al igual que los sources, los targets pueden ser configurados con parámetros muy similares, como se puede ver en la imagen 4.14.
Imagen 4.14. Modificación de las propiedades de los targets de un mapping.
b. Configurar Conexiones
Durante la configuración de un Workflow es necesario agregar todas aquellas conexiones que permitirán la obtención y grabado de los datos. Para ello nos dirigiremos al menú de nuestro Workflow Manager y seleccionaremos la opción correspondiente dentro de los submenús de la opción Connections, como se puede apreciar en la imagen 4.15.
A continuación analizaremos las conexiones más utilizadas en un proceso ETL. La primera opción es la de una conexión a una base de datos relacional, cuya configuración podemos apreciar en la imagen 4.16.
En la siguiente imagen podemos ver la configuración de una conexión FTP, utilizada principalmente para la obtención de archivos planos.
Finalmente, en la imagen 4.18 podemos ver la configuración de un cargador externo de base de datos.
Es importante verificar, además de las configuraciones aquí indicadas, las configuraciones que deben ser realizadas en el servidor de Informática para que estas conexiones puedan funcionar correctamente.
Ejecución de Workflows
Una vez finalizada la construcción y configuración de los diferentes parámetros de nuestro Workflow, debemos guardar los cambios que hemos realizado y ejecutar dicho Workflow. Para ello seleccionaremos la opción Workflows -> Start Workflow del menú, como se muestra en la imagen 5.1.
Una vez que el Workflow se está ejecutando, podemos ver el estado y resultados de la ejecución a través de la herramienta Workflow Monitor, como podemos ver en la imagen 5.2.
Imagen 5.2. Herramienta WorkFlow Monitor
En el Workflow Monitor nos encontraremos con el listado de tareas que se pueden o están ejecutando y los resultados que han sido obtenidos. Podemos iniciar, reiniciar o detener tareas, ver los tiempos de duración de las mismas y analizar los diferentes problemas que pudiesen presentarse. Veamos uno ejemplos en las imágenes 5.3 y 5.4.
Mapplets
Los mapplets son objetos que se utilizan dentro de los mappings y que agrupan un conjunto de transformaciones que realizan una tarea común a varios mappings.
Cuando se identifica un proceso que se va a repetir varias veces, es conveniente incluirlo en un mapplet que repetir dicho proceso completo dentro de todos los mappings.
Para crear un mapplet debemos abrir la herramienta Mapplet Designer presionando el icono
como se muestra en la imagen II.
Al presionar el icono nos encontraremos con una ventana como la imagen III, muy similar al Mapping Designer (ver imagen 3.1).
Imagen III. Mapplet Designer
En dicha ventana crearemos nuestros mapplets, dirigiéndonos al menú Mapplets opción Create…, donde se nos pedirá el nombre y ya podremos comenzar el diseño.
Lo principal en la creación de un mapplet es definir lo que entrará y lo que saldrá del mismo. Para ello se utilizarán dos transformaciones que podemos encontrar en nuestra barra de herramientas “Mapplet Input” 
y “Mapplet Output”
.
y “Mapplet Output”
Al insertar el Mapplet Input y Output definiremos los puertos que nuestro mapplet necesita de entrada para su funcionamiento y lo que entrega luego del proceso. Veamos en la imagen IV un ejemplo de cada uno.
Veamos en la imagen V, un ejemplo de mapplet construido con la entrada y salida anteriores.
Imagen V. Ejemplo de mapplet
Al insertar nuestro mapplet en un mapping obtendremos algo similar a la imagen VI, donde están claramente identificados los puertos que debemos enlazar de entrada y salida del mapplet.
Imagen VI. Inserción de un mapplet en un mapping
Otro tipo de mapplet puede ser en el que se definen varios grupos de salidas, como se puede ver en la imagen VII.
Imagen VII. Mapplet con varios grupos de salidas
Al incluir el mapplet anterior en nuestros mappings nos encontraremos con un panorama como el de la imagen VIII.
Imagen VIII. Inserción de mapplet con varios grupos de salida
Ventajas de utilizar Mapplets
Entre las muchas ventajas que podemos encontrar para utilizar mapplets podemos mencionar las siguientes:
- Son útiles para tareas repetitivas y lógicas
- Representan un conjunto de transformaciones
- Son reutilizables
- Las instacias de un mapplet pueden ser utilizadas en la construcción de uno o más mappings
- Los cambios en el mapplet son heredables a todas las instancias del mismo
- El servidor amplía el mapplet en tiempo de ejecución
Limitaciones en la construcción de Mapplets
Las limitaciones en la construcción de un mapplet pasan principalmente por la restricción en el uso de ciertas transformaciones. Así, las siguientes transformaciones no pueden ser utilizadas dentro de un mapplet.
- XML sources
- Cobol Sources
- Normalizer
- Pre-Session y Post-Session de procedimientos almacenados
- Definiciones de Targets
- Otros mapplets
Transformaciones
Dentro de las transformaciones que podemos utilizar en un mapping nos encontramos con las siguientes:
Source Qualifier: Lee datos desde archivos planos y bases de datos relacionales.
Expression: Realiza cálculos a nivel de fila.
Filter: Filtra las filas de acuerdo a la condición especificada, eliminando las que no cumplan la condición.
Sorter: Ordena los datos.
Aggregator: Realiza cálculos de agregación.
Joiner: Realiza joins entre sources.
Lookup: Busca valores y los entrega a otro objeto.
Update Strategy: Realiza la inserción, actualización, eliminado o expulsión de los datos de acuerdo a cierta condición.
Router: Divide las filas de acuerdo a cierta condición.
Sequence Generator: Genera ids únicos.
Normalizer: Normaliza los registros desde sources relacionales o VSAM.
Rank: Filtra un rango de registros.
Union: Realiza la unión de varios flujos de datos en uno.
Stored Procedure: Realiza llamadas a un procedimiento almacenado.
Analicemos a continuación las transformaciones más comunes que podemos utilizar:
Source Qualifier
Realiza la obtención de datos desde bases de datos relacionales y archivos de texto plano. Este tipo de transformaciones son obligatorias en los mappings que contienen algún tipo de sources de los antes mencionados. Veamos en la imagen IX un ejemplo de este tipo de transformación:
Imagen IX. Edición de Source Qualifier
Este tipo de transformaciones es de vital importancia en bases de datos relacionales, ya que en la propiedad Sql Query permiten el filtrado de los datos que son obtenidos, para obtener un menor número de filas y por ende, una disminución en la carga del servidor.
Además, permite realizar joins entre tablas y el ordenamiento de los datos, disminuyendo el número de transformaciones dentro del mapping.
Expression
Las expresiones son las transformaciones que permiten realizar los cálculos sobre las filas, así como agregar variables y puertos. Este tipo de transformaciones de utilizan principalmente para realizar la conversión y limpieza de los datos. En la imagen X se puede ver un ejemplo de expression.
Imagen X. Ejemplo de Expression
Otro punto importante a tener en consideración es que los puertos que saldrán de la expresión son sólo aquellos que han sido marcados en la columna O (output), ya que los otros sólo serán utilizados en los cálculos o desechados desde este punto en adelante.
Los puertos generados como variables (columna V) se utilizan para realizar cálculos dentro de las expresiones y no pueden ser utilizados como salidas.
Filter
Los filtros corresponden a transformaciones que permiten eliminar ciertas filas que no cumplan la condición de filtro. Como se pueden ver en la imagen XI, la condición es definida con una expresión incluida en la propiedad Filter Condition y debe retornar sólo los valores TRUE o FALSE.
Imagen XI. Ejemplo de Filtro
Sorter
Esta transformación permite ordenar los datos que llegan a ella de acuerdo a los criterios seleccionados para cada puerto. En la imagen XII podemos ver un ejemplo.
Imagen XII. Ejemplo de sorter
Los puertos que serán ordenados deben ser marcados en la columna KEY y en la columna Direction indicaremos cómo serán ordenados los datos dentro del puerto, ascendente o descendentemente.
Otras propiedades que podemos configurar en el sorter las podemos ver en la imagen XIII, donde podemos indicar entre otros, si el ordenamiento es sensible a mayúsculas y minúsculas.
Imagen XIII. Propiedades de un sorter
Sorter Cache Size le indica al servidor de Informática cuánta memoria asignará al proceso de ordenamiento.
La opción Distinct indica a Informática que mientras realice el proceso de ordenamiento deseche todas aquellas filas que se encuentren duplicadas. Esta opción puede ser útil cuando se obtienen los mismos datos desde distintas fuentes.
Agreggator
La transformación de Aggregator permite que realices cálculos agregados, tales como promedios y sumas, y que realices cálculos sobre grupos. Las funciones agregadas se pueden utilizar sobre uno o más puertos de salida de la transformación. Algunas características específicas de la transformación de Aggregator incluyen:
- Group-by port: Indica cómo crear los grupos. Pueden ser de entrada, entrada-salida, salida, o puerto variable. Al agrupar los datos, la transformación Aggregator hace salir la fila pasada de cada grupo salvo que se especifique lo contrario.
- Sorted Ports option: Esta opción se recomienda altamente para mejorar el funcionamiento de la sesión. Al utilizar ordenamiento de puertos, se debe pasar los datos del Source Qualifier a la transformación clasificada por el puerto Group By, en orden ascendente o descendente. Si no, el servidor leerá y agrupará todos los datos primero antes de realizar cálculos.
- Aggregate cache: El servidor almacena los datos en memoria hasta que termina la agregación requerida. Para reducir al mínimo la paginación al disco, se debe asignar una cantidad apropiada de memoria a los caches de los datos y del índice.
En la imagen XIV y XV podemos ver un ejemplo de agregación y sus propiedades.
Imagen XIV. Ejemplo de agreggator
Imagen XV. Propiedades de una agregación
En la siguiente imagen podemos ver la edición de la expresión de agregación:
Imagen XVI. Edición de expresión de agregación
Joiner
Esta transformación permite realizar el JOIN entre dos fuentes de datos, ya sean dos tablas de una base de datos relacional, dos archivos de texto plano o un archivo de texto plano y una tabla de base de datos. En la imagen XVII podemos ver un ejemplo de esta transformación.
Imagen XVII. Ejemplo de Joiner
Al realizar el join, se debe especificar cuáles serán los campos Master y cuáles serán los campos Detail. Por ejemplo, en el join Clientes y Cuentas los campos master serán los de la tabla Clientes y los campos detail los de la tabla Cuentas, dado que un cliente puede tener una o más cuentas. Esta operación se realiza seleccionando los campos en la columna M.
Para realizar el join es necesario indicar a la transformación cuáles serán los campos master y detail por los que debe realizar el join. Veamos la imagen XVIII.
Imagen XVIII. Condiciones de join
Es posible definir una o más condiciones, dependiendo de las claves por las que se desee unir los datos.
Además, es posible definir una serie de propiedades que se aplicarán en los datos al momento de realizar el join. Para ello veamos la imagen XIX.
Imagen XIX. Propiedades de un joiner
Una de las propiedades que se debe tener presente es el tipo de join que se realizará (Join Type), ya que en ella se indica qué datos serán los que se obtendrán, estos pueden ser:
- Normal Join: Pasan todos los datos que poseen master y detail.
- Master Outer: Pasan todos los datos del master y donde no se encuentren datos para el join, el master pasará nulo.
- Detail Outer: Pasan todos los datos del detail y donde no se encuentren datos para el join, el detail pasará nulo.
- Full Outer: Pasan todos los datos master y detail y donde no se encuentren datos para el join, pasará el master o detail nulos según corresponda.
Lo anterior es similar a Left Join y Right Join que se utilizan en consultas SQL.
En un mapping podemos tener algo como lo que podemos ver en la imagen XX.
Update Strategy
Esta transformación nos permite definir la forma en que se tratarán los datos al momento de ser enviados al target respectivo. Las opciones para esta transformación son insert, update, delete, reject. En la imagen XXI podemos ver un ejemplo.
Imagen XXI. Ejemplo de Update Strategy
El funcionamiento de esta transformación es definido por la expresión que se ingresa en la propiedad Update Strategy Expression.
La expresión es evaluada para cada fila y son marcadas de acuerdo a la lógica de la expresión. Los valores posibles que debe retornar la expresión son:
- DD_INSERT: indica que el registro será insertado en el target
- DD_UPDATE: indica que el registro será actualizado en el target
- DD_DELETE: indica que el registro será eliminado en el target
- DD_REJECT: indica que el registro no será desechado y no producirá cambios en el target.
Un ejemplo de una expresión para esta transformación podría ser:
IIF (puntaje > 50, DD_INSERT, DD_DELETE)
En esta expresión estamos indicando al Update Strategy que si el registro, en el campo puntaje posee una valor mayor a 50, se insertará en el target, en caso contrario será eliminado del target.
Este tipo de transformaciones son útiles para tablas o archivos que se cargarán en forma incremental.
En algunos casos será necesario utilizar una Lookup para que la Update Strategy pueda realizar su trabajo.
Router
Los router son transformaciones que permiten dividir las filas en múltiples direcciones de acuerdo a ciertas condiciones. En la imagen XXII podemos ver un ejemplo de este tipo de transformaciones.
Imagen XXII. Ejemplo de Router
Esta transformación divide los datos en grupos que son definidos a partir de una condición. Los datos que cumplan con la condición de algún grupo serán incluidos en él. Es importante destacar que pudiese haber filas que cumplan la condición de dos o más grupos, por lo que dichas filas se duplicarán para cada grupo.
Al incluir el router en nuestro mapping veremos algo similar a la imagen XXIII.
Imagen XXIII. Ejemplo de Router en un mapping
Como se puede ver, los puertos ingresarán por el grupo INPUT, que se genera automáticamente para recibir los datos. Los puertos de salida se deben enlazar en cada grupo que ha sido definido. El grupo DEFAULT es agregado automáticamente y en él se encontrarán todos los datos que no han cumplido la condición de ningún otro grupo.
Un router puede ser utilizado, por ejemplo, para obtener en forma separada los datos de operaciones que no cumplan un cierto umbral y que debieran ser analizadas en forma diferente.
Sequence
La transformación sequence permite agregar números secuenciales únicos a los registros. Se agregan en forma automática dos puertos NEXTVAL y CURRVAL. En la imagen XXIV podemos ver un ejemplo de esta transformación.
Imagen XXIV. Ejemplo de sequence
No se requieren puertos de entrada para esta transformación y los puertos NEXTVAL o CURRVAL, según se requiera, deben ser unidos con una transformación para generar la secuencia. En la imagen XXV se ven algunas de las propiedades que se pueden establecer para esta transformación.
Imagen XXV. Propiedades de una Secuencia
estimado instale power center en Windows 8 pero no visualizo un acceso directo en el escritorio
ResponderBorrarcon windows 8 sale en aplicaciones en windows 10 ya se crea acceso directo
ResponderBorrarestimados como creo un repositorio para ponerlo a prueba, tu respuesta no me convence tengo ke entrar a la siguiente ruta para acceder c\informática\pcexpress\client\developercliente, instale powercenter express,
ResponderBorrar