segunda-feira, 29 de agosto de 2011

Configurando Conexões

O Pentaho Data Integration permite que conexões sejam configuradas com uma infinidade de bancos diferentes.    Não existe segredo ao configurarmos as conexões que serão utilizadas, mas podemos destacar alguns detalhes interessantes:
  1. É possível estabelecer conexões com quase 40 bancos diferentes, entre eles os mais conhecidos;
  2. É possível criar conexões tanto em transformations quanto em jobs;
  3. Conexões utilizando o Windows Authentication precisam de configurações mais avançadas, que serão explicadas em outro post;
  4. Os campos definidos para as configurações das conexões podem receber variáveis ao invés dos valores diretamente;
  5. Podemos criar diversas conexões de diversos bancos diferentes dentro do mesmo arquivo.
O item 4 pode ser muito útil, quando desenvolvemos processos em um ambiente de desenvolvimento e o mesmo necessita passar por ambientes de homologação até chegar no ambiente de produção.    Utilizando variáveis, os valores da conexão podem ser retirados de um arquivo, como um xml por exemplo, o que facilita muito no momento de alterar as configurações.    Não existe qualquer necessidade de abrirmos a transformation ou o job para alterá-las.

Se você nunca criou uma conexão, basta seguir as instruções a seguir:

Na parte superior esquerda da ferramenta, acesse a opção View e logo após o item Conexões, com um duplo clique ou com o botão direito e acessando a opção Novo.

A próxima imagem demonstra como é a janela que será aberta:


Não existe qualquer complicação quando configuramos uma conexão simples.  Outras opções mais avançadas também podem ser acessadas, conforme o menu na parte esquerda da janela.    Até a possibilidade de clustering é possível com o Pentaho Data Integration.
Caso desejemos substituir os valores por variáveis, as configurações ficarão conforme a imagem a seguir.


Um detalhe muito importante, que não pode ser percebido pela imagem, é que até o próprio campo Password também poderá receber o valor de uma variável, como ${PASSWORD}, por exemplo.
A partir de agora, estaremos aptos a configurar conexões, parte essencial  no desenvolvimento de um  processo de ETL.
O próximo post mostrará como podemos compartilhar conexões, ou seja, deixar uma mesma conexão disponível para qualquer arquivo que for criado dentro de uma máquina.

domingo, 21 de agosto de 2011

Table Input

Utilizar o componente (step) Table Input é simples, mas podemos destacar algumas funcionalidades que podem ajudar-nos a utilizar este step como solução em diversas etapas de nosso ETL.


Para adicionar o componente ao processo, basta selecionar a opção "DESIGN" na parte superior esquerda da tela, abrir as opções de steps de "INPUT", clicar no componente TABLE INPUT  e arrastá-lo até a área de trabalho do programa.
Para abrir as opções do step, basta clicar duas vezes no componente, ou clicar com o botão direito e na opção "EDITAR STEP".
A figura abaixo mostra as opções do componente:


Vamos aos itens destacados:

1- Connection:   Conexão que será utilizada para a execução da query.   Explicaremos com mais detalhes como configurar uma conexão em um post posterior.    Se utilizarmos um componente que pretende extrair ou inserir dados em um BD, obviamente precisaremos de, no mínimo, uma conexão configurada.   Havendo apenas uma conexão configurada na Transformation, esta opção virá automaticamente com o nome dela.   Havendo mais de uma, será necessário escolher.

2- SQL: espaço para o código SQL.    Importante lembrar que o componente "TABLE INPUT" espera sempre um retorno de dados, ou seja, caso deseje adicionar um insert, update ou delete no código, criar ou deletar tabelas, não há problema, desde que, ao final da query, haja um select para adicionar os dados do banco ao fluxo.

3- Replace Variables in Script: caso deseje substituir o nome de uma coluna, um valor na clausula WHERE ou qualquer etapa do código por uma variável proveniente de um step, transformation ou job anterior, basta habilitar esta opção.   A variável inserida no código deve estar escrita como ${VARIAVEL}.     Ex: select * from TABLE where id = ${ID}.

4- Insert data from step: caso deseje utilizar um valor (e não uma variável) proveniente do step imediatamente anterior dentro da mesma transformation, basta habilitar esta opção escolhendo o step anterior ligado ao Table Input.   Para colocar o valor dentro da query, basta utilizar ponto de interrogação.     Ex:   select * from TABLE where id = ? 
OBS 1:  Se o valor for um string ou uma data, o ponto de interrogação deve seguir o padrão sql normal, ou seja, deve ser colocado entre aspas simples. Ex:  select * from TABLE where name = '?' 
OBS 2: A quantidade de pontos de interrogação deve ser exatamente igual ao número de campos (colunas) provenientes do step anterior.   Se no step anterior estivermos passando 3 campos para o Table Input e a opção descrita no item 4 for ativada, precisaremos ter 3 pontos de interrogação utilizados dentro da query.

5 - Execute for each row:  por ser um componente de input e inserir dados (linhas) dentro do fluxo, este step costuma ser executado no início da transformation e apenas uma vez.   A opção EXECUTE FOR EACH ROW garante que o código será executado por cada linha que passar pelo fluxo.   Esta opção só poderá ser marcada se o item 4 também for.  Desta forma, o Table Input poderá ter steps que o precedem, recebendo os valores (campos e linhas) destes steps.

6- Preview: com o código finalizado, podemos fazer um PREVIEW para garantir que não há erros no código, visualizando um número determinado de linhas.

Outras opções:
Enable lazy conversion: evita conversões de tipos de dados desnecessários e pode resultar numa melhora significante de performance.
Limit size:  número de linhas que serão lidas da(s) tabela(s).   O zero (0), significa que todas as linhas serão lidas.

sábado, 20 de agosto de 2011

Kettle ou Pentaho Data Integration?

O Pentaho Data Integration (PDI), também conhecido como Kettle, é uma ferramenta de código aberto, desenvolvida em Java, para Extração, Transformação e Carga (ETL) de dados, ferramenta esta integrante da suíte Pentaho de Business Inteligence (BI).
Todos os processos são criados com uma ferramenta gráfica, que pode ser usada independentemente ou integrada à outras ferramentas do Pentaho.

Dentre as diversas funções, o Pentaho Data Integration, como ferramenta de ETL, pode ser usado principalmente para:

  • Extração: coletar dados de diversas fontes. Podem ser arquivos de diferentes formatos ou das mais distintas bases de dados;
  • Transformação: mover e modificar dados, limpando, denormalizando, agregando e enriquecendo esses dados durante o processo;
  • Carga: armazenar os dados em seu destino final.  Também podem ser arquivos de diversos formatos ou um outro banco de dados.   Normalmente são armazenados em um Data Warehouse.

A ferramenta de ETL que hoje faz parte da suíte do Pentaho, conhecida como Kettle, foi desenvolvida em 2002 por Matt Casters e hoje, integrada ao Pentaho, recebe a contribuição de um número cada vez maior de pessoas, inclusive de seu próprio criador.   A sigla K.E.T.T.L.E, significa "Kettle Extraction, Transport, Transformation and Loading Environment", ou seja, Ambiente Kettle de Extração, Transporte, Transformação e Carga.

O Pentaho Data Integration é constituído de várias aplicações distintas, a saber:
  • Spoon: ferramenta gráfica responsável por modelar o fluxo de dados desde sua entrada até sua saída.  Nela é possível criar jobs e transformations;
  • Pan: ferramenta de linha de comando que executa as transformações modeladas no ''Spoon'' ;
  • Kitchen: ferramenta de linha de comando que executa os jobs modelados no ''Spoon''; 
  • Carte: é um servidor web que permite executar transformations e jobs remotamente. 

As chamadas Transformations são responsáveis pelo tráfego dos dados propriamente dito, dados estes que podem ser extraídos de diversas fontes (tabelas de um BD, planilhas, documentos de texto, arquivos csv, arquivos xml, etc), tratados com um número vasto de componentes e inseridos/exportados para a mesma variedade de saídas (as mesmas das fontes de entrada).
Os Jobs podem ser responsáveis por executar um conjunto de transformations e outros jobs internos, assim como manipular e transferir arquivos, enviar e receber emails e executar uma série de validações.

Cada componente de uma transformation ou job, é chamado de Step e é conectado ao próximo componente através de uma linha, chamada Hop.   Os componentes (steps) de uma transformation, por exemplo, podem ter um Hop que liga-o a outro step, que continuará o fluxo de dados, ou a um outro step, que fará o tratamento dos dados caso estes apresentem algum erro ou inconsistência no step anterior.   Desta forma, a ferramenta ainda permite que o fluxo não seja interrompido caso haja dados inconsistentes, permitindo fácil identificação e continuidade nas rotinas desenvolvidas.

Caso um usuário deseje ajudar no desenvolvimento da ferramenta, assim como no desenvolvimento ou melhoria de novos componentes, basta que o mesmo baixe o código fonte da aplicação, disponível no site do Pentaho, e faça as alterações desejadas.

Um grande número de componentes/plugins customizados estão inclusive disponíveis para download.