sábado, 9 de junho de 2012

Merge Join

O uso deste step e seu entendimento fica extremamente simples para aqueles que possuem alguma experiência com a linguagem SQL.     
O resultado deste componente é semelhante a um comando JOIN entre duas tabelas, porém no ETL ele faz a junção entre dois (e apenas dois) fluxos diferentes.
Para incluir a junção entre mais de dois fluxos, deverão ser utilizados outros componentes iguais na sequência do fluxo.



Observe através da figura acima que estamos juntando exatamente dois fluxos.   O primeiro tem origem em um step de ordenação, enquanto o segundo vem diretamente de um Table Input.    Independente das origens, precisaremos especificá-las dentro do step, decidindo qual será a primeira e a segunda fonte.



Esta definição será importante para o uso do LEFT, RIGHT ou FULL OUTER JOIN.   No caso de um INNER JOIN, a definição do primeiro ou segundo step influenciará apenas na ordem das colunas, porém não no resultado.

Para deixarmos claro o porquê desta definição, caso decidamos utilizar o LEFT JOIN, o resultado do step são todos os registros da primeira fonte, juntamente com os registros da segunda fonte onde haja correspondência entre os campos chave - key fields - de comparação .  Caso não haja correspondência, as colunas da segunda fonte retornarão nulas.

Não pretendemos demonstrar os tipos de resultados - através de prints - que são obtidos através deste step, já que, tendo ficado claro o conceito explicado no parágrafo acima, o retorno esperado será o mesmo que o retorno obtido através de uma query SQL.


Premissas e Cuidados

Observe que, ao clicar no botão Ok após a configuração do step, o Kettle exibirá a seguinte mensagem:


Esta mensagem alerta sobre uma premissa básica para o correto funcionamento do Join, que é a ordenação dos campos chave usados na comparação.   Esta premissa explica o step de ordenação que colocamos em nosso exemplo.   Neste exemplo, estamos ordenando o campo ID, que será comparado ao campo ISSUE proveniente do Table Input denominado CUSTOMFIELDVALUE.     Como é possível perceber, não colocamos outro step de Sort Rows após o Table Input porque já podemos ordenar os campos na própria query SQL.    

O Kettle exige estas ordenações pela forma que o step realiza o Join, ou seja, para garantirmos o funcionamento 100% correto, assim como o resultado esperado, devemos seguir esta instrução.

O último cuidado que devemos tomar ao utilizarmos este step, é o mesmo de quando utilizamos o Filter Rows, ou seja, não podemos esquecer de especificar corretamente a primeira e a segunda fonte (deixar o campo em branco), ou de trocá-los quando inserirmos outro step antes do Merge Join.   Isso é bem comum quando realizamos alterações no fluxo após a inserção do Merge Join.     Caso alguma das fontes fique em branco ou esteja apontando um step errado, a execução será interrompida por causa deste erro.