Olá a todos!
Vamos continuar os nossos posts sobre o Qlik, mais especificamente sobre otimização no processamento de dados.
Alguns de nós já tivemos a "infeliz" experiência de um Group By que estoira a memória, certo? Ou de um Group By que demora algum looongo tempo ou nunca mais acaba...
Pois é, mas a verdade é que mesmo demore algum tempo a processar o resultado final é sempre bom, conseguimos diminuir a granularidade dos nossos dados e comprimir os nossos arquivos.
A nova descoberta é que podemos de alguma forma agilizar o uso desta cláusula.
Vamos a isto... com um caso prático:
Temos quatro tabelas diferentes, com as mesmas colunas (3 colunas) mas com o número de registos diferentes:
Qlik Script
//Step Único: Criar a tabela final com o Group By
F_VendasTotais_GroupBy:
NoConcatenate
LOAD
Country_COD,
District_COD,
Sum(Values) as Values
Resident F_VendasTotais
Group by
Country_COD,
District_COD;
Parece redundante, mas... Se fizermos um Order By antes de fazer o Group By "ajudamos" o Qlik a ter já a tabela ordenada para posteriormente agrupar.
Sim... parece redundante já que o Qlik, internamente, já deve ordernar a tabela antes de proceder ao agrupamento, mas a verdade é que fizemos alguns testes e de facto há impacto na redução do tempo (quando estamos a falar de muuuuuuitas linhas de registos).
Qlik Script
//Step 1: Criar uma tabela temporária ordenada
F_VendasTotais_Temp_Sorted:
NoConcatenate
LOAD
Country_COD,
District_COD,
Values
Resident F_VendasTotais
Order by
Country_COD,
District_COD;
//Step 2: Criar a tabela final com o Group By
F_VendasTotais_GroupBy:
NoConcatenate
LOAD
Country_COD,
District_COD,
Sum(Values) as Values
Resident F_VendasTotais_Temp_Sorted
Group by
Country_COD,
District_COD;
Bem... vamos aos resultados que obtivemos em termos de tempo de processamento (também aproveitámos para fazer a mesma experiência com uma tabela com mais colunas):
Com esta nossa experiência, chegamos aqui a duas conclusões:
Se "exponenciarmos" isso para milhões e milhões de registos... temos aqui uma boa solução para tentar agilizar o processo!
De qualquer maneira, o melhor caminho será sempre testar ambas as hipóteses... cada contexto é diferente e consoante o tipo de dados (numéricos ou não), número de elementos distintos e etc podemos obter diferentes resultados.
Deixem-nos saber dos vossos experimentos, enviem-nos os vossos resultados :)