Como unir duas tabelas – Source Qualifier – User Defined Join – Left Outer Join** A transformação Source Qualifier é a maneira mais eficiente de unir duas tabelas no mesmo Banco de Dados **
Há duas opções disponíveis no SQ para múltiplas tabelas, uma usando a propriedade "User Defined Join" e a outra usando "SQL Query". Podemos criar um join override para fazer uma associação Normal join, Left join e Outer join using ‘User Defined join’ , mas obteremos um erro de banco de dados se você tentar fazer 'Full outer join'. O serviço de integração não suporta Full outer join. Para isso, podemos usar SQL override e concluí-la.
User-Defined Join
Crie um join override. O Serviço de Integração anexa o join override à cláusula WHERE ou FROM da query padrão.
SQL Query
Substitua a query padrão por Join SQL query
Left Outer Join
O Serviço de Integração retorna todas as linhas da tabela à esquerda da sintaxe do join e as linhas de ambas as tabelas que atendem à condição do join. Em outras palavras, ele retorna todas as linhas da tabela da esquerda (FUNCI_MAX), com as linhas correspondentes na tabela da direita (FUNCI_MIN). O resultado é NULL no lado direito quando não há semelhança.
FUNCI_MIN - Esta é a segunda tabela (esquerda). Vamos unir essas duas tabelas e carregar para o target usando o SQ.
Criei um mapa com Transformação Source Qualifier. Precisamos de apenas 1 instância de SQ aqui com as portas de ambas as tabelas, pois estamos gravando uma única query para ler a partir da source.
Edite a propriedade SQ e entre com a expressão SQL no editor "User Defined Join". Apenas observe a sintaxe do join, insira a instrução de join entre chaves ou então obterá um erro de banco de dados. Join Syntax {FUNCI_MAX LEFT OUTER join FUNCI_MIN on FUNCI_MAX.ID=FUNCI_MIN.ID}
Criei um Workflow e uma session para o mapa e executaremos o job. Vamos analisar o log da sessão. Apenas 6 linhas foram lidas do source e carregadas no target, Todas as linhas da tabela esquerda, com as linhas correspondentes na tabela à esquerda.
Veja o Source Qualifier usado no mapa, usamos a propriedade "User Defined Join", o Serviço de Integração substitui a SQL Query padrão e foi alterado para uma Join Query.Target output - Todos os registros da tabela Right (4 Matched + 2 Unmatched) foram carregados no target. Como não há correspondência, 7 e 8 mostrando como NULL.
Left Outer Join Query
SELECT FUNCI_MAX.ID, FUNCI_MAX.CARGO, FUNCI_MAX.BONUS_MAXIMO, FUNCI_MIN.BONUS_MINIMO FROM FUNCI_MAX, FUNCI_MIN WHERE {FUNCI_MAX LEFT OUTER join FUNCI_MIN on FUNCI_MAX.ID=FUNCI_MIN.ID}
Nós terminamos com o Left Outer Join - Vamos ver Full Outer Join na próxima sessão.
Se você gostou, inscreva se, mande sua opinião!
Meu e-mail: diogo.vidal@outlook.com | Diogo Vidal
Comments