Geração de arquivos CSV/TXT com o Pentaho Data Integration

logo_kettle_lrg

O Pentaho Data Integration, ou Kettle, é uma ferramenta ETL (Extraction, Transformation, and Loading). Como apresentado anteriormente neste post, possui vários recursos interessantes, um deles é a exportação de arquivos baseado em uma consulta no banco de dados.

O propósito deste post é mostrar como podemos gerar arquivos CSV/TXT de forma fácil, intuitiva, totalmente desacoplada do projeto, com bom desempenho e manutenibilidade.

Em um projeto recente, geramos um arquivo CSV de 173mb, com um pouco mais de 1 milhão e 200 mil registros, em aproximadamente 20 minutos em um bom servidor linux e uma consulta complexa. Anteriormente estávamos fazendo esta tarefa com um código Java, iterando sobre um resultado de uma consulta no banco e escrevendo em arquivo, o mesmo estava demorando mais de uma hora para finalizar a geração. É claro que há como melhorar o desempenho, tanto como geração via Java, como geração via Pentaho, mas com certeza, durante o projeto, usando o Kettle, o tempo e a manutenibilidade diminuíram drasticamente.

Bom, vamos ao que interessa!

Na Figura 1 é apresentado o workflow de uma geração simples, criada pelo Pentaho Data Integration

workflow

Figura 1 – Workflow criado no Pentaho Data Integration

O primeiro item, com o nome de Clientes, é um Table Input, nele é que é feita a conexão com o banco de dados, através de um mapeamento JNDI configurado externamente, e a query de consulta. Como boas práticas, é interessante criar uma view no banco de dados e neste Table input fazer um select, com isso, quando houver necessidade de alterações, que não seja adição ou remoção de campo, é necessário apenas uma alteração na view, sem mexer no arquivo do Pentaho.

O segundo item, chamado “Replace in string”, e o terceiro item, chamado “Select values”, são utilitários, com eles é possível alterar Strings contidas no texto, podendo até usar expressões regulares para encontrar trechos de texto. No “Replace in string” também é possível definir tamanho para cada campo, definir formatação de datas com ou sem TimeZone, definir encoding para cada campo, precisão para campos numéricos, entre outras coisas.

O quarto item, com o nome de “Exportacao_clientes”, é um Text File Output, ou seja, a saída em formato de arquivo de texto. Nele é possível realizar diversas configurações como: nome do arquivo gerado; extensão do arquivo (csv,txt,xml); adicionar data no nome do arquivo; criar diretório caso não exista; definir o separador entre os registros (virgula, ponto-e-virgula, etc); adicionar header e footer; etc.

Necessariamente, para a geração de um arquivo CSV/TXT, precisaria apenas de um input com a configuração do banco e a query e um output com as propriedades do arquivo. Para um projeto interno da MATERA Systems, nós criamos agendamentos do próprio linux para executar o serviço do Pentaho, e para isso é necessário apenas um script como o da Listagem 1, mas no próprio Pentaho também possui agendamentos que também podem ser utilizados com a mesma finalidade.

/pan.sh -file={caminho arquivo do Pentaho} -log={caminho para salvar o log}
Listagem 1 – Script para execução da transformação do Pentaho Data Integration

Há muitas coisas ainda que o Pentaho Data Integration pode fazer, como por exemplo, merge entre os resultados, definir constantes, fazer updates em tabelas, entre outras muitas coisas. Vale a pena dar uma conferida nele e ver se ele se adequa ao seu projeto.

Conclusão:

Há várias vantagens que vi, trocando para a geração via Pentaho:

Performance: A geração do arquivo via Pentaho ficou muito mais rápido, ao invés da versão implementada em Java feito pela equipe de desenvolvimento do projeto.

Manutenibilidade: Ficou muito mais simples e rápido de dar manutenção.

Desacoplado do projeto: Deixa o WebContainer(Tomcat)/Servidor de aplicação(JBoss) livre, pois pode usar o agendador de tarefas do próprio SO, não causando lentidão ao sistema enquanto estiver rodando, nem tem o risco do WebContainer/AS cair por falta de memória, além de não precisa de gerar uma nova versão do projeto caso precise alterar algo na geração do arquivo.

Simplicidade: Fácil aprendizado da ferramenta.

Por IGOR KENGI SHIOHARA

Postado em: 26 de junho de 2014

Confira outros artigos do nosso blog

REST não é JSON

21 de agosto de 2017

Bruno Sofiato

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

JavaScript 6: diferença entre var, let e const

09 de maio de 2017

Otávio Felipe do Prado

Deixe seu comentário