[Kettle] - Troca do step "Modified JavaScript Value" por "User Defined Java Expression"

Estou revisando algumas rotinas feitas em Kettle com o intuito de melhorar a velocidade com que são executadas. Uma das tarefas hoje foi averiguar a necessidade de uso de alguns steps de Javascript (conhecidamente custosos) buscando possíveis substituições que fossem mais performáticas. Desta forma resolvi trocar um dos steps que se chama "Define deMes e Semestre" construído sobre o step "Modified Javascript Value" pelo  "User Defined Java Expression".

Em resumo ficou assim:

- Troca do componente “Modified JavaScript Value” (Interpretado)...

- Pelo “User Defined Java Expression” (Compilado)...

- Detalhes do step JavaScript:


- Detalhes do Step Java Expression:


Abaixo descrevo melhor as "Java Expressions que criei, em substituição às feitas em Javascript:

Expressão para variável “deMesAno”:
nuMes+"/"+ nuAno

Expressão para variável “semestre”:
nuMes<=6
?"1º Semestre"
:"2º Semestre"

Expressão para variável “deMes”:
nuMes==1
  ?"Janeiro"
:nuMes==2
  ?"Fevereiro"
:nuMes==3
  ?"Março"
:nuMes==4
  ?"Abril"
:nuMes==5
  ?"Maio"
:nuMes==6
  ?"Junho"
:nuMes==7
  ?"Julho"
:nuMes==8
  ?"Agosto"
:nuMes==9
  ?"Setembro"
:nuMes==10
  ?"Outubro"
:nuMes==11
  ?"Novembro"
:"Dezembro"


- Previsão do Resultado - Aqui abaixo é demonstrado o resultado que deve ser exibido para as três variáveis em questão:



- Execução da Transformação com o componente JavaScript (utilizando nível de log básico):

Criei a transformação abaixo para realizar o teste de desempenho com o componente javascript. Mais abaixo criei também a transformação para testar o componente Java Expression...



 - Abaixo podemos ver que, para 1000000 de linhas o tempo de execução da transformação utilizando o componente Javascript foi de 1 minuto e 40 segundos.






- Execução da Transformação com o componente “User Defined Java Expression” (utilizando nível de log básico):

Aqui uma transformação como a anterior, porém agora utilizando o Java Expression...


Podemos ver abaixo que o tempo para as mesmas 1000000 de linhas foi agora de 3,7 segundos.






Resumindo então o ganho foi este: (Maravilha hein!!!)


Obs.:
O Kettle possui um bug na versão 3.2 quando executado pelo kettle.exe utilizando “User Defined Java Expression”: http://jira.pentaho.com/browse/PDI-2453




Com isso se faz necessário rodar o Kettle através do arquivo "spoon.bat", não mais pelo "kettle.exe", do contrário não poderemos fazer uso do step "User Defined Java Expression".


No Kettle 4.1 existe ainda o step “User Java Defined Class”, que permite escrever código, não somente expressões, sendo assim mais parecido com o "Modified Javascript Value", tendo a vantagem de também ser compilado, assim como o Expression.

Comentários

Postagens mais visitadas deste blog

[Openfire] - Ajuste de horário no cliente Spark

Verificar uso de disco em partição ASM do Oracle 11g no Linux

[Kettle] - Ajuste de Memória de Utilização