domingo, 22 de julho de 2012

Como começar uma transformation

Para aqueles que estão iniciando o desenvolvimento de uma transformation, pode existir a dúvida de como iniciar o processo, ou seja, de quais steps utilizar para dar início ao novo processo.

Resumindo de forma bem simples, destacamos que uma transformation, salvo raras exceções que serão mostradas adiante, sempre devem começar com um step de Input.     São os steps de Input que são responsáveis por extrair as informações que serão inseridas e trabalhadas no fluxo e automaticamente criar o stream de dados que passarão por todos os steps de nossa transformation.

Desta forma, podemos entender que, caso tentemos dar o start em uma transformation sem que haja um step para inserção dos dados no fluxo, o kettle reproduzirá um erro ou simplesmente não fará nada.
Seguindo esta linha de pensamento, concluímos também que, independentemente da posição dos steps de Input no fluxo, um novo fluxo de dados será iniciado em cada um dos steps de Input, ou seja, se tivermos 3 steps de Input, teremos nossa transformation iniciando em 3 pontos diferentes que, posteriormente, podem ou não convergir em um único fluxo através da utilização de um step de Join, por exemplo.



Observe pela figura acima, que nossa transformation de exemplo possui um Excel Input, um Table Input e um Text File Input.   Com este cenário, teremos nossa transformation sendo iniciada em três pontos diferentes, porém o step  Join Rows é responsável por unir dois destes fluxo, enquanto o step Append Stream (Union) converge o terceiro.

Se por algum motivo você utilizar um step de Input no meio de um fluxo, como por exemplo executar um script SQL utilizando um Table Input ou adicionar um Text File Input no meio do caminho, conforme demonstra a figura abaixo, teremos a transformations sendo iniciada em todos os inputs, o que poderá nos levar a um resultado indesejado, caso este comportamento não esteja previsto ou controlado.


O desenho acima não faz muito sentido, visto que teríamos dados saindo do step de Texto e chegando ao final antes mesmo de muitos dados terem saído da planilha Excel.    Sinceramente, não conheço nenhuma aplicação prática para isso, o que constitui uma ação inconsistente.
O que poderíamos ter, conforme já mostramos em nosso post sobre o Table Input, é o recebimento de parâmetros de entrada que serão utilizados nestes steps de input, como um dado que será utilizado dentro do script, uma variável ou até mesmo o nome do arquivo de onde serão extraídas as informações que também pode ser recebido como parâmetro de um step anterior.





Exemplo com o Excel Input recebendo o nome do arquivo como parâmetro do step anterior




Table Input recebendo um valor que será utilizado dentro do script como parâmetro do step anterior.

Estes dois exemplos acima (Excel e Table Input) mostram como utilizar um step de input no meio do fluxo sem que necessariamente o fluxo inicie duas vezes em dois pontos diferentes, pois para que o step de input insira os dados extraídos via SQL, ele precisará receber uma informação do step imediatamente anterior.

Aprendemos, portanto, o comportamento correto da transformation no caso dos steps de Input, deixando claro que o início de uma transformation e a ordem do fluxo depende da posição e de quantos steps de Input existem em nosso processo.
A única forma de iniciar uma transformation sem utilizar os steps de input é utilizando os steps da guia "Job", através dos steps  "Get rows from result", "Get Variables", etc, cujos comportamentos já foram explicados em posts anteriores.

segunda-feira, 2 de julho de 2012

Alinhando os Steps

Este post tem o objetivo apenas de dar uma dica simples sobre como melhorar a aparência de uma transformation ou de um job.
É comum, em diversas situações, após a criação e posicionamento dos steps no workspace gráfico do Spoon, visualizarmos nosso trabalho da seguinte forma:


Para alinharmos os steps, a fim de deixar a visualização um pouco mais agradável e até mesmo intuitiva, siga os seguintes passos.


1- Com um clique-e-arraste do mouse, selecione todos os steps que estão na horizontal, conforme a figura abaixo.




Quando os steps estiverem selecionados, eles estarão com a borda destacada em preto, como mostrado nesta primeira figura.


2- Para alinhar os steps na mesma linha horizontal, você deve pressionar CTRL+baixo para alinhar os steps no nível do step mais abaixo desta linha horizontal, ou CTRL+cima para alinhar os steps no nível do step mais acima desta linha.


Observe na figura abaixo o resultado de um CTRL+baixo




Agora que os steps já estão alinhados horizontalmente, ajustaremos por fim os steps que estão (ou deveriam estar) na mesma linha na vertical.


3- Para isso, selecione com um clique-e-arraste os três steps que estão na vertical e pressione CTRL+direita (conforme figura abaixo) ou CTRL+esquerda.




Aprendemos, desta forma, a organizar e melhorar o alinhamento dos steps, permitindo uma visualização mais agradável, além de não precisarmos mais "apanhar" do mouse para alinhar dois ou mais steps.
Apesar de utilizarmos uma transformation neste exemplo, o mesmo conceito aplica-se na organização de componentes dos jobs (job entry).




domingo, 1 de julho de 2012

Add Sequence

Como o próprio nome diz, este step adiciona uma sequencia numérica ao fluxo de dados da transformation.

Veremos rapidamente neste post como utilizar o step Add Sequence, e em quais casos seria interessante a utilização do mesmo.




Observe que existem duas maneiras de obtermos esta sequencia.   A primeira é através de uma sequence existente no banco de dados.    Marcando o checkbox com a descrição "Usa BD para obter a sequencia", você poderá recuperar uma sequence existente em um schema do banco de dados.

A opção mais utilizada neste step é a criação de uma sequence pelo próprio Kettle.    Marcando o checkbox "Use o contador para calcular a sequencia", voce poderá definir o valor inicial da sequence gerada, seu incremento e valor máximo.
Para deixarmos claro estas últimas opções, caso escolhamos o valor 10 como inicial, 2 como incremento e 30 como valor máximo, teremos uma sequencia iniciando com o 10 na primeira linha do fluxo que passar neste step, crescendo de 2 em 2 (10, 12, 14, 16..) e que será reiniciada quando chegar no valor 30 (ex: 26, 28, 30, 10, 12..).

A primeira e mais óbvia utilidade deste step é a geração de uma sequence para popular uma tabela do banco de dados que não tenha uma sequence automática.     Esta abordagem também pode ser útil para criar sequences e deixar mais claro o número da linha ao popularmos um arquivo xls, csv ou txt.

Outra utilidade para este step, que também pode ser feita com outros steps, é o controle do fluxo.   Em determinado contexto, poderia ser necessário exportar para um arquivo uma lista com os 1000 produtos mais vendidos durante determinado mês.   Para isso, poderíamos obter a quantidade de vendas de cada produto (utilizando o step Group by), ordenar o fluxo pelos produtos mais vendidos (Sort Rows), numerar as linhas com o Add Sequence e utilizar qualquer step de controle (Filter Rows, Switch/Case, etc) para manter os mil primeiros registros até o final.

Conforme falado anteriormente, esta segunda abordagem apresentada também pode ser realizada sem a geração de uma sequence, pois o step "Sample Rows", na guia "Statistics", também é capaz de realizar este controle.

De qualquer forma, todas as vezes que for necessário controlar o fluxo e gravar o número das linhas, seja para adicioná-las em tabelas, para retirar registros desnecessários, identificar o número de linhas, identificar o número do último registro escolhido, etc, poderemos nos beneficiar da funcionalidade do step Add Sequence.


Exemplo de utilização do Add Sequence abordado neste post