Skip to main content
Announcements
Global Transformation Awards! Applications are now open. Submit Entry
cancel
Showing results for 
Search instead for 
Did you mean: 
LucasIsidoro
Contributor III
Contributor III

Otimizar Carregamento de QVW

Pessoal, primeiramente bom dia! 

Hoje tenho um projeto que demora cerca de 5 horas para Recarregar. Um dos grandes motivos dessa demora é os dados passados. Nós carregamos dados desde 2014.

Eu não sou avançado, más penso que deveria existir alguma maneira para esses dados como são passados, simplesmente ficarem congelados, ao invés de toda execução carregar novamente tudo.

Alguém com experiência poderia me informar se existe essa possibilidade, ou a ferramenta sempre irá recarregar todos dados e tratar?

 

Obrigado desde já, fiquem com Deus.

20 Replies
ruzivao1980
Creator
Creator

Bom dia, vc pode estar separando a sua carga em varios arquivos QVDs, que são os arquivos de dados do Qlik, aqui eu separo por ano, no momento do select.

 

no inicio vc tem que dar um nome para o arquivo, ex:

Carga_2018:

SELECT.....

where data between '01/01/2018' and '12/31/2018';

store Carga_2018 into Carga_2018.qvd;
DROP Table Carga_2018;

 

no load vc vai varser um load para cada arquivo criado, juntando eles com o comando Concatenate, ex:

LOAD ........

FROM
$(vPasta)\Carga_2018.qvd

(qvd);

Concatenate

LOAD ........

FROM
$(vPasta)\Carga_2019.qvd

LucasIsidoro
Contributor III
Contributor III
Author

Primeiramente obrigado pela ajuda amigo.

Então, hoje o projeto já busca os dados em qvds, só que em arquivos parrudos, o qvd possui informação total. Vale a pena quebrar ele em anos, reduz algo? De toda forma eu teria que carregar todos dar concatenate e tratar né?

Gabriel_Fernandes
Contributor III
Contributor III

Bom dia,

não sei dizer com certeza se existe essa funcionalidade, mas acredito que não.

 

você poderia sumarizar a carga do QVD TOTAL, para seu QVW  PROJETO não ter tanto processamento.

ex:

Quero saber o total de vendas pra um cliente, em vez de carregar venda a venda, faço uma carga agrupando por cliente.

 

no momento em que é gerado o QVD total, faça uma resident da propria tabela e agrupe por cliente.

 

INFORMACAO_TOTAL:

LOAD

Cliente,

Data,

Vendas

FROM xxxxx;

 

INFORMACAO_AGRUPADA:

LOAD

Cliente,

SUM(Vendas) AS VENDAS

RESIDENT INFORMACAO_TOTAL

GROUP BY Clientes;

LucasIsidoro
Contributor III
Contributor III
Author

Primeiramente obrigado pela ajuda amigo.

O que complica é que o projeto utiliza essas informações para várias análises, então fica difícil fazer esse tipo de junção.

Eu tava pensando em propor uma solução mais ou menos assim:
- Ter um projeto que carregue as informações que sejam dos últimos 6 meses ou 12 meses diariamente.

- Ter um projeto que carregue todas informações disponíveis, finais de semana ou 1 vez por mês.

Seria uma forma de reduzir dados, porque temos groupBy que ta demorando quase 40 minutos, provavelmente pela quantidade massiva de dados.

O que acha?
Gabriel_Fernandes
Contributor III
Contributor III

Entendi,

Não sei se existiria uma opção melhor, mas no momento acho que é o que melhor atende.

 

nesse cenário você poderia aplicar a sugestão do Ruzivao1980, separar os QVD brutos por ano e ;

na opção 1 carregar o ultimo ano completo;

na opção 2 carregar todos os anos.

 

Mas antes, deixa eu te perguntar outra coisa, os calculos/tratativas no seu QVW PROJETO são todas analises do projeto? ou tem tratativas de dados? pois se há tratativas, você poderia migrar as tratativas pra QVW TOTAL e atualizar conforme as cargas incrementais.

Assim sua carga do projeto se limita apenas ao carregamento otimizado.

* Caso sejam cálculos voltados especificamento pro projeto, desconsidere.

 

 

 

LucasIsidoro
Contributor III
Contributor III
Author

É um projeto bem extenso, tem muitos cálculos utilizando os valores quebrados, ou com cálculos um pouco mais complexos.

Se eu fizer um Where na hora do From, Where "campo data"..... Funciona da mesma maneira?
Gabriel_Fernandes
Contributor III
Contributor III

Você pode criar um looping para carregar as tabelas que precisa.

seus qvd's salvos na pasta:

projeto 2015.qvd

projeto 2016.qvd

projeto 2017.qvd

projeto 2018.qvd

 

PROJETO ANTIGO 2014 - 2017

Crie uma variável na carga para determinar o ano atual :

vAno='2018'

--------------------------------------------------------------------------------------

FOR

AnoCarga = '2014' to $(vAno)-1

LOAD *
FROM
[Projeto $(AnoCarga).qvd]
(qvd);


NEXT

--------------------------------------------------------------------------------------

 

PROJETO NOVO 2017-2018 (12 MESES)

Se você pretende carregar determinado período de meses em vez de um ano fechado, experimente:

Criar uma variável na carga para determinar a data inicial :

vDataIni = Addmonths(Monthstart(today()),-12)       //vai calcular 12 meses antes de hoje

--------------------------------------------------------------------------------------

FOR

AnoCarga = $(vAno)-1 to $(vAno)

LOAD *
FROM
[Projeto $(AnoCarga).qvd]
(qvd)

WHERE Data >= $(vDataIni);


NEXT

--------------------------------------------------------------------------------------

 

Experimente assim.

LucasIsidoro
Contributor III
Contributor III
Author

Primeiramente obrigado pela ajuda amigo.

Vou ver a possibilidade de fazer algo similar a este.

No meu caso eu pensei em algo que viesse tudo, porém rodasse em todos fechamentos. E um que rodasse todos dias porém viesse o menor range de data possível, porém como a maioria das análises é feito baseado no passado, então teria que trazer entre 1 a 2 anos.

Gabriel_Fernandes
Contributor III
Contributor III

Entendi,

Então é só mudar assim:

--------------------------------------------------------------------------------

PROJETO ANTIGO 2014 - Atual (aqui vai carregar todos os qvd's da pasta):

---------------------------------------------------------------------------------

LOAD *
FROM
[Projeto *.qvd]
(qvd);

--------------------------------------------------------------------------------

PROJETO NOVO 2017-2018 (24 MESES,)

vDataIni = Addmonths(Monthstart(today()),-24)       //vai calcular 24 meses antes de hoje

vAnoIni = Year($(vDataIni)) // vai calcular o ano a 24 meses atrás.

* você pode alterar '-24' para a quantidade de meses de sua preferencia.

--------------------------------------------------------------------------------

 

FOR

AnoCarga = $(vAnoIni) to year(Today()) // Aqui define os anos que o QVW vai carregar, no caso 2017 e 2018.

LOAD *
FROM
[Projeto $(AnoCarga).qvd]
(qvd)

WHERE Data >= $(vDataIni); // aqui define a data inicial que o arquivo vai carregar dos QVD carregados, no caso 01/01/2017


NEXT

--------------------------------------------------------------------------------

o Data >= $(vDataIni) serve para limitar a carga de dados dentro de um ano,

o vAnoIni = Year($(vDataIni)) serve pra identificar o ano inicial que você precisa.

exemplo: estamos em 06/2019 então se você quer 24 meses, você precisa carregar de 06/2017 até 06/2019