domingo, 26 de agosto de 2012

Como alterar data types

O Kettle permite que alteremos o tipo de cada dado com extrema facilidade.     
Primeiramente, é importante que tenhamos o controle do formato e do tipo de cada dado que entra no fluxo, já que, quando extraímos dados de diferentes bancos de dados, os formatos nem sempre são exatamente iguais para uma data, número ou até mesmo um texto.    Desta forma, ao invés de tentarmos realizar uma possível conversão e padronização para cada input, podemos simplesmente utilizar o step "Select Values" para converter todos os campos desejados.

Uma forma de visualizar os dados e seus tipos em qualquer parte do fluxo é clicando com o botão direito em qualquer step e visualizando os dados de entrada e/ou de saída, através das opções "Mostra campos de entrada" e "Mostra campos de saída", conforme vemos na figura abaixo:



Ao clicar na opção para exibir os campos de saída do step, veremos os campos (e não os valores) e seus tipos, da forma como entrarão no próximo step, ou seja, incluindo qualquer modificação que tenha sido realizada dentro do step.    Além disso, esta opção também é interessante porque mostra qual é o step de origem de cada dado, permitindo o acesso direto ao step de origem.


Como estamos ilustrando nosso tema com o step Select Values, utilizaremos o mesmo para alterar agora os data types que nos for conveniente.
Sendo assim, podemos acessar a aba Meta-Data e incluir os campos que desejamos alterar.   Observe que, mesmo havendo oito campos no fluxo, só queremos editar o data type de três deles, por isso inserimos apenas os três campos desejados.     Observe também que, conforme a figura acima, os dois campos numéricos já eram numéricos anteriormente, assim como o campo "data_venda" já era do tipo Date.    O que estamos fazendo aqui é apenas dando uma formatação específica para estes campos.    Embora tenhamos utilizado esta maneira de exemplificar a conversão, é importante saber que qualquer conversão possível em um banco de dados, por exemplo, também será possível realizar no Kettle.    Conversões que geralmente são proibidas, provavelmente também serão proibidas, gerarão alguma mensagem de erro ou um resultado inesperado no Kettle.   Resumindo, não há surpresas nem milagres.


Coloco aqui apenas um cuidado, que é o fato de utilizarmos o Select Values também para a exclusão de campos do fluxo ou para renomeá-los quando necessário.    Quando quisermos alterar o data type, aplicar uma formatação e também renomear o campo, podemos fazer tudo na aba "Meta-Data", ou seja, não precisamos usar a aba "Select e Alter" para renomear e a "Meta-Data" para converter.

Por fim, para garantirmos que alcançamos o resultado desejado, é bom visualizarmos novamente os dados de saída deste step ou os dados de entrada do próximo para percebermos as diferenças.   Aconselho também a realização de um preview nos dados, para evitarmos erros ou surpresas desagradáveis em partes posteriores do fluxo.
Exibimos neste post uma das possibilidades na conversão dos dados, sem a necessidade de scripts (javascript), além de salientarmos mais uma vez a importância de observamos criteriosamente os dados que trafegam durante a transformation, à medida que desenvolvemos a mesma.

quinta-feira, 2 de agosto de 2012

Como buscar informações do Banco de Dados

Em nosso último post, explicamos alguns conceitos importantes sobre o início do desenvolvimento de um processo de ETL.

Após extrairmos as informações disponíveis de uma determinada fonte, pode ser necessário procurarmos informações complementares em uma ou mais tabelas no banco de dados.    Isso pode acontecer, por exemplo, quando temos ao nosso dispor o código de um produto e precisamos buscar outras informações em tabelas do BD, tais como o nome do produto, a quantidade de produtos no estoque, a quantidade de produtos vendidos, o preço do produto, etc.
Caso tenhamos no Kettle um componente onde podemos comparar um campo do fluxo com um campo de uma tabela (chave) e com isso recuperar outras informações deste registro, supriremos nossa necessidade com certa facilidade.

É com este objetivo que explicamos em posts anteriores o funcionamento do step "Database Lookup".   Através deste e outros steps, podemos recuperar informações do banco de dados a partir das informações que temos à nossa disposição.



Observe pela figura acima que modelamos um processo de ETL extraindo informações sobre a venda de produtos de uma tabela do Excel, com a finalidade de gravar estas e outras informações no banco de dados.    Na metade de nosso processo, temos um Database Lookup com a seguinte configuração:


Observe novamente que iremos extrair informações da tabela de produtos.   Como a única informação que temos na planilha excel é o ID do produto, cujo nome do campo é "id_produto", iremos comparar este campo com o campo "COD_PRODUTO" da tabela de produtos, para recuperarmos, conforme mostra a parte inferior do print, as colunas "nome_produto", "preco" e "quantidade" que estão gravados nesta tabela.

A parte final deste processo mostra os dados sendo inseridos em uma tabela de venda de produtos.

O objetivo deste post não é mostrar os detalhes deste step, mas sim o seu comportamento principal, visto que já existe um post exclusivo sobre o Database Lookup.   
Através destas instruções, você poderá recuperar a partir de agora, informações importantes gravadas em tabelas do banco de dados.
Os steps "Stream Lookup" e "Database Join" também podem nos ajudar neste objetivo, porém com uma abordagem diferente.
Por último, aconselho uma "releitura" do post sobre o Database Lookup, para que possam relembrar os detalhes importantes sobre este step.