sexta-feira, 11 de maio de 2012

Movimentando dados entre várias transformations

Todos aqueles que já tiveram a oportunidade de trabalhar com os jobs no Kettle, perceberam a necessidade de comunicação entre as transformations que o compõem.   Isso acontece, obviamente, porque nem sempre as transformations são completamente independentes entre si, ou seja, apesar de processos diferentes, elas podem possuir uma sequencia de comandos e transformações em cima dos mesmos dados.

Para garantirmos que os dados de saída de uma transformation sirvam como insumo para a execução da próxima, precisaremos dos steps "Copy rows to result" e "Get rows from result", localizados na pasta Job.


Copy rows to result

Este step não possui qualquer propriedade a ser definida.   O fato de inserirmos o Copy rows to result em qualquer parte do fluxo, indica que todos os registros e todas as colunas do fluxo até aquele momento serão passadas adiante, ou seja, para a próxima transformation.
Por este motivo, o mais provável é que este step seja alocado ao final do fluxo, já que, na etapa final da transformation, os dados já estarão devidamente tratados e manipulados.




Get rows from result


Para que a próxima transformation recupere os dados enviados pela transformation anterior, usaremos este step para definir quais campos serão inseridos nesta transformation.


Caso a transformation anterior tenha terminado com 120 linhas e com as colunas id_fornecedor e nome_fornecedor, estamos definindo, de acordo com a imagem acima, que apenas as colunas id e nome do fornecedor entrarão nesta transformation.   Apesar de podermos escolher os campos, não podemos definir a quantidade de linhas de input.   Para chegarmos a este nível de controle, precisaríamos controlar a saída dos registros na transformation anterior, ou tratá-las em steps posteriores nesta nova transformation.

Sendo assim, podemos considerar o step Copy rows to result basicamente como um step de output, em virtude do seu comportamento, enquanto o step Get rows from result pode ser considerado como um step de input, não sendo necessário haver outro step de input para que a transformation inicie corretamente.

As imagens abaixo ilustram duas transformations que contêm os steps mencionados acima, em uma aplicação prática dos mesmos.