Continuando o post anterior sobre variáveis e seu uso, volto com este para complementar a linha de raciocínio e mostrar algumas nuances que podem comprometer o andamento do ETL caso não seja bem configurado.

RECAPITULANDO

O post anterior foi concluído mostrando um caso de como a ordem das variáveis pode alterar o resultado, principalmente quando utilizamos queries que consultam o banco utilizando o table input. 

Esta foi a mensagem de erro e quando executei a troca de variável, o resultado não pode ser obtido porque é impossível a data final ser maior que a inicial!

Sabendo disso, continuei pesquisando sobre e encontrei outros pontos que gostaria de tratar aqui, para finalizar temporariamente o assunto.

UM POUCO MAIS SOBRE VARIÁVEIS 

Nesta seção, adicionando a parte de variáveis do post anterior, quero mostrar uma situação interessante que pode acontecer quando se utiliza variáveis que capturam data e hora.

Veja essa transformação padrão, onde adicionei mais um transformation job ao que foi criado para o post anterior.

Essa nova adição possui apenas dois steps. 

E o get variable foi utilizado apenas para puxar o término da execução do ETL da transformação “ETL_INFO”. 

Puxei a variável “ETL_END” e dei o nome “FINALIZA ETL” e executei essa transformação. Mesmo a variável estando como argumento no job transformation, veja o resultado escrito no log. 

Voltando ao “ETL_INFO” e executando o seu etl criado, o resultado muda. Esta em ordem respectiva.

Como o anterior foi executado e puxou a variável, o “FINALIZA_ETL” recebeu o horário de conclusão.

Só que há um problema de trabalhar com o formato data e hora, não a data em si, mas o horário. O problema todo ocorre quando passamos os valores obtidos na transformação anterior para a próxima via variável.

Veja abaixo.

A transformação “ETL_INFO” puxou de forma correta o horário do meu computador e gravou na variável no step set variable. 

Agora, se eu for no próximo job “FINALIZA_ETL_INFO”, e executar a transformação que está armazenada, o certo seria puxar o horário do término da execução, correto!?

Veja o resultado.

Perceberam que o horário está diferente? Ele não pegou o horário final da execução do job anterior e continuou com um outro horário de teste.

Aqui é uma suposição minha que irei confirmar em próximas pesquisas sobre variáveis, beleza? 

Ainda que a variável no step anterior, varie de valor, quando ela passa para o próximo e é atribuída, acaba se tornando fixa e só muda se for manualmente (dependendo do caso) ou reiniciando o Pentaho.

Apenas para confirmar, o valor se tornou fixo neste step e nesta variável.

Como solução para essa situação, não puxem variáveis com hora de outros steps para não ter problema de resultado ou execução. 

Se for o caso de criar uma rotina com um horário fixo para execução do ETL, crie um campo fixo e outro variável que compare com o fixo e execute a partir do momento que forem iguais. EVITEM!

ARGUMENTOS E PARÂMETROS

Vimos como podemos trabalhar com variáveis dentro de jobs, transformações etc. Mas e os parâmetros?!

Os parâmetros são valores fixos que podemos atribuir em um determinado campo, seja manual ou por meio de uma variável. Esse parâmetro passa a valer tanto para as transformações que aquele determinado job irá proceder, quanto para os posteriores.

Nós podemos utilizar os parâmetros, por exemplo, quando queremos que o Pentaho armazene um determinado diretório e passe para outras transformações como variável de ambiente.

Veja abaixo as duas transformações bases que criei.

Dentro desta transformação, aperte junto ctrl + t e vá na aba parameters. Quando o transformation properties abrir, crie essa estrutura, como fiz.

O que eu fiz foi criar dois parâmetros base com o diretório de onde os meus arquivos fonte estão armazenados.


Esses parâmetros serão passados para meus steps de input e outras transformações.

  • Em vermelho – temos o parâmetro com o diretório passado no step text file input.
  • Em azul –  setamos o parâmetro como diretório válido para busca na pasta
  • Em roxo –  a demonstração do resultado

Feito isso, eu preciso passar esse nome de arquivo para um resultado. Então, na aba content do text file input marque as seguintes opções como fiz para passar o nome e diretório do arquivo como resultado.

Depois desta etapa, eu precisava atribuir esse novo campo para o resultado e para isso, utilizei o set files in result como general. 

Como as variáveis só trabalham com um registro por vez, independente do tipo de dados que esta ali, precisamos do step unique rows para limitar a apenas uma linha na stream que irá para variável.

Ao final, adicione o set variables, o unique rows e puxe essa coluna no campo.

Resultado das duas variáveis criadas resumido.

O que eu acabei de finalizar foi o primeiro processo de criar um parâmetro com um valor contendo o diretório, mostrar que é possível acessar por qualquer step que permita os arquivos pelo parâmetro e depois, atribuí esse final para uma variável.

De forma bem resumida, criamos uma variável a partir de um parâmetro.

Para utilizarmos em outras transformações temos que ‘subir’ um pouco para passar essas variáveis por transformações.

Faça os seguintes passos abaixo.

  1. Adicione uma nova aba de  job no seu PDI.
  2. Dentro desta aba de job crie a seguinte configuração.
  1. Na primeira transformação temos que atribuir a transformação que criamos o parâmetro e a variável anteriormente. 
  1. Quando terminar, preciso que execute a transformação criada. Veja bem, não estou falando deste job de execução de transformação, e sim, a que criamos os parâmetros; execute apenas ela.

Se executou de forma correta, quando concluir a transformação vá para a aba dos jobs, abra a primeira transformação que você utilizou para aninhar e na aba parameters, clique em get parameters.

Se não aparecer, execute o job para validar as variáveis. 

Uma maneira de conferir é abrindo o run options e clicar na aba variables. Veja que na minha transformação, elas já se encontram “setadas” .

Mas, voltando a transformação, abra o executor e vá em parameters. 

Como eu já atribuí aos parâmetros os valores, eles já apareceram ali, mas no caso, basta selecionar as variáveis na transformação com o valor no devido campo. Como fiz.

Com essa primeira ‘etapa’ concluída, vamos puxar para a próxima transformação (se lembram que no job foram duas?) esses parâmetros com as variáveis criadas.

Adicione uma transformação dummy qualquer, como fiz neste exemplo.

No input, veja se aparece 

Para nível de demonstração, adicionei as duas variáveis e cliquei em show file names para mostrar que os arquivos foram encontrados.

Faça as devidas configurações para extrair os dados do arquivo, execute e vá em preview. 

Para um pequeno teste, criei um job na primeira transformação do primeiro post para rodar esse criado agora, vejam.

E ao executar toda essa transformação com o run options ativo, todas as variáveis e parâmetros estão disponíveis. Vá na aba variables

Destaquei em azul as que foram criadas em posts e seções anteriores e em vermelho a que criamos nesta última sessão.

CONSIDERAÇÕES

Trabalhar com variáveis pode ser um pouco chato devido a forma como o Pentaho processa seu ETL. Como ele funciona em paralelismo e sequência, lembre-se que uma variável ou parâmetros só estarão  disponíveis após sua transformação ser executada.

Tenha cuidado com o escopo pois eles limitam o ‘raio’ de ação das variáveis e isso pode causar uma certa dor de cabeça.

Parâmetros criados em uma transformação são passados apenas como variáveis para outra, então, crie um parâmetro na transformação A, transforme o seu valor armazenado em variável e passe para a transformação B.

Acredito sinceramente que a melhor forma de trabalhar com variáveis e parâmetros é criando uma transformação só para isso antes de começar o job de ETL em si; facilita em muito o gerenciamento, claro, considere cada caso. 

Por fim, em algumas situações de teste e até a conclusão, terá de reiniciar algumas vezes o Pentaho para que as variáveis sejam lidas de forma correta. Essa situação ocorre pois em algumas situações, ele fixa o valor e não altera, como aconteceu com a que tratava de hora que vimos na primeira sessão.

Sejam atentos nesses processos e tudo funcionará bem!

Espero que gostem, saúde!

Link para os arquivos aqui!