Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
AndersonOberdan
Contributor II
Contributor II

Filtrando Dados na carga QVD (Where)

Bom dia pessoal

Estou fazendo a leitura de um arquivo QVD que possui cerca de 50 milhões de registros. Se eu fizer a leitura "simples" ela acontece super rápido (menos de 1 minuto) porém quando uso a restrição "Where" para deixar de carregar os registros que não preciso a carga demora mais de 5 minutos. 

Obviamente que isto deve acontecer porque o QVD não deve ser Indexado. Porém existe alguma forma de contornar isso?

Abraço a todos!

Labels (1)
  • Other

1 Solution

Accepted Solutions
fernando_tonial
Partner - Specialist
Partner - Specialist

Olá Anderson,

Na grande maiorias das cláusulas Where a leitura do QVD deixa de ser otimizada, para que continuem otimizada você pode utilizar o comando Exists(), com este comando normalmente a carga permanece otimizada.

Faça o teste por ai.

Don't Worry, be Qlik.

Tonial.

Don't Worry, be Qlik.

View solution in original post

8 Replies
felipedl
Partner - Specialist III
Partner - Specialist III

Olá Anderson,

Isso é uma questão de como o Qlik trata a carga, como não são feitos filtros ou cálculos durante a carga do QVD, ele virá otimizado, sendo mais rápido.

Com a cláusula where irá deixar de ter essa performance otimizada, não sendo a questão de indexação.

O que você pode realizar é guardar todos os dados uma vez (processo de extração), depois realizar a transformação dos dados (cálculos e afins) e depois carregar os dados tratados para o aplicativo final.

Em cada etapa intermediária: Extração -> Transformação -> Aplicativo, serão salvos os QVDs, para que o aplicativo final apenas leia os arquivos transformados, assim melhorando a performance já que não é realizado nehum filtro ou cálculo.

Felipe.

fernando_tonial
Partner - Specialist
Partner - Specialist

Olá Anderson,

Na grande maiorias das cláusulas Where a leitura do QVD deixa de ser otimizada, para que continuem otimizada você pode utilizar o comando Exists(), com este comando normalmente a carga permanece otimizada.

Faça o teste por ai.

Don't Worry, be Qlik.

Tonial.

Don't Worry, be Qlik.
Marcio_Campestrini
Specialist
Specialist

Olá Anderson

Lembrando que o Exists deve ser simples, do tipo Exists(Campo). Outro exists não vai gerar leitura otimizada.

Para isso, crie anteriormente uma tabela de restrição.

Restricao:

Load * Inline [

Empresa

1 ];

Dados:

Load * From <seu arquivo>.qvd (qvd) Where Exists Empresa;

Drop table Restricao;

Márcio Rodrigo Campestrini
AndersonOberdan
Contributor II
Contributor II
Author

Boa tarde Márcio

Entedi. Porém eu obviamente posso usar também "Not Exists()" ?

Marcio_Campestrini
Specialist
Specialist

Anderson, eu acho que não funciona com o not exists...

On Fri, Aug 18, 2017 at 3:44 PM Anderson Oberdan <qcwebmaster@qlikview.com>

Márcio Rodrigo Campestrini
Marcio_Campestrini
Specialist
Specialist

O problema foi resolvido? Se sim, marque as respostas úteis/correta para encerrar o tópico e ajudar a manter a comunidade organizada.

Márcio Rodrigo Campestrini
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Para apoio;

Referência (Tópicos 2.3 e 2.4): Manual do usu&amp;amp;aacute;rio | Como criar e gerir minhas perguntas?

Abraço.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti
AndersonOberdan
Contributor II
Contributor II
Author

Desculpem estava sem tempo pra testar, porém hoje verifiquei que as respostas do Márcio e do Fernando ajudaram a resolver meu problema. 

Fiz a carga da primeira tabela apenas com a relação de empresas que preciso buscar os dados. E nas demais cargas (movimento) usei a restrição "Where Exists" e foi bem mais rápido do que a busca textual "Where Empresa <> 'XYZ'" como estava fazendo antes.

Obrigado!