Ir para conteúdo principal

Combinando tabelas com Join e Keep

NESTA PÁGINA

Combinando tabelas com Join e Keep

A junção é uma operação que usa duas tabelas para combiná-las em uma. Os registros da tabela resultante são combinações dos registros das tabelas originais, de forma que, geralmente, os dois registros que contribuem para qualquer combinação na tabela resultante tenham um valor comum para um ou vários campos comuns, a assim chamada junção natural. No Qlik Sense, as junções podem ser feitas no script, produzindo tabelas lógicas.

É possível unir tabelas que já estão no script. Assim, a lógica do Qlik Sense não verá as tabelas separadas, e sim o resultado da junção, que é uma única tabela interna. Em algumas situações isso é necessário, mas existem desvantagens:

  • Normalmente, as tabelas carregadas ficam maiores e o Qlik Sense trabalha mais lentamente.
  • Algumas informações podem ser perdidas: a frequência (número de registros) na tabela original pode não mais estar disponível.

A funcionalidade Keep, que tem o efeito de reduzir uma ou ambas as tabelas à interseção dos dados da tabela antes de serem armazenadas no Qlik Sense, foi projetada para reduzir o número de casos que exigem o uso de junções explícitas.

Nota: Nesta documentação, o termo junção é geralmente utilizado para junções feitas antes da criação das tabelas internas. Entretanto, a associação, feita após a criação das tabelas internas, também é basicamente uma junção.

Join

A forma mais simples de fazer uma junção é usar o prefixo Join no script, que une a tabela interna a outra tabela nomeada ou à última tabela criada anteriormente. A junção será externa, criando todas as combinações possíveis de valores das duas tabelas.

Example:  

LOAD a, b, c from table1.csv; join LOAD a, d from table2.csv;

A tabela interna resultante tem os campos a, b, c e d. O número de registros é diferente dependendo dos valores de campo das duas tabelas.

Nota: Os nomes dos campos a serem unidos devem ser exatamente os mesmos. O número de campos a serem unidos é arbitrário. Normalmente, as tabelas devem ter um ou alguns campos em comum. Nenhum campo em comum gerará o produto cartesiano das tabelas. Também é possível ter todos os campos em comum, mas isso normalmente não faz sentido. A menos que o nome de uma tabela carregada anteriormente seja especificado no comando Join o prefixo Join utilizará a última tabela criada anteriormente. Dessa forma, a ordem dos dois comandos não é arbitrária.

Para obter mais informações, consulte Join.

Usando Join

O prefixo Join explícito na linguagem de script do Qlik Sense executa uma junção completa das duas tabelas. O resultado é uma tabela. Tais uniões geralmente podem resultar em tabelas muito grandes.

Faça o seguinte:

  1. Abra o aplicativo Tutorial de uso de scripts avançado.
  2. Adicione uma nova seção de script no Editor de carregamento de dados.
  3. Nomeie a seção como Transactions.
  4. Em AttachedFiles no menu direito, clique em Selecionar dados.

  5. Carregue e, em seguida, selecione Transactions.csv.
  6. Dica: Em Nomes de campos, certifique-se de que Nomes de campos incorporados esteja selecionado para incluir os nomes de campos da tabela ao carregar os dados.
  7. Na janela Selecionar dados de, clique em Inserir script.
  8. Carregue e, em seguida, selecione Salesman.xlsx.
  9. Na janela Selecionar dados de, clique em Inserir script.
  10. Seu script deve ter a seguinte aparência:

    LOAD "Transaction ID", "Salesman ID", Product, "Serial No", "ID Customer", "List Price", "Gross Margin" FROM [lib://AttachedFiles/Transactions.csv] (txt, codepage is 28591, embedded labels, delimiter is ',', msq); LOAD "Salesman ID", Salesman, "Distributor ID" FROM [lib://AttachedFiles/Salesman.xlsx] (ooxml, embedded labels, table is Salesman);

  11. Clique em Carregar dados.
  12. Abra o Visualizador do modelo de dados. O modelo de dados tem a seguinte aparência:
  13. Modelo de dados: Tabelas Transactions, Salesman e Product
    Data model, Transactions, Salesman, and Product tables.

No entanto, ter as tabelas Transactions e Salesman separadas pode não ser o resultado necessário. Pode ser melhor juntar as duas tabelas.

Faça o seguinte:

  1. Para definir um nome para a tabela unida, adicione a seguinte linha acima do primeiro comando LOAD:
  2. Transactions:

  3. Para unir as tabelas Transactions e Salesman, adicione a seguinte linha acima do segundo comando LOAD:
  4. Join(Transactions)

    Seu script deve ter a seguinte aparência:

    Transactions:
    LOAD
        "Transaction ID",
        "Salesman ID",
        Product,
        "Serial No",
        "ID Customer",
        "List Price",
        "Gross Margin"
    FROM [lib://AttachedFiles/Transactions.csv]
    (txt, codepage is 28591, embedded labels, delimiter is ',', msq);
    
    Join(Transactions)
    LOAD
        "Salesman ID",
        Salesman,
        "Distributor ID"
    FROM [lib://AttachedFiles/Salesman.xlsx]
    (ooxml, embedded labels, table is Salesman);

  5. Clique em Carregar dados.
  6. Abra o Visualizador do modelo de dados. O modelo de dados tem a seguinte aparência:
  7. Modelo de dados: Tabelas Transactions e Product
    Data model following Join.

    Todos os campos das tabelas Transactions e Salesman agora estão combinados em uma única tabela Transactions.

Nota: Para saber mais sobre quando usar Join, consulte essas postagens de blog no Qlik Community: To Join or not to Join (Unir ou não unir), Mapping as an Alternative to Joining (Mapeamento como uma alternativa para a união). Os comportamentos são discutidos no contexto do QlikView. No entanto, a lógica se aplica igualmente ao Qlik Sense.

Keep

Uma das principais características do Qlik Sense é sua capacidade de fazer associações entre as tabelas, em vez de uni-las, reduzindo bastante o espaço usado na memória, aumentando a velocidade e oferecendo enorme flexibilidade. A funcionalidade Keep foi projetada para reduzir o número de casos em que as junções explícitas precisam ser usadas.

O prefixo Keep entre dois comandos LOAD ou SELECT reduz uma ou ambas as tabelas à interseção dos dados dos dados da tabela antes de serem armazenados no Qlik Sense. O prefixo Keep sempre deve ser precedido de uma das palavras-chave Inner, Left ou Right. A seleção de registros das tabelas é feita da mesma maneira que em uma junção correspondente. Entretanto, as duas tabelas não são unidas e serão armazenadas no Qlik Sense como duas tabelas nomeadas separadas.

Para obter mais informações, consulte Keep.

Inner

Os prefixos Join e Keep no script de carga de dados podem ser precedidos pelo prefixo Inner.

Se for usado antes de Join, especificará que a junção das duas tabelas deve ser interna. A tabela resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo de ambos os lados.

Se usado antes de Keep, especificará que as duas tabelas deverão ser reduzidas à sua interseção comum antes de serem armazenadas no Qlik Sense.

Example:  

Nestes exemplos, usamos as tabelas de origem Table1 e Table2.

Observe que esses são apenas exemplos. Não há exercícios a serem concluídos no Qlik Sense.

Table 1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Inner Join

Primeiro, realizamos um Inner Join nas tabelas, resultando em um VTable, contendo apenas uma linha, o único registro existente em ambas as tabelas, com dados combinados de ambas as tabelas.

VTable: SELECT * from Table1; inner join SELECT * from Table2;

VTable
A B C
1 aa xx

Inner Keep

Se realizarmos um Inner Keep, ainda teremos duas tabelas. As duas tabelas serão associadas através do campo comum A.

VTab1: SELECT * from Table1; VTab2: inner keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx

Para obter mais informações, consulte Inner.

Left

Os prefixos Join e Keep no script de carga de dados podem ser precedidos pelo prefixo left.

Se for usado antes de Join, ele especificará que a junção das duas tabelas deve ser à esquerda. A tabela resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo da primeira tabela.

Se usado antes de Keep, especificará que a segunda tabela deverá ser reduzida à sua interseção comum com a primeira tabela antes de ser armazenada no Qlik Sense.

Example:  

Nestes exemplos, usamos as tabelas de origem Table1 e Table2.

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Primeiro, um Left Join é realizado nas tabelas, resultando em um VTable, contendo todas as linhas da Table1, combinadas com os campos das linhas correspondentes na Table2.

VTable: SELECT * from Table1; left join SELECT * from Table2;

VTable
A B C
1 aa xx
2 cc -
3 ee -

Se realizarmos um Left Keep, ainda teremos duas tabelas. As duas tabelas serão associadas através do campo comum A.

VTab1: SELECT * from Table1; VTab2: left keep SELECT * from Table2;

VTab1
A B
1 aa
2 cc
3 ee
VTab2
A C
1 xx

Para obter mais informações, consulte Left.

Right

Os prefixos Join e Keep na linguagem de script do Qlik Sense podem ser precedidos pelo prefixo right.

Se for usado antes de Join, ele especificará que a junção das duas tabelas deve ser à direita. A tabela resultante contém apenas combinações entre as duas tabelas com um conjunto de dados completo da segunda tabela.

Se usado antes de Keep, especificará que a primeira tabela deverá ser reduzida à sua interseção comum com a segunda tabela antes de ser armazenada no Qlik Sense.

Example:  

Nestes exemplos, usamos as tabelas de origem Table1 e Table2.

Table1
A B
1 aa
2 cc
3 ee
Table2
A C
1 xx
4 yy

Primeiro, um Right Join é realizado nas tabelas, resultando em um VTable, contendo todas as linhas da Table2, combinadas com os campos das linhas correspondentes na Table1.

VTable: SELECT * from Table1; right join SELECT * from Table2;

VTable
A B C
1 aa xx
4 - yy

Se realizarmos um Right Keep, ainda teremos duas tabelas. As duas tabelas serão associadas através do campo comum A.

VTab1: SELECT * from Table1; VTab2: right keep SELECT * from Table2;

VTab1
A B
1 aa
VTab2
A C
1 xx
4 yy

Para obter mais informações, consulte Right.