Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
nicolett_yuri

Melhores Práticas QlikView - QVD Optimized

Pessoal, estarei postando diversos passos de melhores práticas em QlikView e gostaria que todos participassem seja com novos posts ou comentários. Acho que vai ficar bem legal!

Vamos lá!

Cargas QVD otimizadas são até 100 vezes mais rápidas do que as não otimizadas. Isso faz muita diferença no tempo de recarga e ainda mais diferença para o desempenho do seu servidor.

A razão para a grande diferença está relacionada ao algoritmo de compressão que o QlikView usa quando armazenamos dados para análise em memória. Arquivos QVD são armazenados em um formato que espelha a compressão utilizada na memória (que é por isso que os arquivos QVD são tão pequenas no disco) e durante uma carga otimizada os dados são enviados diretamente do disco para a memória no mesmo formato comprimido. Quando uma carga não-otimizada é realizada isso não acontece.

Então porque não fazer todas as cargas do QVD otimizado? O simples fato é que algumas operações requerem que os dados sejam descompactados, modificados e em seguida re-embalados. Apenas uma alteração nos dados fará com que uma carga não seja otimizada.

Alguns exemplos que farão com que a carga não seja otimizada:

- Adição de novos campos para a tabela

- Derivando novos valores a partir de um campo na QVD

- Recuperando um campo duas vezes

- Mais condições WHERE

- JOIN em uma tabela de memória

- Carregando dados em uma tabela de mapeamento (mapping load)

Alguns exemplos que farão com que a carga seja otimizada:

- Renomear campos

- LOAD DISTINCT

- Omitir Campos (Omit)

- Where Exists Simples

Quando criamos QVDs incrementais com quebra por mês, ou seja, um qvd por mês (Faturamento_201401.qvd, Faturamento_201402.qvd), na maioria das vezes, quando o cliente deseja restringir a quantidade de meses na aplicação, criamos uma variável e restringimos através de um WHERE MESANO >= $(v_MesAno_Limite), mas a dica aqui é utilizar o EXISTS Simples, ou seja, com um campo só. Vamos para um exemplo:

Quero exibir somente os dados de 2013 e 2014, desta forma realizamos a seguinte lógica:

1) Criar uma tabela (INLINE) com o mesmo nome da coluna da tabela que sofrerá redução dos anos e colocar os valores 2013 e 2014.

OBS: Isso vale para MêsAno, Datas, Produtos ou combinações de colunas.

Restrição:

LOAD * INLINE [

Faturamento.ANO

2014

2013

];

2) Quando realizar a leitura da tabela em que deseja fazer a restrição dos valores, basta realizar a leitura normalmente e adicionar um WHERE Exists para retornar somente os dados de 2014 e 2013.

Faturamento:

LOAD

    Faturamento.ANO,

    Faturamento.MES,

    Faturamento.DATA,

    Faturamento.EMPRESA,

    Faturamento.VALOR

FROM Faturamento_*.qvd (qvd)

WHERE

EXISTS(Faturamento.ANO);

DROP TABLE Restrição;

Repare que a leitura dos qvds manterá o QVD Optimized!

Fontes:

Manual QlikView

Optimized QVD Loads in Qlikview

Qlikview Notes: QVD Questions and Answers

5 Replies
pablolabbe
Luminary Alumni
Luminary Alumni

Importante ressaltar também que trabalhar com leituras otimizadas deve ser uma prática para projetos com grande volume de dados.

A diferença de tempo entre cargas otimizadas e não otimizadas quando lidamos com milhões de registros é muito grande. Podemos ler 1 milhão de registros por segundo se for leitura otimizada ou 10.000 registros por segundo se não for uma leitura otimizada. Se o volume de dados é grande e a janela de atualização é pequena, faz toda a diferença.

Quanto a leitura de tabela de mapeamento, tenho uma ressalva. Nas versões anteriores era preciso forçar uma leitura não otimizada incluindo uma clausula do tipo "where 1=1" para que a tabela de mapeamento fosse criada caso contrário ela ficava vazia, mas isto foi corrigido na 11.2 SR5 de acordo com a release notes da versão:

  bug number 63281  "Map ... using" does not work in optimized QVD Mode.

Abraço,

Pablo Labbe

nicolett_yuri
Author

Muito bom Pablo, você sabe me dizer se esse "BUG" também foi corrigido na utilização de QVD para sessão de acesso? No qual tínhamos que forçar um WHERE 1=1 para o QVD perder a leitura otimizada e assim funcionar para a construção do section access.

pablolabbe
Luminary Alumni
Luminary Alumni

Olá Yuri,

Desconheço esse problema. Só testando para confirmar.

tiagopazeto
Contributor III
Contributor III

Yuri, tudo bem?

Estava procurando algum post com dicas para melhorar a performance das cargas.

Muito bom, parabéns!

Abraços.

Tiago

nicolett_yuri
Author

Muito obrigado.

Estou escrevendo o segundo artigo deste tema