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.446 ]
Por: Giovanni Won Dias B. Victorette em 08/01/2010
Em uma transformação pode ocorrer que não consiga achar uma função desejada, ou se encontra acaba não atendendo plenamente a necessidade ou existe dificuldade de compreensão da mesma. A alternativa, se não a melhor, é a possibilidade de utilizar Java Script no tratamento dos dados. Com isto a limitação acaba ficando no Java Script onde o processamento é feito linha a linha da tabela de entrada.
Figura 12 - Utilizando Java Script
Na figura 12 podemos observar a aplicação de Java Script na criação de uma dimensão Idade. Detalhando este passo podemos observar que existem várias funções disponíveis além das referencias dos dados de entrada e saída (Input/Output fields). Neste passo, as variáveis que são declaradas no código podem ser definidas como campos de saída. Um cuidado que sempre deve-se ter é observar e informar corretamente os tipos dos campos. Neste caso uma String (figura 13).
Figura 13 - Detalhando um script
Database Lookup
Este passo é muito importante quando existe a necessidade de retornar o valor de um campo de uma tabela dada uma determinada condição. Pode-se ver uma aplicação do mesmo para a carga de uma tabela de fatos, onde o lookup aponta para a dimensão especificada efetuando a comparação de um determinado campo da entrada com um campo da dimensão, assim retorna a chave da dimensão para ser inserida na tabela de fatos (figura 14).
Figura 14 - Lookup na dimensão
Insert/Update
Como o próprio nome do passo diz, pode-se realizar um insert/update em uma tabela de fatos ou em uma dimensão e para que isto seja possível o passo permite informar os campos de lookup e qual o comparador a ser utilizado, além de que na seqüência são informados os campos da tabela e se estes podem ser atualizados ou não (figura 15).
[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.
[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.
[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
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
[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;
[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?
[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.