Como ferramenta visual, o Informatica PowerCenter oferece as funcionalidades a serem usadas num mapa, transformações, em formato de caixinhas. Cada transformação possui uma finalidade específica e características próprias. É importante compreender cada uma delas e para que servem para interpretar melhor uma especificação e compreender um mapa. Neste módulo vamos ver e conhecer as propriedades e características das principais transformações utilizadas no desenvolvimento de mapas ETL no Informatica PowerCenter. Para usar uma transformação é preciso primeiro colocá-la no mapa.Com o mapa aberto selecione clique num dos ícones da barra transformations.
Com o ícone da transformação selecionada, clicamos uma vez na área do mapping designer.A transformação escolhida aparece na área de trabalho pronta para ser utilizada.
Um clique para selecionar a transformação, podendo assim arrastá-la, copiá-la ou até mesmo excluí-la.
Ao editar uma transformação é preciso alterar/preencher alguns dados padrões.São eles: Nome da transformação, descrição, e se for o caso, portas criadas (portas apenas de saída), variáveis.
No caso das portas criadas e variáveis, devemos também preencher suas descrições. Ainda na aba transformation, preenchemos o campo description, isto é, um leve comentário sobre a função da transformação.
Na aba ports, podemos trabalhar com as portas do fluxo. A barra de ferramentas desta aba permite ao desenvolvedor manusear as portas.
Cria uma nova porta
Copia uma porta
Remove uma porta
Cola uma porta copiada
Move portas para cima e para baixo
Para se transformar um dado é necessário duplicar a sua porta, uma será só de entrada e a outra de saída. Na de saída ocorre a transformação do dado. Por padrão toda vez que não vamos seguir com uma porta num fluxo desativamos sua porta de saída e quando criamos uma porta, desativamos a sua porta de entrada. Cada porta criada deve ter o campo description preenchido com a sua funcionalidade.
Para inserir uma função ou fórmula numa porta, primeiro ela deve estar marcada como porta apenas de saída ou variável.Em seguida clicamos na seção expression correspondente da porta e escrevemos a função ou abrimos o expression editor clicando no ícone ao lado.
No expression editor podemos inserir e editar funções e expressões trabalhando com as portas da transformação.
Temos as abas functions, ports e variables. Functions: Nela temos todas as funções possíveis separadas por categorias.
Functions: Para utilizar uma função, abrimos a categoria onde ela se encontra ou vamos em all functions, e escolhemos a função desejada.Nota-se, ao clicar na função, na parte inferior temos uma descrição da mesma e como usá-la. Clique duplo para colocar a função no editor.
Ports:Nesta aba temos todas as portas usadas na transformação. Um clique e vemos a descrição completa da porta, duplo clique e o nome da porta é inserido no ponto onde está o cursor no editor.
Variables: Nesta aba é possível escolher as variáveis. Podemos usar as dos sistema como passagem de valor (built-in), colocar uma variável do mapa (mapping variables)ou uma de parâmetros (mapping parameters)numa função/expressão.Seguindo o padrão, um clique mostra a descrição e um clique duplo insere a mesma no ponto do cursor no editor.
As variáveis do sistema (built-in) são: sysdate (hora do sistema) e sessstarttime (hora em que foi iniciada a sessão). Na parte inferior do expression editor temos o numeric keypad (números) e o operator keypad (operadores lógicos).
Operadores AND e OR. No primeiro caso (AND) as duas condições tem que acontecer e no segundo (OR) basta apenas uma condição satisfeita.
A função ISNULL() testa se o valor testado é nulo ou não.¡O operador NOT nega o resultado da condição a qual se refere. No exemplo, se o valor for nulo, o resultado em vez de ser verdadeiro será falso.
A função IIF() faz o teste de uma condição. Funciona como um se. No exemplo, se o valor for igual a 5, o campo receberá “Valor é 5”, senão receberá “Valor diferente de 5”.
A função Length() retorna o tamanho da string em questão. No exemplo, caso o campo TEXTO seja “Teste”, ela retornará o valor 5.
As funções RTRIM() e LTRIM() funcionam retirando os espaços do campo em questão. RTRIM() tira os espaços da direita e LTRIM() da esquerda, combinando os dois todos os espaços são retirados dos dois lados.
A função REPLACESTR() substitui um determinado caracter ou string por outro. No exemplo, a partir do primeiro caracter do campo TEXTO, substituir espaço por *.
A função INSTR() verifica se dentro do campo dado existe o caracter ou string desejado, retornando a posição. No exemplo localizar apenas o espaço no campo TEXTO ou espaço a partir do primeiro caracter, a segunda ocorrência.
A função SUBSTR() retira de dentro de uma string outra string de acordo com a posição pedida. No exemplo será retornado a string que começa na posição 1 e termina na posição 5 do campo TEXTO.
As funções TO_CHAR(), TO_DECIMAL() e TO_INTEGER() convertem um valor para string, decimal e inteiro respectivamente. A porta que receber essa conversão precisa estar no tipo resultado da conversão.
As funções TO_CHAR() e TO_DATE() tem estrutura semelhantes quando TO_CHAR() é aplicado para data. Nesse caso é preciso dizer o formato de data que será retornado. No exemplo, o formato será DD/MM/YYYY.
Em algumas transformações, temos a associação entre diferentes fluxos ou tabelas, neste caso, esta associação é feita através de uma condição.
Esta condição é definida na aba condition dentro das transformações pertinentes. Ex.: Joiner e Lookup. Neste caso, temos dois fluxos com uma chave em comum e informações complementares. Faremos um join desses fluxos e usaremos como condição esta chave.
Dentro da transformação, clicamos na aba condition, inserimos uma linha de condição clicando no botão padrão destacado e selecionamos em master e detail os campos que se relacionarão.
Usando a transformação join, juntamos dois fluxos e buscamos todas as ocorrências possíveis na condição. A igualdade da condição pode trazer mais de um registro.
No caso de um lookup, buscamos apenas uma ocorrência. O retorno será do primeiro registro que for encontrado e atender a condição da transformação.
A condição funciona da mesma forma que no exemplo anterior.
A condição funciona da mesma forma que no exemplo anterior.
Uma transformação não precisa ser exclusiva de um mapa. Ela pode fazer parte de vários mapas de um mesmo folder. Neste caso, estamos usando uma transformação reutilizável. A transformação é criada uma vez e pode ser importada para dentro de qualquer mapa do folder que se aplique ao caso.
Para criá-la, clicamos no ícone “Transformation Developer” dentro do “Designer”.
Criamos dentro do “Transformation Developer” uma transformação qualquer, neste exemplo, uma “Expression”.Editamos normalmente a transformação, como se fosse parte de um mapa.
Agora, a transformação pode ser encontrada dentro da seção “Transformations” do folder em que estamos trabalhando. A partir daí ela poderá ser inserida em qualquer mapa do folder, precisando apenas ser arrastada para dentro do mesmo. Para isso, ela precisa fazer parte do contexto desse mapa, pois a mesma não poderá ser alterada e estará marcada como reutilizável.
Uma vez alterada dentro do “Transformation Developer”, a alteração será replicada para todas as suas ocorrências dentro do mesmo folder.
Transformações Passivas:
Não altera o número de linhas – mesmo número de linhas que entra, sai.Exemplos: Expression and Lookup transformations
Transformações Ativas:
Pode alterar a quantidade de linhas (Agrupando, filtrando, etc.)Exemplos: Aggregator, Filter, Joiner transformations
Source Qualifier
Seleciona dados de flat files e bases relacionais. Para bases relacionais, cria uma consulta SQL.
Ativa
As portas representam as colunas da tabela ou os campos de um arquivo texto.Todas as portas são de input/output (I/O)Padrão de Nomenclatura:<SQ>_<descrição>, onde descrição entende-se por nome da tabela ou conjunto de tabelas do qual estão sendo extraídos os dados.
Expression Transformation
Executa calculos linha a linha (sem agregação)
Passiva
O campo Expression fica disponível apenas nas portas de saída (O) ou Variável (V)Padrão de Nomenclatura:<EXP>_<descrição>
Caso de Uso
Para se retirar os espaços dos dados de uma porta, é preciso duplicá-la. Uma fica sendo a de entrada dos dados e a outra a de saída dos dados formatados.O comando para retirar espaços à direita é RTRIM() e à esquerda LTRIM().
Filter Transformation
Ativa
Todas as portas são de input/output (I/O)A condição do filtro é sempre verdadeira, ou seja, os registros que atendem a condição passam para a próxima transformação.Padrão de Nomenclatura:<FIL>_<descrição lógica>
Caso de Uso
Cadastrar apenas os alunos do sexo masculino (Sexo = ‘M’). Como a idade está no formato string, convertê-la para número para cadastro na tabela ALUNOS_HOMENS. Quando precisamos deixar passar no fluxo apenas um tipo de dado, um valor em certo campo, usamos um filtro, nesse caso, a transformação filter.Para filtrar por Sexo = ‘M’, criamos um filtro e preenchemos sua condição. Dentro do filtro, mudamos seu nome, preenchemos a descrição e clicamos na aba properties. A expressão de filtragem será inserida em filter condition.O processo é o mesmo de inserir uma função no expression editor.
Para converter uma porta é preciso duplicá-la, o processo é o mesmo já visto, a diferença é que a porta de saída tem que ter o datatype com o tipo a ser convertido.
O comando para converter um dado formato para o formato decimal é TO_DECIMAL().Verifique sempre que o tamanho da nova porta seja igual ao do campo da tabela destino onde o dado será cadastrado. Em caso de campo decimal é sempre bom verificar se existem ou não casas decimais.
Mapa
Sorter Transformation
Ordena os registros por uma ou mais portas
Ativa
Todas as portas são de input/output (I/O)A forma de ordenação (ascendente ou descendente) pode ser definida para cada chaveNa aba Properties existe a opção distinctPadrão de Nomenclatura:<SRT>_<descrição>
Rank Transformation
Ativa
Faz um Rank de acordo com a chave marcada no Group By para a porta Rank (R)Padrão de Nomenclatura:<RNK>_<porta>_<tipo>_<xxx>, onde tipo pode ser top ou bot e xxx a quantidade de registros ranqueados.
Sequence Generator Transformation
Gera um sequencial
Passiva
Não possui porta de Input e as portas existentes não podem ser alteradas.Padrão de Nomenclatura:<SEQ>_<nome da coluna>
Joiner Transformation
Realiza joins heterogêneos em dois fluxos de dados
Ativa
As portas podem ser de input ou input/outputPadrão de Nomenclatura:<JNR>_<tabela master>_<tabela detail>, onde entende-se por tabela o ultimo objeto do fluxo, já que pode haver um joiner no meio do fluxo. Caso isso aconteça apenas à descrição do objeto deve fazer parte da formação do nome do joiner, sem a necessidade do seu prefixo. Uma origem de dados deve ser designada como Master. Para melhor performance esta deve ser a com menor quantidade de linhas Join TypesNormal Join: Retorna somente as linhas que atendam a condiçãoMaster Outer Join: Retorna todas as linhas do Detail e as correspondências no MasterDetail Outer Join: Retorna todas as linhas do Master e as correspondências no DetailFull Outer Join: Retorna todas as linhas do Master e do Detail mesmo não tendo encontrado a condição
Lookup Transformation
Retorna valores de uma tabela ou um arquivo texto baseado em um valor de entrada
Passiva
As portas de output/lookup (O/L) são o retorno da LKP, caso a condição não seja atendida, retorna NULLPadrão de Nomenclatura:<LKP>_<nome da tabela> ou _<objetivo fim do lookup> Propriedades:
Unconnected Lookup
A chamada desta Lookup será feita como uma Função dentro da transformação Expression
Uma porta deverá ser Marcada como retorno Esta transformção não será ligada por links a nenhuma outra transformação, ficará “solta” no mapa
Update Strategy Transformation
Especifica a ação de cada linha na tabela de destino (insert, update, delete, ou reject) baseado em uma expressão.
Ativa
Padrão de Nomenclatura:<UPS>_<nome do target>_<operação>, onde operação pode ser: upd,ins,del,rej. Caso o update strategy, dependendo de uma condição, possa executar operações diferentes, todas devem constar no nome. Exemplo: IIF(ISNULL(COD_PRODUTO_lkp), DD_INSERT, DD_UPDATE)
As opções são: DD_INSERT(0), DD_UPDATE(1), DD_DELETE(2), DD_REJECT(3)
A condição é testada a cada linha
É gerado um SQL apropriado para cada operação: Insert, Update, Delete
DD_REJECT não é enviado para o banco, apenas é informado no log
Aggregator Transformation
Realiza cálculos com agregações
Ativa
As portas marcadas como GroupBy serão usadas como “chave” na agregaçãoPadrão de Nomenclatura:<AGG>_<nome da tabela> ou _<descrição>. Nos casos em que a dimensão tempo aparece, ela deverá ser colocada no nome.
Nesta transformação, temos uma lista específica de funções que poderão ser utilizadas. Ao definir o group by, podemos aplicar a função desejada em qualquer outro campo que passe pela transformação.
A função avg serve para retornar a média do campo solicitado em relação ao grupo de campos, no exemplo, teremos o retorno da média de todas as notas de um determinado aluno.
A função count serve para fazer a contagem de registros de um determinado campo que integra um agrupamento definido. No exemplo, agrupamos pela turma e contamos quantos alunos temos em cada uma.
A função max define o máximo valor de um campo em razão de um agrupamento definido. No exemplo, a maior nota de cada turma e matéria e o nome do aluno. A função min funciona de forma contrária, trazendo o valor mínimo.
A função sum promove um somatório dos valores de um determinado campo em decorrência do agrupamento indicado. No exemplo, teremos a quantidade total em estoque de um produto, independente da loja.
Router Transformation
QTD_PRODUTO < 50 QTD_PRODUTO >= 50 AND QTD_PRODUTO < 200 QTD_PRODUTO >=200 Envia as linhas para diferentes direções baseado em filtros
Ativa
Padrão de Nomenclatura:<RTR>_<descrição lógica dos grupamentos>
Router Groups
Grupo de entrada
Grupos de saída definidos pelo usuário-Cada grupo atende a uma condição-As condições de TODOS os grupos são avaliadas a cada linha-A mesma linha pode atender a mais de uma condição
As linhas que não atendem a nenhuma das condições definidas, caem no Default group
Stored Procedure Transformation
Executa uma Stored Procedure
Passiva
Pode ser conectada ou desconectadaPode ser executada antes ou depois do Source ou do TargetPadrão de Nomenclatura:<SP>_<nome da stored procedure>
Normalizer Transformation
Ativa
Ao passar um registro no fluxo, ele é transformado em diferentes registros de acordo com o número de colunas a serem normalizadas Padrão de Nomenclatura:<NRM>_<descrição> As portas devem ser criadas na Aba Normalizer. Não é possível arrastar as portas de uma outra transformação.
Union Transformation
Ativa
Une dois fluxos de dados com a mesma estrutura.Padrão de Nomenclatura:<UNI>_<descrição>
Se você gostou, inscreva se, mande sua opinião!
Meu e-mail: diogo.vidal@outlook.com | Diogo Vidal
Comments