Fala pessoal, beleza?

 

Acredito que muitos aqui já elaboraram um belíssimo código seguinte todos a maioria das melhores práticas em script/modelagem e precisaram concatenar (Concatenate) duas ou mais tabelas (fatos ou não), porém essa concatenação esta demorando muito tempo para ocorrer. Já passaram por isso?

Esse artigo explicará como realizar a concatenação de tabelas mantendo uma leitura otimizada. Vamos la?

 

 

 

Lembram o que é uma leitura otimizada? Eu falei disso neste post: Melhores Práticas – QVD Optimized.

 

Em resumo, um QVD mantém a leitura otimizada somente quando realizamos essas ações em sua leitura:

  • Renomear campos
  • DISTINCT
  • Omitir Campos (Omit)
  • Where Exists Simples

 

 

IMPORTANTE:  A leitura otimizada é realizada apenas na leitura de um QVD, esqueça o LOAD RESIDENT.

 

 

O que é Concatenar


O conceito de concatenar é um termo utilizado para unir duas coisas. Em nosso caso "coisa" significa tabela, ou seja, unir duas tabelas.Para entender melhor como realmente o concatenar funciona, vamos a um exemplo:

Exemplo

Tenho duas tabelas: Vendas e População

Tabela Vendas

Tabela: População

Agora vou concatenar as duas tabelas:

vendas+populacao



Note que basicamente uma tabela foi colocada abaixo da outra. Esse é o resultado quando realizamos uma concatenação das tabelas.


OBSERVAÇÃO: As células em branco ficarão com o valor nulo no qlikview.



 

A sintaxe

 

Entendemos o resultado de uma concatenação de tabelas, mas como deve ser a sintaxe para fazer isso?Basicamente o comando Concatenate deve ser utilizado antes do LOAD de uma tabela. Vamos usar o exemplo das tabelas de Vendas e População para aprender:

Exemplo01


Desta forma, o QlikView vai interpretar que a tabela População vai concatenar os seus dados com a tabela Vendas, pois o script de leitura da tabela Vendas esta logo acima da tabela População. Caso a concatenação que deseja fazer não seja com a tabela acima, você pode simplesmente criar uma referência no Concatenate, dessa forma:


Exemplo02


OBSERVAÇÃO: Como sabemos a concatenação resultará em apenas uma tabela, desta forma o nome da tabela resultante será a tabela que receberá os dados da outra, em nosso exemplo a tabela final ficará com o nome de Vendas.Beleza! Agora eu entendi o que é Concatenar, mas como faze-la de forma otimizada?

Manter a leitura otimizada


As formas de Concatenar mantendo a leitura otimiza são:

  • AutoConcatenate
  • Mantendo os campos existentes e adicionando (escadinha)

 

AutoConcatenate

 

 

O AutoConcatenate é quando o QlikView identifica duas ou mais tabelas que possuem, exatamente, as mesmas colunas e faz a concatenação automática delas, ou seja, você não precisa utilizar o comando Concatenate.Veja a imagem para entender melhor


Exemplo03


Todas as tabelas possuem as mesmas colunas, são elas: A, B, C, D, E e F. Se carregarmos essas cinco tabelas sem utilizar o Concatenate, o QlikView utilizará o conceito de AutoConcatenate e concatenará as cinco tabelas de maneira otimizada.Veja que o código esta sem o comando Concatenate:

Exemplo03-01



Veja a execução do script mantendo a leitura otimizada:Exemplo03-02



Resultado das cinco tabelas concatenadas:


Exemplo03-03


PS: Lembrem-se que o nome que a tabela concatenada irá assumir é o nome da primeira tabela que foi carregada, no exemplo: Tabela 1.Yuri, essa eu já sabia! facin!!




Mantendo os campos existentes e adicionando


Manter os campos existentes e adicionando? Ahn?Esse caso é o mais interessante do comportamento do QlikView, e eu gosto de chama-lo de escadinha, pois tabelas que possuem alguns campos em comum podem sim fazer a concatenação de maneira otimizada.Vamos ao exemplo e depois explico melhor!

Exemplo04-01

PS: Enxergaram a escadinha? rsrs

Vamos entender

  • A minha primeira tabela possui as colunas A e B
  • A segunda tabela precisa conter as mesmas colunas para poder adicionar outras, no caso precisa conter as colunas A e B para adicionar a coluna C.
  • A terceira tabela precisa conter todos os campos que a tabela resultante (Concatenação da Tabela 1 com a Tabela 2) possui que são as colunas A, B e C (A coluna C originou na concatenação da Tabela 2) para poder adicionar a coluna D.
  • A quarta tabela precisa conter todos os campos que a tabela resultante (Concatenação da Tabela 1 com a Tabela 2 e a Tabela 3) possui que são as colunas A, B, C e D (A coluna C originou na concatenação da Tabela 2 e a coluna D originou na concatenação com a Tabela 3) para poder adicionar a coluna E.
  • E assim vai...... rsrs !!

 

Nesta caso o código precisa utilizar o comando Concatenate, veja como ficou:

Exemplo04-02

 

Veja a execução do script mantendo a leitura otimizada:

 

Exemplo04-03

 

Resultado das cinco tabelas concatenadas:

 

Exemplo03-03

 

Pô Yuri, mas nem sempre vamos ter tabelas no modelo de escadinha. Ajuda aí!! (rsrsrs)

Vamos para um exemplo mais prático

 

Cenário Real

Imaginem que temos que concatenar duas tabelas, Tabela 1 e Tabela 2, sendo que:

Tabela 1 possui as colunas: A, B, C e D.

Tabela 2 possui as colunas: A, B, D, F e G

 

Pensando Alto: As duas tabelas possuem as colunas A, B e D, porém a tabela 2 não possui a coluna C e ainda possui as colunas F e G para adicionar... é... já era a escadinha, exemplo deu certo! rsrs

 

Vamos lá!

 

Primeiro passo

Carregar as duas tabelas

Exemplo05-02

 

Segundo passo

Criar a coluna C na tabela 2.

Para criar esse registro de maneira otimizada, podemos criar uma tabela sem registro com um valor nulo sendo atribuído com o nome de C.

Exemplo05-03

 

Terceiro passo

Gerar um novo QVD da Tabela 2 agora possuindo as colunas A, B, C, D, F e G.

Exemplo05-04

 

Quarto passo

Carregar o novo QVD da Tabela 2 e Concatenar com a Tabela 1.

Exemplo05-05

 

Entendendo

Exemplo05-07

 

Depois de entender como é o comportamento do QlikView na concatenatação de tabelas, o "pulo do gato" foi adicionar a coluna C na Tabela 2 através de um AutoGenerate.

 

Veja a execução do script mantendo a leitura otimizada:

Exemplo05-08

 

Exemplo para Download

A aplicação de exemplo esta disponível para download aqui!

 

 

Conclusão

Isso pode parecer bobo e talvez desnecessário, mas te garanto que em projetos grandes essas manhas vão ajudar bastante para manter a performance de tempo de recarga das aplicações.

E não poderia deixar de falar que é sempre importante aprendermos sobre melhores práticas e entendermos o comportamento do QlikView para determinadas ações.

 

 

 

É isso pessoal!

Até a próxima semana!!