Imaginando um possível requisito de negócio que implique que um certo número de ficheiros seja carregado em datas especificas num calendário de negócio. Apesar do carregamento poder ser feito de forma manual, seria tempo gasto que poderia ser dedicado a outras atividades, especialmente se o processo for mais complexo e necessite que outras condições sejam concretizadas, como um certo número de ficheiros estar presente, um certo número de tarefas seja repetido mais do que uma vez ou emails que tenham de ser enviados quando os ficheiros estejam errados ou incorretos.
O objetivo deste tutorial é apresentar uma possível solução para automatizar o procedimento utilizando Powercenter e Oracle/PLSQL. É de realçar que existem várias maneiras de desenvolver este processo através de diferentes métodos e tecnologias, ao qual apenas é apresentado um pequeno exemplo.
Este tutorial também apresenta uma explicação simples para cada task utilizada no processo do Powercenter, dando assim exemplos práticos para quem tem pouco conhecimento da ferramenta.
Neste exemplo, os ficheiros são colocados manualmente num diretório por ciclos e cada ciclo tem uma data especifica num total de 13 ciclos num ano de negócio. De forma a ter um controlo sobre estes ciclos e as suas datas respetivas, foi criada a seguinte tabela que é carregada todos os anos de forma manual:
A tabela fornece informação sobre os ciclos, mas mais especificamente é através de uma flag chamada CURRENT_CYCLE_FLG que o Powercenter consegue determinar qual é o ciclo atual e a sua data respetiva. A flag é atualizada pelo Powercenter, sempre que um ciclo tenha sido completado.
Foi criado um mapeamento que vai carregar os dados dos ficheiros para o Datawarehouse utilizando a tabela descrita acima como forma de mapeamento do ciclo atual.
O primeiro passo do mapeamento utiliza uma session para fazer uma validação de datas:
Sessions são extensões dos mapeamentos desenvolvidos no Designer. Portanto mostram todas as opções para cada fonte e destino dos nossos dados. Dentro da session, usamos a seguinte query para determinar se a data atual é igual a um intervalo de datas definido na tabela de datas (Requisito negócio):
Se a query retornar resultados, o Powercenter continua o processo, se não der resultados, o processo para.
No Powercenter é possível definir expressões nos fluxos entre tasks. Essas expressões determinam o caminho do fluxo do mapeamento. Neste caso o caminho do fluxo é determinado através da seguinte expressão:
$s_CHECK_CYCLE_DATE.TgtSuccessRows = 1
De seguida utilizamos os Worklet’s para fazer um conjunto de processos para cada ficheiro individual (Requisito Negócio).
O Worklet é essencialmente um mapeamento dentro de outro mapeamento e é bastante útil para o objetivo pretendido porque possibilita o agrupamento de um conjunto de processos que transformam esse mesmo conjunto num único processo. Se todos os processos de cada ficheiro fossem colocados dentro de um único mapeamento, tornava-se demasiado confuso e complicado manter ou desenvolver o processo.
Cada Worklet individual faz as seguintes tarefas:
Começa por verificar se o ficheiro existe no diretório especificado através de uma Command Task:
A Command Task é uma ferramenta muito útil se pretendermos utilizar Shell Scripting para resolver problemas de negócio.
Neste caso foi criado um Shell Script que verifica se um ficheiro existe num determinado diretório com um certo nome e se existir, esse nome é guardado num ficheiro de texto:
filename=”`basename /apps/dw/bin/PATH/INPUT/FILENAME_*.txt`”
#filename=”${path##*/}”
if [ -s “/apps/dw/bin/PATH/INPUT/$filename” ]; then
echo $filename > /apps/dw/bin/INPUT/FILENAME.txt
fi
O Powercenter avança o processo se a Command Task tiver êxito, através da seguinte expressão:
$CHECK_FILE.Status=succeeded
Por questões de controlo dos ficheiros que são carregados, foi criada uma tabela que guarda rows dos ficheiros que foram encontrados no diretório.
De forma a carregar esta tabela com o nome dos ficheiros, foi criado o seguinte mapeamento:
O mapeamento aceita o valor guardado no ficheiro de texto criado através do Shell Script definindo assim a fonte do mapeamento e carregando o nome ficheiro numa tabela, juntamento com uma data de inserção.
É de realçar que este processo poderia ser feito através das propriedades da fonte ao escolher a opção “Add Currently Processed Flat File Name Port”. Poderia ser então criada uma Expression Transformation Task para transformar o nome do ficheiro e carregar esse mesmo nome para uma tabela.
De seguida utilizamos outra sessão que utiliza Indirect como Source Filetype e utiliza o ficheiro de texto criado anteriormente.
Desta forma o Powercenter irá verificar na diretoria indicada por um ficheiro que tenha o valor que está dentro do ficheiro de texto, invés de inserir manualmente o caminho e nome do ficheiro a processar.
Em sentido geral, o Powercenter faz os seguintes passos para processar ficheiros:
- Verifica se o ficheiro existe
- Envia o nome do ficheiro que encontrou para um ficheiro de texto
- Utiliza o valor do ficheiro de texto para definir a fonte e carregar os dados do ficheiro
Se o ficheiro ou o processo encontrarem algum tipo de problema, o procedimento é interrompido e envia um email para informar o problema atual. Se o ficheiro e o processo correram sem qualquer tipo de problema, os dados são carregados para as tabelas e o ficheiro de texto é apagado. Para concretizar estes passos, foram usadas as seguintes tasks e expressões:
No final, se processo correr sem erros, o Powercenter irá atualizar a tabela das datas através de uma Session.
Esta Session contém um mapeamento “dummy” de forma a executar uma Stored Procedure Task
Stored Procedure Task começa por atualizar o novo ciclo primeiro através de um row number para “encontrar” o novo ciclo através do antigo ciclo:
Finalmente atualiza o antigo ciclo ao utilizar um max do row number e subtrair um valor no ciclo atual:
Conclusão
O Powercenter consegue concretizar uma variedade de ações que conseguem resolver problemas de negócio do dia a dia. O exemplo demonstrado apenas dá uma introdução a uma grande variedade de soluções possíveis, mas demonstra também a vantagem de utilizar este tipo de trigger num processo que possa ser desenvolvido de forma semelhante e ajustado às necessidades e realidades de outros negócios, mas sempre permitindo a automatização do processo, libertando assim o tempo gasto em ter de executar estas tarefas de forma manual.