Tutorial Kettle

O Kettle é uma ferramenta para integração de dados, responsável pelo processo de Extração, Transformação e Carga (ETL). Ferramentas ETL são utilizadas mais frequentemente em projetos de data warehouse, mas também podem ser utilizadas para outros propósitos, tais como migração de dados entre aplicações, exportação de banco para arquivos, limpeza de dados e na integração de aplicações.

[ Hits: 69.508 ]

Por: Giovanni Won Dias B. Victorette em 08/01/2010


Extração a partir de XML e XLS, montando um Job e utilizando serviços de FTP/e-mail



Extração a partir de XML

De forma similar a extração de dados de uma tabela é necessário criar um passo para a entrada de dados, neste caso, um "Get XML Data". Os principais pontos neste step são colocar o apontamento para o arquivo xml, informar o nó para loop (figura 14) de onde serão retornados os dados e definir os campos de retorno. Caso no preview não apareça dados deve-se verificar se o arquivo de origem foi corretamente informado e se existem os dados desejados no mesmo, no segundo momento verificar se está buscando o nó correto e por fim pode ser que tenha que editar o xml por conter algum caractere não reconhecido em algum atributo.
Linux: Tutorial Kettle
Figura 16 - Get XML data

Extração a partir de uma planilha XLS

Neste passo o principio é o mesmo da extração de um arquivo xml, o que muda é que não se informa o nó, mas a planilha onde estão os dados.

Montando um Job

Todas as transformações podem ser executadas individualmente, mas no caso de utilizarem variáveis para o controle das chaves das dimensões é necessário executar esta transformação antes (figura 17). Pela própria definição temos no job uma rotina de execução, nele pode-se organizar e agrupar as cargas, de forma a facilitar a compreensão e a também a rotina de carga.

É desejável que separem as dimensões estáticas das de modificação lenta, evita-se com isso processamento desnecessário de tratamento de dados.

Figura 17 - Job de carga de dimensões
Uma vez que todas as dimensões foram carregadas deve-se efetuar a carga da tabela de fatos, seguindo obrigatoriamente esta ordem na primeira carga. Em cargas futuras sempre efetuar primeiro as dimensões de modificação lenta e na seqüência efetuar a carga da tabela de fatos.

Utilizando serviços de FTP/e-mail

Utilizando os passos de file transfer pode-se verificar as possibilidades de transferir um ou mais arquivos via FTP, SFTP e SSH. Como exemplo, abaixo está detalhado em uma tabela alguns campos do passo "Get a file with FTP".

Job entry name Nome do passo no Job. Este nome deve ser único dentro do job em questão.
Remote directory Diretório ou pasta no servidor FTP onde estão os arquivos.
Target directory Diretório ou pasta destino dos arquivos.
Wildcard Especifica uma expressão regular caso deseje selecionar vários arquivos:

.*txt$ : pega todos os arquivos texto

A.*[ENG:0-9].txt : pegar arquivos que iniciam com A, terminam com um numero e possuem extensão .txt

Use binary mode? Marcar este campo se os arquivos devem ser transferidos em modo binário.


Além do que foi colocado na tabela, deve-se lembrar dos campos básicos da conexão: servidor, usuário e senha.

Nota: Observe que estes passos de transferência de arquivos encontram-se disponíveis somente para Jobs.

Utilizando serviços de e-mail

Enviar um e-mail é um passo importante e muito útil que pode ser utilizado em um job. Para que isto seja possível é necessário identificar o(s) passo(s) de onde serão enviadas as mensagens e estabelecer uma conexão (hop) com o envio de e-mail. No Kettle, esta funcionalidade é facilmente encontrada no menu lateral com o nome de "Mail".

Ao editar o passo, como primeiras informações, devem-se especificar o endereço de destino e o endereço de quem está enviando a mensagem. Em um segundo momento deve-se especificar o servidor SMTP (figura 18).

Figura 18 - Job Mail
No exemplo acima foi utilizado para uma conta do Gmail, para que as mesmas configurações acima sejam utilizadas, deve-se certificar que possui uma conta no Gmail.

Na parte da mensagem é importante identificar de qual job está partindo o e-mail, além de poder configurar o formato e alguns atributos da mensagem. Na figura 19 observa-se que é possível anexar arquivos na mensagem a ser enviada, no exemplo utilizou-se o próprio log do job.

Figura 19 - Anexar log

Problemas comuns e considerações

  1. Quando tem uma conexão criada e é feita uma atualização/correção na base de dados, por vezes pode ser necessário recriar a conexão no kettle, pois ele ainda aponta para o esquema anterior, provavelmente armazena em algum local, mas aqui não é o casso de corrigir o problema já que pode ser contornado.
  2. Deve-se especificar os tipos de campos em toda e qualquer parte da transformação, o kettle não vai entender o tipo do campo no final da extração caso não seja informado.
  3. Sempre é útil colocar a saída dos dados em uma planilha, mas ela pode ocultar falhas na transformação, assim, caso necessite, faça o teste com a saída em um txt também.
  4. Caracteres "estranhos" na base de origem podem acabar passando pelo ETL sem identificação, mas na ferramenta de BI acaba apresentando problemas.
  5. Mudanças nos sistemas transacionais podem implicar em alterações nas rotinas de carga.
  6. A qualidade do DW depende de um bom cadastro no sistema transacional e uma boa pergunta na ferramenta de análise.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Download e instalação
   3. Montando uma transformação
   4. Utilizando variáveis e tratando strings
   5. Utilizando Java Script e Database Lookup
   6. Extração a partir de XML e XLS, montando um Job e utilizando serviços de FTP/e-mail
Outros artigos deste autor

Usando o Guitar Pro no Linux

Montando um roteador com o floppyFW

Leitura recomendada

Paginação de resultados com a classe ADODB

Elasticsearch na saúde

Utilizando arquivos Access (.mdb) no seu Linux

O eeePC e o OS/2 Warp

Instalando o Interbase 7.5 no Debian Sarge

  
Comentários
[1] Comentário enviado por f_Candido em 08/01/2010 - 22:10h

Olá,

Gostaria de parabenizá-lo pelo artigo. Parece ser uma ferramenta interessante, dado que para BI, conheço somente ferramentas pagas, não caras, mas pagas. Mas, como comentário, ficou faltando somente esclarecer um pouco mais, dado que é uma ferramenta de ETL, sobre as suas bases : Granularidade, Dimensões, Fatos... Bom, mas ficou muito bom.

Parabéns

Abraços

[2] Comentário enviado por gigiow em 09/01/2010 - 09:48h

Obrigado pelo comentário,
Sobre data warehouse apenas comentei no texto, se tiver que escrever algo vai render outro artigo, mas já existe muito material publicado sobre o tema na internet. O foco aqui é mesmo a ferramenta e os primeiros passos com a mesma.

Abraços

[3] Comentário enviado por AdemarGomes em 21/01/2010 - 18:46h

Olá Giovanni,

Parabéns pelo trabalho apesar de não ter lido todo o artigo vejo que vc se esforçou para fazer um bom e apresentável artigo.
Segue meu site, www.ademargomes.com, onde você pode encontrar bastante material sobre Kettle e outras coisas.
Me senti a vontade de colocar aqui meu site pois escrevi um artigo de Kettle muito próximo do seu, mas esse foi pro site no ano passado, por tanto não tem plagio :)

Sorte e Sucesso,

AdeamrGomes

P.S. Link do artigo: http://www.ademargomes.com/index.php/artigos/56-turialkettle.html

[4] Comentário enviado por henriquemeira em 26/02/2010 - 00:35h

Estou tentando criar alguns "mapas" com o Kettle e me deparei com uma barreira: como utilizar os dados de um Input "pai" para retornar valores de um Input "filho" ?

Explico: digamos que tenho que montar um arquivo de Pedidos no seguinte formato:

CAPA: NRO_PEDIDO | DATA_PEDIDO | VALOR
ITENS:NRO_PEDIDO | NRO_PRODUTO|QTD|PRECO

Exemplo:

101|2010-02-26|100,00
101|123|1,00|40,00
101|321|2,00|30,00
102|2010-02-26|20,00
102|456|2,00|10,00


Penso que para construir algo parecido eu utilizaria um Input com uma query buscando as capas de pedidos, e o fluxo (ou hop) seguiria para outro Input, desta vez buscando os itens. Este é o ponto: como fazer o segundo Input receber um valor do primeiro input?

Em resumo:

Input_nro_1: select nro_pedido, data_pedido, valor from PEDIDO;

Input_nro_2: select nro_produto, qtd, preco from ITEM_PEDIDO where nro_pedido = Input_nro_1.Nro_pedido

Deu pra entender?

valeu!

[5] Comentário enviado por gigiow em 26/02/2010 - 08:10h

Henrique,

Vamos ver se entendi, existem formas de se fazer o que precisa:

1) As tabelas estão na mesma base? se estão pode montar a consulta em um único "input"
ficaria:
SELECT c.nro_pedido, c.data_pedido, c.valor
FROM CAPA c
INNER JOIN ITENS i
ON c.nro_pedido = i.nro_pedido

2) Se estão em bases distintas, utiliza-se o passo de JOIN que existe no kettle para realizar esta junção entre os dois inputs;

Valeu!


[6] Comentário enviado por henriquemeira em 19/03/2010 - 00:37h

Opa, não tinha visto que tinha retornado ao meu comentário...

Bem, vamos lá... vc quase entendeu.

É o caso 1, estão na mesma base. Mas eu gostaria de tratar em inputs distintos, ou seja, capa em um input e item em outro input. Entretanto, o input2, ou seja, dos itens, iria ser aberto para cada capa.

Pq isto? Pq eu quero gravar a capa do pedido no destino e depois o item, mas eu preciso garantir a integridade dos dados, ou seja, eu tenho que gravar a capa antes de gravar o item, e para isto acredito que tenho que abrir o Input do item apenas após realizar o output da capa.

Um diagrama de exemplo seria assim:


|CAPA|--->---|OUTPUT|--->---|ITEM|--->---|OUTPUT|


Deu para entender?

Ou o correto neste caso seria um Transformation para Capa e outro Transformation para Item?

valeu!!

[7] Comentário enviado por ttonyys em 24/05/2011 - 22:29h

Giovanni, parabéns pela iniciativa. Estou dando meus primeiros passos rumo a BI. Participei de um treinamento em Brasília/DF com Caio Moreno (o professor coruja - http://blog.professorcoruja.com) e estou finalizando "Inteligência Competitiva" pela FGV.

Passou por um problemão por mais de 30 dias: conectar ao DB Progress via JDBC. Consegui, Ufa! Criei http://inpentaho.blogspot.com para deixar a solução registrada.

Não pare de postar sobre o KETTLE.

Jesus bless.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts