16 Março 2018

Ouvir uma mudança na base de dados com Informatica PowerCenter

A extração de dados para um repositório central tem de ter o mínimo impacto possível nos sistemas fonte. Em alguns casos, é dado ao consultor uma janela de tempo para que os dados possam ser extraídos diretamente dos sistemas fonte sem impactar a operação, geralmente durante a noite. Noutros casos, existe uma equipa responsável pelo desenvolvimento desses processos de extração. O resultado desses processos é geralmente partilhado através de ficheiros de texto em que as colunas são separadas por vírgulas, ou um outro delimitador acordado entre as equipas, e depois consumidos por processos ETL que carregam esses dados no repositório final.

No último projeto em que estive envolvido, para além de desenvolverem os processos de extração dos sistemas fonte, a equipa desenvolveu também uma base de dados intermédia (IDB) para onde carregou o resultado das extrações. Apesar de ser prática comum utilizar a tarefa Event-Wait do Informatica PowerCenter para escutar que determinado ficheiro está pronto para ser processado e iniciar a worklet/session, no cenário apresentado, o que faz iniciar o processo, é uma alteração na base de dados. O exemplo seguinte apresenta a abordagem seguida para iniciar o processo de extração em PowerCenter.

Desenho de Mapeamentos

Antes de entrarmos em pormenor no workflow desenvolvido, será necessário desenhar o mapeamento que verifica se a IDB foi alterada. Será necessário desenhar uma Fonte, neste caso uma tabela numa base de dados SQL Server, o Destino, que será um ficheiro, e uma Transformação Filter.

A IDB tem uma tabela chamada Process, que será a nossa fonte. Esta tabela tem algumas colunas, incluindo as colunas RUN e CHANGE_DATE. A nossa query irá só verificar o valor destas 2 colunas.

 

O ficheiro de destino do mapeamento só será preenchido com o resultado da query, caso a coluna CHANGE_DATE (com o alias Col2) tiver a mesma data que a data de extração e a coluna RUN (com o alias Col1) for igual a 0, significando que o processo de carregamento da IDB foi concluído e os dados estão prontos para serem extraídos pelo nosso processo.

Para que o ficheiro só seja populado se passar os requisitos em cima mencionados, adicionamos ao mapeamento a transformação Filter, como apresentado na figura seguinte.

 

O objetivo desta transformação é carregar unicamente o ficheiro de destino se ambas as colunas col1 e col2 tiverem o valor 0, caso contrário o ficheiro ficará vazio.

Desenho do Workflow

No Workflow Manager, para além de ser necessário desenvolver os fluxos necessários para extrair os dados de IDB, também temos que criar mais 2 fluxos que serão agendados para executar aquando da alteração na IDB. No caso concreto Monitoring e Trigger foram os nomes dados aos workflows. A figura seguinte mostra o workflow Monitoring, este workflow está agendado para executar a cada minuto, a espera que a tabela Process tenha os valores esperados.

 

A primeira parte deste workflow executa o mapeamento desenhado anteriormente. Entre esta execução e a execução das seguintes sessões, foi escrita uma expressão que verifica se o destino está vazio ou preenchido. As próximas sessões só serão executadas quando esta expressão devolver verdadeiro, caso contrário este workflow será executado novamente no minuto seguinte até que a IDB, contenha os valores esperados na tabela Process.

Este workflow está dividido em multiplos workflows cujo objetivo é integrar os vários schemas existentes na IDB. Para que estes workflows sejam executados, é usad a a tarefa ‘command’ que permite executar commandos unix, neste caso para iniciar os workflows pretendidos.

 

O comando utilizado é o “pmcmd scheduleworkflow -service informatica-integration-Service -d domain-name -u user-name -p password -f folder-name -w workflow-name”.

A ultima tarefa no workflow é uma Control Task, que tem como objectivo terminar o workflow, caso contrário o workflow seria iniciado novamente. Isto faz com que o workflow fique unschedule (não agendado).

Para que o workflow volte a ficar agendado, foi criado o workflow Trigger, este está agendado para executar todos os dias a uma determinada hora e o objetivo é re-agendar o workflow Monitoring, voltando este a estar à escuta de alterações na IDB.