O prefixo join une a tabela carregada a uma tabela nomeada existente ou à última tabela de dados criada.
O efeito da união de dados é estender a tabela de destino por um conjunto adicional de campos ou atributos, ou seja, aqueles que ainda não estão presentes na tabela de destino. Qualquer nome de campo comum entre o conjunto de dados de origem e a tabela de destino é usado para descobrir como associar os novos registros de entrada. Isso costuma ser chamado de "união natural". Uma operação de união da Qlik pode fazer com que a tabela de destino resultante tenha mais ou menos registros do que quando começou, dependendo da exclusividade da associação de união e do tipo de união empregado.
Tipos de junções
Existem quatro tipos de uniões:
União esquerda
Junção interna
União externa
União direita
Exemplos de conjuntos de resultados de diferentes tipos de operações de união
União esquerda
As uniões esquerdas são o tipo de união mais comum. Por exemplo, se você tivesse um conjunto de dados de transação e quisesse combiná-lo com um conjunto de dados de referência, normalmente usaria um Left Join. Você carregaria a tabela de transações primeiro e, em seguida, carregaria o conjunto de dados de referência enquanto o juntasse por meio de um prefixo Left Join à tabela de transações já carregada. Left Join manteria todas as transações como estão e adicionaria os campos de dados de referência suplementares nos quais uma correspondência fosse encontrada.
União esquerda
Junção interna
Quando houver dois conjuntos de dados nos quais você apenas se preocupa com os resultados em que há uma associação correspondente, considere usar Inner Join. Isso eliminará todos os registros dos dados de origem carregados e da tabela de destino se nenhuma correspondência for encontrada. Como resultado, isso pode deixar sua tabela de destino com menos registros do que antes da operação de união.
Junção interna
Junção externa (padrão)
Quando você precisar manter os registros de destino e todos os registros de entrada, use Outer Join. Onde nenhuma correspondência for encontrada, cada conjunto de registros ainda será mantido, enquanto os campos no lado oposto da união permanecerão não preenchidos (nulos).
Se a palavra-chave "type" for omitida, o tipo de união padrão será uma união externa.
União externa
União direita
Esse tipo de união mantém todos os registros prestes a serem carregados, ao mesmo tempo em que reduz os registros na tabela direcionada pela união para somente os registros em que há uma correspondência de união nos registros de entrada. Esse é um tipo de união de nicho que às vezes é usado como meio de reduzir uma tabela de registros já pré-carregada para um subconjunto necessário.
União direita
Junção cruzada
Nota informativaSe não houver nomes de campos em comum entre a origem e o destino de uma operação de união, a união resultará em um produto cartesiano de todas as linhas: isso é chamado de "união cruzada".
Exemplo de conjunto de resultados de uma operação de "união cruzada"
Sintaxe e argumentos
Sintaxe:
[inner | outer | left | right ]Join[ (tablename )
]( loadstatement | selectstatement )
Argumentos
Argumento
Descrição
tablename
A tabela nomeada a ser comparada com a tabela carregada.
loadstatementou selectstatement
O comando LOAD ou SELECT da tabela carregada.
Tópicos relacionados
Estes tópicos podem ajudar você a trabalhar com essa função:
O prefixo de carregamento Keep é semelhante ao prefixo Join, mas não combina os conjuntos de dados de origem e de destino. Em vez disso, ele apara cada conjunto de dados de acordo com o tipo de operação adotada (interna, externa, esquerda ou direita).
Exemplos de script de carregamento - Junção esquerda
Uma junção esquerda mantém todos os registros da sua tabela principal (destino) e adiciona dados correspondentes de uma segunda tabela (origem). Se não houver correspondência na origem, o registro da tabela principal ainda aparecerá, mas com campos vazios da tabela de origem.
Adicione o script de exemplo ao seu aplicativo e execute-o. Para ver o resultado, adicione os campos listados na coluna de resultados a uma pasta no seu aplicativo.
Script de carregamento
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Left Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Este exemplo demonstra a saída de Junção esquerda em que somente os valores presentes na primeira tabela (esquerda) são unidos.
Visão geral
Suponha que você tenha uma lista de pedidos, mas nem todos os pedidos têm um registro de cliente correspondente.
Script de carregamento
Orders:
Load * inline [
OrderID, CustomerID, Amount
1, 101, 200
2, 102, 150
3, 104, 400
];
Customers:
Left Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Resultados
Se você expandir a janela de visualização no Visualizador do modelo de dados, verá uma parte do conjunto completo de resultados organizada em uma tabela:
Visualização da tabela no visualizador do modelo de dados
OrderID
CustomerID
Valor
Nome
1
101
200
Alice
2
102
150
Bob
3
104
400
-
OrderID 1 e 2 têm clientes correspondentes. OrderID 3 não tem um cliente correspondente, então Name está em branco.
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.
O script de carregamento contém:
Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada Changes. Ele inclui um campo de chave de ID de status.
Um segundo conjunto de dados que representa estados de alterações, que é carregado e combinado com os registros de alterações originais por meio de sua união com um prefixo de carregamento Join esquerdo.
Essa união esquerda garante que os registros de alterações permaneçam intactos ao adicionar atributos de status em que uma correspondência nos registros de status de entrada é encontrada com base em um ID de status comum.
Script de carregamento
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Status:
Left Join (Changes)
Load * inline [
Status ID Status Sub Status
1 Open Not Started
2 Open Started
3 Closed Completed
4 Closed Cancelled
5 Closed Obsolete
] (delimiter is '\t');
Resultados
Abra o Visualizador do modelo de dados e observe a forma do modelo de dados. Somente uma tabela desnormalizada está presente. É uma combinação de todos os registros de alterações originais, com os atributos de status correspondentes unidos a cada registro de alterações.
Modelo de dados interno resultante
Alterações
ID da alteração
ID de status
Data de início programada
Data de término programada
Impacto nos negócios
Status
Sub status
Se você expandir a janela de visualização no Visualizador do modelo de dados, verá uma parte desse conjunto completo de resultados organizada em uma tabela:
Visualização da tabela Changes no visualizador do modelo de dados
ID da alteração
ID de status
Data de início programada
Data de término programada
Impacto nos negócios
Status
Sub status
10030
4
19/01/2022
23/02/2022
Nenhum
Fechado
Cancelado
10031
3
20/01/2022
25/03/2022
Baixa
Fechado
Concluído
10015
3
04/01/2022
15/02/2022
Baixa
Fechado
Concluído
10103
1
02/04/2022
29/05/2022
Médio
Abrir
Não iniciado
10116
1
15/04/2022
24/04/2022
Nenhum
Abrir
Não iniciado
10134
1
03/05/2022
08/07/2022
Baixa
Abrir
Não iniciado
10264
1
10/09/2022
17/10/2022
Médio
Abrir
Não iniciado
10040
1
29/01/2022
22/04/2022
Nenhum
Abrir
Não iniciado
10323
1
08/11/2022
26/11/2022
Alto
Abrir
Não iniciado
10187
2
25/06/2022
24/08/2022
Baixa
Abrir
Iniciado
10185
2
23/06/2022
08/09/2022
Nenhum
Abrir
Iniciado
10220
2
28/07/2022
06/09/2022
Nenhum
Abrir
Iniciado
10326
2
11/11/2022
05/12/2022
Nenhum
Abrir
Iniciado
10138
2
07/05/2022
03/08/2022
Nenhum
Abrir
Iniciado
10334
2
19/11/2022
06/02/2023
Baixa
Abrir
Iniciado
Como a quinta linha da tabela Status (ID do status: '5', Status: 'Fechado', Substatus: 'Obsoleto') não corresponde a nenhum dos registros da tabela Alterações, as informações nessa linha não aparecem no conjunto de resultados acima.
Retorne ao Editor de carregamento de dados. Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão: Status.
Adicione esta medida:
=Count([Change ID])
Agora, você pode inspecionar o número de alterações por status.
Tabela de resultados
Status
=Count([Change ID])
Abrir
12
Fechado
3
Exemplos de script de carregamento - Junção interna
Uma junção interna mantém apenas os registros que existem em ambas as tabelas (com base nos valores de campo correspondentes).
Script de carregamento
Adicione o script de exemplo ao seu aplicativo e execute-o. Para ver o resultado, adicione os campos listados na coluna de resultados a uma pasta no seu aplicativo.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Inner Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Se você expandir a janela de pré-visualização no Visualizador do modelo de dados, verá uma parte do conjunto completo de resultados organizada em uma tabela:
Visualização da tabela no visualizador do modelo de dados
OrderID
Amount
ShipDate
2
150
2022-05-01
3
400
2022-05-02
Apenas OrderID 2 e 3 aparecem, porque existem em ambas as tabelas.
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.
O script de carregamento contém:
Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada Changes.
Um segundo conjunto de dados que representa os registros de alterações gerados no sistema de origem JIRA. Esse é carregado e combinado com os registros originais por meio de sua união com um prefixo de carregamento Inner Join.
Essa Inner Join garante que apenas os cinco registros de alterações encontrados em ambos os conjuntos de dados sejam mantidos.
Script de carregamento
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
JIRA_changes:
Inner Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10000 JIRA
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
20000 TFS
] (delimiter is '\t');
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
Source System
Change ID
Business Impact
Agora, você pode inspecionar os cinco registros resultantes. A tabela resultante de um Inner Join incluirá apenas registros com informações correspondentes em ambos os conjuntos de dados.
Tabela de resultados
Sistema de origem
ID da alteração
Impacto nos negócios
JIRA
10030
Nenhum
JIRA
10134
Baixa
JIRA
10220
Nenhum
JIRA
10323
Alta
JIRA
10334
Baixa
Exemplos de script de carregamento - Junção externa
Uma junção externa mantém todos os registros de ambas as tabelas. Onde não há correspondência, os campos são deixados em branco.
Script de carregamento
Adicione o script de exemplo ao seu aplicativo e execute-o. Para ver o resultado, adicione os campos listados na coluna de resultados a uma pasta no seu aplicativo.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Outer Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Neste exemplo, as duas tabelas, Table1 e Table2, são mescladas em uma única tabela rotulada como Table1. Em casos como este, o prefixo outer é frequentemente usado para unir várias tabelas em uma única tabela para realizar agregações sobre os valores de uma única tabela.
Visão geral
Você deseja uma lista completa de todos os clientes e pedidos, mesmo que alguns clientes não tenham pedidos e alguns pedidos não tenham um registro de cliente.
Script de carregamento
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];
Customers:
Outer Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Resultados
Se você expandir a janela de visualização no Visualizador do modelo de dados, verá uma parte desse conjunto completo de resultados organizada em uma tabela:
Visualização da tabela no visualizador do modelo de dados
OrderID
CustomerID
Name
1
101
Alice
2
102
Bob
3
104
-
-
103
Carol
OrderID 3 não tem cliente correspondente (Name em branco).
CustomerID 103 (Carol) não tem pedido correspondente (OrderID em branco).
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.
O script de carregamento contém:
Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada Changes.
Um segundo conjunto de dados que representa os registros de alterações gerados no sistema de origem JIRA, que é carregado e combinado com os registros originais por meio de sua união com um prefixo de carregamento Outer Join.
Isso garante que todos os registros de alterações sobrepostos de ambos os conjuntos de dados sejam mantidos.
Script de carregamento
// 8 Change records
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
] (delimiter is '\t');
// 6 Change records
JIRA_changes:
Outer Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10030 JIRA
10323 JIRA
10134 JIRA
10334 JIRA
10220 JIRA
10597 JIRA
] (delimiter is '\t');
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
Source System
Change ID
Business Impact
Agora, você pode inspecionar os 10 registros resultantes.
Tabela de resultados
Sistema de origem
ID da alteração
Impacto nos negócios
JIRA
10030
Nenhum
JIRA
10134
Baixa
JIRA
10220
Nenhum
JIRA
10323
-
JIRA
10334
Baixa
JIRA
10597
-
-
10015
Baixa
-
10031
Baixa
-
10040
Nenhum
-
10138
Nenhum
Exemplos de script de carregamento - Junção direita
Uma junção direita mantém todos os registros da tabela de origem e adiciona informações correspondentes da tabela de destino. Se a tabela de destino não tiver correspondência, os campos dela ficarão em branco.
Script de carregamento
Adicione o script de exemplo ao seu aplicativo e execute-o. Para ver o resultado, adicione os campos listados na coluna de resultados a uma pasta no seu aplicativo.
Table1:
Load * inline [
Column1, Column2
A, B
1, aa
2, cc
3, ee ];
Table2:
Right Join Load * inline [
Column1, Column3
A, C
1, xx
4, yy ];
Este exemplo demonstra a saída de Junção direita, em que somente os valores presentes na segunda tabela (direita) são unidos.
Visão geral
Sua tabela de origem é uma lista de clientes; você quer todos os clientes, mais quaisquer pedidos correspondentes.
Script de carregamento
Orders:
Load * inline [
OrderID, CustomerID
1, 101
2, 102
3, 104
];
Customers:
Right Join (Orders)
Load * inline [
CustomerID, Name
101, Alice
102, Bob
103, Carol
];
Resultados
Se você expandir a janela de visualização no Visualizador do modelo de dados, verá uma parte desse conjunto completo de resultados organizada em uma tabela:
Visualização da tabela no visualizador do modelo de dados
CustomerID
Name
OrderID
101
Alice
1
102
Bob
2
103
Carol
-
Todos os clientes aparecem. Carol não tem pedidos (OrderID em branco).
Visão geral
Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova seção.
O script de carregamento contém:
Um conjunto de dados que representa registros de alterações, que é carregado em uma tabela denominada Changes.
Um segundo conjunto de dados representando registros de alterações originados do sistema de origem Teamwork. Isso é carregado e combinado com os registros originais, juntando-o a um prefixo de carregamento Right Join.
Isso garante que somente os registros de alterações Teamwork sejam mantidos, sem perder nenhum registro Teamwork caso a tabela de destino não tenha um Change ID correspondente.
Script de carregamento
Changes:
Load * inline [
Change ID Status ID Scheduled Start Date Scheduled End Date Business Impact
10030 4 19/01/2022 23/02/2022 None
10015 3 04/01/2022 15/02/2022 Low
10103 1 02/04/2022 29/05/2022 Medium
10185 2 23/06/2022 08/09/2022 None
10323 1 08/11/2022 26/11/2022 High
10326 2 11/11/2022 05/12/2022 None
10138 2 07/05/2022 03/08/2022 None
10031 3 20/01/2022 25/03/2022 Low
10040 1 29/01/2022 22/04/2022 None
10134 1 03/05/2022 08/07/2022 Low
10334 2 19/11/2022 06/02/2023 Low
10220 2 28/07/2022 06/09/2022 None
10264 1 10/09/2022 17/10/2022 Medium
10116 1 15/04/2022 24/04/2022 None
10187 2 25/06/2022 24/08/2022 Low
] (delimiter is '\t');
Teamwork_changes:
Right Join (Changes)
Load
[Ticket ID] AS [Change ID],
[Source System]
inline
[
Ticket ID Source System
10040 Teamwork
10015 Teamwork
10103 Teamwork
10031 Teamwork
50231 Teamwork
] (delimiter is '\t');
Resultados
Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:
Source System
Change ID
Business Impact
Agora, você pode inspecionar os cinco registros resultantes.
Tabela de resultados
Sistema de origem
ID da alteração
Impacto nos negócios
Trabalho em equipe
10015
Baixa
Trabalho em equipe
10031
Baixa
Trabalho em equipe
10040
Nenhum
Trabalho em equipe
10103
Médio
Trabalho em equipe
50231
-
Solução de problemas - Junção cruzada
Visão geral
Se você unir duas tabelas sem nomes de campo correspondentes, cada linha da primeira tabela será combinada com cada linha da segunda — potencialmente produzindo um grande número de registros (um produto cartesiano) e levando a associações de dados inesperadas.
Se você expandir a janela de visualização no Visualizador do modelo de dados, verá uma parte desse conjunto completo de resultados organizada em uma tabela:
Visualização da tabela no visualizador do modelo de dados
A_ID
ValueA
B_ID
ValueB
1
foo
10
baz
1
foo
11
qux
2
bar
10
baz
2
bar
11
qux
Cada A_ID é emparelhado com cada B_ID (total de 4 linhas).
Nota de dicaSempre verifique se os nomes dos seus campos correspondem conforme o esperado antes de executar uma junção.