Como agendar um job do Pentaho no Windows

Depois de instalar a aplicação, uma das primeiras coisas que você precisa saber, é como fazer o agendamento das ETLs que criar. Afinal, de que vale uma ferramenta de automação que não pode ser automatizada, não e mesmo?

O que faremos aqui é basicamente criar uma ETL (main.kjb), colocar um arquivo batch na mesma pasta (main.bat) e depois fazer seu agendamento.

Por que nomear tudo como main? Bom, na verdade pode ser qualquer nome. Apenas estou mantendo uma convenção adotada por linguagens como C e Java. Essa convenção será útil no futuro, quando suas ETLs ficarem mais complexas e forem criados muitos arquivos. Dessa forma, quando abrir uma pasta de processo, você vai saber imediatamente qual é o job que coordena tudo.

 

1. Crie uma ETL

O propósito aqui é apenas mostrar como realizar o agendamento, portanto este job não executará nenhuma tarefa.

Abra o [tooltip content=”Pentaho Data Integration” gravity=”sw” fade=”0″]PDI[/tooltip], caso não tenha instalado  CLIQUE AQUI

No menu superior, vá em: File > New > Job

Vá para a caixa de ferramentas (canto esquerdo), aba Design e começe a digitar “s t a r t” para iniciar a procura. Arraste os steps START e DUMMY para a área de trabalho. Para fazer a ligação (o termo correto é HOP), clique na origem, pressione Shift (mantendo o mouse pressionado) e arraste o cursor até o destino. (Fique tranquilo, ninguém acerta isso de primeira)

Salve o job com o nome main.kjb

Execute o job pela interface gráfica. Basta clicar no botão  >  logo abaixo da letra “m” de main e depois dar ENTER na próxima janela. Na verdade nada vai acontecer, o propósito é você se familiarizar com a interface gráfica e verificar o log que será apresentado no rodapé.

O formato .kjb não é executável. Ele precisa ser chamado pelo arquivo batch que será criado adiante. Pode fechar a interface gráfica, ela é necessária apenas para criar o job.

 

2. Crie o arquivo main.bat

Este é o arquivo que junta todas as peças e faz com que a sua ETL seja acionada via linha de comando (por consequência permite que seja agendada)

O nivel de detalhamento do que será logado é configurável e vai desde Error até Rowlevel, que é o mais verboso (recomendo que não o utilize, porque é MUITO detalhado). Geralmente os níveis Minimal ou Basic são suficientes.

Insira o conteúdo abaixo, adequando as linhas destacadas:

@echo off

TITLE MeuProcessoAutomatico
SET currentdir=%~dp0
SET kitchen=D:\Portables\Pdi53\Kitchen.bat
SET logfile="%currentdir%log.txt"

echo. >> %logfile%
echo. >> %logfile%
# level: Error Minimal Basic Detailed Debug Rowlevel
"%kitchen%" /file:"%currentdir%main.kjb" /level:Basic >> %logfile%

Salve o arquivo e o execute.

Após alguns segundos, o arquivo log.txt terá sido criado na mesma pasta. Seu conteúdo será semelhante a este, que é parecido com o que você teve ter visto no console da interface gráfica ao executar sua ETL pela primeira vez:

DEBUG: Using JAVA_HOME
DEBUG: _PENTAHO_JAVA_HOME=D:\Portables\Java8_64
DEBUG: _PENTAHO_JAVA=D:\Portables\Java8_64\bin\java.exe

D:\Portables\Pdi53>"D:\Portables\Java8_64\bin\java.exe"  "-Xmx768m" "-XX:MaxPermSize=384m" "-Djava.library.path=libswt\win64" "-DKETTLE_HOME=" "-DKETTLE_REPOSITORY=" "-DKETTLE_USER=" "-DKETTLE_PASSWORD=" "-DKETTLE_PLUGIN_PACKAGES=" "-DKETTLE_LOG_SIZE_LIMIT=" "-DKETTLE_JNDI_ROOT=" -jar launcher\pentaho-application-launcher-5.3.0.0-213.jar -lib ..\libswt\win64  -main org.pentaho.di.kitchen.Kitchen /file:"C:\agendamento\main.kjb" /level:Basic 
2017/12/12 18:37:21 - Kitchen - Logging is at level : Basic logging
2017/12/12 18:37:21 - Kitchen - Start of run.
2017/12/12 18:37:23 - main - Start of job execution
2017/12/12 18:37:24 - Kitchen - Finished!
2017/12/12 18:37:24 - Kitchen - Start=2017/12/12 18:37:21.304, Stop=2017/12/12 18:37:24.011
2017/12/12 18:37:24 - Kitchen - Processing ended after 2 seconds.

 

Enquanto o processo está em execução, tudo que você vê é uma tela preta. O relatório de execução é direcionado apenas para o arquivo log.txt.

Existe uma maneira de fazer com que o log também seja apresentado no console.

Aqui vai a dica: utilize o aplicativo tee para windows. (quem usa Linux, deve conhecer)

Faça o download nesse endereço: http://gnuwin32.sourceforge.net/downlinks/coreutils-bin-zip.php

Será necessário baixar também o arquivo com as dlls necessárias: http://gnuwin32.sourceforge.net/downlinks/coreutils-dep-zip.php

Copie tee.exe, libintl3.dll e libiconv2.dll para a mesma pasta da sua ETL.

Edite o arquivo main.bat. Altere sua última linha para:

"%kitchen%" /file:"%currentdir%main.kjb" /level:Basic | tee.exe -a %logfile%

 

3. Faça o agendamento:

Digite “Taskschd.msc” na linha de comando.

Vá em “Criar Tarefa”

Em Disparadores: configure os horários de execução

Em Ações: insira o caminho completo para o arquivo main.bat

Agora é só programar sua ETL para fazer algo útil como atualizar um banco de dados, gerar planilhas, consolidar informações, enviar alarmes, etc. Falaremos mais sobre isso nas próximas postagens.

Deixe seu comentário



Roner

7 meses atrás

Testei e funcionou perfeitamente. Estou com uma dúvida em relação a passar parâmetro na chamada main.kjb. É possível? Exemplo: Quero passar uma data na chamada do main como parâmetro e usar essa data como uma variável.

Marcelo Gennari

7 meses atrás

Vou exemplificar a criação de um parâmetro chamado data, o qual será recebido via linha de comando:

1. CRIE ESSE PARAMETRO EM SUA ETL:
Edit > Settings > Parameters > Parameter = data
Imprima esse parâmetro em algum lugar utilizando ${data}, por exemplo em um step Write to file do seu main.job. Rode a sua ETL uma vez, colocando manualmente este parametro e verifique o conteudo do arquivo gerado para se certificar que o parâmetro esteja funcionando corretamente.

2. MODIFIQUE SEU MAIN.BAT PARA QUE ELE RECEBA PARAMETROS
Faça a seguintes modificações:
Insira na 7a linha: SET data=%1
Adicione o parâmetro a linha de execução do kithen, que ficará assim:
“%kitchen%” /file:”%currentdir%main.kjb” /level:Basic “/param:data=%data%” >> %logfile%
IMPORTANTE: Para que seja reconhecido, o parametro deverá estar ENTRE ASPAS, exatamente como mostrado.

3: EXECUTE O MAIN.BAT E VERIFIQUE OS RESULTADOS
> main 2019-05-03

Sidnei A Pistore

9 meses atrás

Caro Marcelo
Fiz os passos, mas meu .bat está dando um erro nesse parâmetros:
DEBUG: Using JAVA_HOME
DEBUG: _PENTAHO_JAVA_HOME=D:\Portables\Java8_64
DEBUG: _PENTAHO_JAVA=D:\Portables\Java8_64\bin\java.exe

No meu aparece como arquivo não encontrado. Como e onde eu faço essa chamada do Java?
Grato
Sidnei

margenn

9 meses atrás

O Kitchen não está achando o seu java.
A pasta inserida no .bat é a que utilizo, porém isso pode variar de PC para PC.
Verifique se você setou a variável de ambiente “JAVA_HOME” para a pasta onde o seu Java foi instalado. Geralmente fica em: “C:\Program Files\Java\jreN.N.N_NNN”. Reinicie o PC para ter certeza que o sistema reconheceu a variável.

Sidnei A Pistore

9 meses atrás

Caro Marcelo
Muito obrigado pela dica, funcionou.
Grato

Sidnei A Pistore

8 meses atrás

Boa tarde
Caro Marcelo, criei o meu .bat exatamente como a dica que mencionou e ele funciona adequadamente quando rodo manualmente tanto no cmd.exe quanto no powershell, porém quando eu adiciono uma tarefa no agendador do Windows chamando esse main.bat ele não executa. Existe algum macete para que o agendador do Windows execute adequadamente esse .bat com esses comandos do JAVA?
Grato
Sidnei

Marcelo Gennari

8 meses atrás

Testei o agendamento no windows 10 e tudo correu como esperado. Para “debugar” o .bat, comente o “@echo off” e coloque um “pause” na ultima linha. O que pode estar acontecendo é que o diretório de trabalho da tarefa agendada é diferente do diretório onde vc colocou sua ETL. Neste caso, a variavel “currentdir” do .bat sera carregada com uma pasta incorreta e o main.kjb não será encontrado.

Sidnei A Pistore

8 meses atrás

Ola Marcelo
Obrigado por responder, me certifiquei que o JOB .kjb está no mesmo diretório do main.bat, mesmo assim não rodou pelo agendamento, mas vou tentar debugar.
Obrigado pela dica.

Willian

10 meses atrás

Muito boa a dica!

Valeu

Fale conosco

Utilize o formulário ao lado ou se preferir, um os contatos logo abaixo.

  (11) 98489-8661
  marcelo.gennari@gren.com.br

Gren 2019