Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Prezados amigos, boa tarde!
Mais uma vez preciso de ajuda!!! Recentemente implantamos o conceito de carga incremental dos dados onde estamos gerando um arquivo (qvd) diariamente somente com informações do dia. Com a alteração tivemos uma melhora de carga de 3 horas e meia, no entanto ao fazer o LOAD dos dados para o painel principal o mesmo está demorando muito para realizar a execução, passou de 3 minutos para 1 hora e meia.
Pesquisei um pouco na internet sobre recarga parcial e não achei viável pois muitos relataram problemas ao utilizar a funcionalidade, outra solução seria desabilitar a leitura dos LOGS do (qvd) o que iria melhorar a carga.
Gostaria de saber se alguém sabe como desabilitar a leitura dos LOGS, devo codificar algo ao salvar os qvds ou no arquivo LOAD? Ou é algo relacionado a configuração do servidor?
Att,
Brander Weten.
Boa tarde!
Vamos lá, vamos ver se eu entendi.
Você gera um QVD por dia, sempre com a informação somente do dia, certo?
Ai depois você lê todos esses arquivos QVDs de vários dias para formar a sua carga total, certo?
A lentidão está na leitura dos vários QVDs? Ou em outro momento?
Acredito que desabilitar a Leitura de LOGS não acarretará em super ganho assim, e no mais se era 3 minutos e agora é uma hora e meia, alguma coisa não está certo, isso é fato, portanto a leitura de LOGs foi habilitada e ai iniciou-se esse problema?
Brander, você começou o processo corretamente, fazendo carga incremental, porém ainda me resta uma dúvida: Quando você vai carregar esses QVDs diários, você faz alguma tratativa neles? A leitura de QVDs é extremamente rápida quando utilizamos a leitura otimizada deles.
Escrevi um pouco sobre isso nesse post http://community.qlik.com/groups/qlikview-brasil/blog/2014/04/15/melhores-pr%C3%A1ticas-qlikview--qv...
acho que vai te ajudar bastante!
Caso não seja isso, por favor detalhe mais seu processo para entendermos
Pode ser que estejamos falando da necessidade de um upgrade de hardware.
Junior,
Muito obrigado pela resposta, vamos as considerações:
Yuri,
Muito obrigado pela resposta. Não realizo nenhum tipo de tratativa na leitura dos qvds, não existem tratativas, somente a leitura pura do dado. Pelo que notei a demora ocorre ao realizar a leitura na tabela "LinkTable" que possui muitos registros. Ao ultrapassar os dez milhões a performance cai bastante.
Quando não possuía o recurso de carga incremental o LOAD era quase instantâneo, pois não existia a leitura de vários arquivos e sim a de um único arquivo com todos os dados.
Quero deixar bem claro que a quantidade de registros não alterou ao utilizar o modelo, o que foi alterado foi a quantidade de arquivos qvds e a leitura de cada um deles.
Att,
Brander Weten.
Bom dia!
Por que você está usando uma LINK TABLE?
São várias nuvem de dados em um mesmo arquivo QVW para ser necessário o uso de uma LINK TABLE?
Vamos lá, entendi que você tinha uma aplicação funcionando antes de particionar em vários QVDs. Nela já existia uma LINK TABLE.
Também entendi que agora no modelo novo você está gerando multiplos QVDs.
Então a minha pergunta é esses Múltiplos QVDs são todos de um mesmo assunto, porem estão partidos em data(dia, mês, ano...) ou esses QVDs são de assuntos diferentes que por isso se faz necessário o uso de um LINK TABLE?
Abraço!
Brandes, coloquei aqui seu script de criação da LinkTable
Normélio, boa noite!
Eu necessito utilizar link table pois o modelo que trabalho existem várias tabelas fatos e elas se relacionam entre si por parâmetros distintos.
Outro ponto de utilizar link table é para eliminar a referência circular que acontece nas chaves sintéticas e em toda relação eu preciso do link com a minha dimensão independente.
Acho que a questão não é a link table e sim a demora para load em um determinado arquivo que possua mais de dez milhões de registros. Você sabe de algo que limita o qlikview quanto a isso?
// Variável para armazenar o nome da visualização.
LET vView = 'LinkTable';
// Lista todos arquivos dentro do diretório estipulado e carrega todas as datas.
FOR EACH ArquivosQVD IN FILELIST('$(vSaidaArquivo)$(vView)\*.qvd')
DataCarregadas:
LOAD NUM(DATE#(LEFT(RIGHT('$(ArquivosQVD)',12),8),'YYYY-MM-DD')) AS Arquivos
AUTOGENERATE 1;
NEXT ArquivosQVD
// Cria uma lista das datas faltantes comparando os arquivos dentro do diretório e o período estipulado no calendário.
DatasFaltantes:
LOAD CONCAT(CalendarioPeriodo&', ') AS DataFaltante
RESIDENT Calendario
WHERE NOT EXISTS(Arquivos,CalendarioPeriodo);
// Concatena todas as datas faltantes em uma única variável. O comando "LEFT" é utilizado para remover a última vírgula e espaço.
LET vDatasFaltantes = LEFT(PEEK('DataFaltante'),LEN(PEEK('DataFaltante'))-2);
// Para cada data não encontrada no período será executada uma repetição.
FOR EACH ArquivosQVDFaltante IN $(vDatasFaltantes)
// Variável que irá armazanar a data faltante e utilizá-la como parâmetro.
LET vDataFormatada = DATE($(ArquivosQVDFaltante),'YYYY-MM-DD');
LET vDataFormatadaPesquisa = DATE($(ArquivosQVDFaltante),'DD/MM/YYYY');
TRACE Carregando $(vView) data: $(vDataFormatada);
// Execução da view utilizando a data estipulada.
// CompetenciaOutrasReceitas
$(vView):
LOAD DISTINCT
CodigoCliente AS CodigoCliente,
ChaveData AS ChaveData,
CompetenciaTipo AS CompetenciaTipo,
NULL() AS CodigoMVA,
NULL() AS ChaveCodigoUsuario,
NULL() AS ChaveCodigoUnidadeOperacional,
NULL() AS VeiculoFaixa,
NULL() AS VeiculoOrdemFaixa
FROM [$(vSaidaArquivo)CompetenciaOutrasReceitas\CompetenciaOutrasReceitas_$(vDataFormatada).qvd] (qvd);
// CompetenciaContratos
$(vView):
LOAD DISTINCT
CodigoCliente AS CodigoCliente,
ChaveData AS ChaveData,
CompetenciaTipo AS CompetenciaTipo,
CodigoMVA AS CodigoMVA,
NULL() AS ChaveCodigoUsuario,
NULL() AS ChaveCodigoUnidadeOperacional,
NULL() AS VeiculoFaixa,
NULL() AS VeiculoOrdemFaixa
FROM [$(vSaidaArquivo)CompetenciaContratos\CompetenciaContratos_$(vDataFormatada).qvd] (qvd);
// CompetenciaCustos
$(vView):
LOAD DISTINCT
CodigoCliente AS CodigoCliente,
ChaveData AS ChaveData,
NULL() AS CompetenciaTipo,
NULL() AS CodigoMVA,
NULL() AS ChaveCodigoUsuario,
NULL() AS ChaveCodigoUnidadeOperacional,
NULL() AS VeiculoFaixa,
NULL() AS VeiculoOrdemFaixa
FROM [$(vSaidaArquivo)CompetenciaCustos\CompetenciaCustos_$(vDataFormatada).qvd] (qvd);
// HistoricoVeiculos
$(vView):
LOAD DISTINCT
CodigoCliente AS CodigoCliente,
ChaveData AS ChaveData,
NULL() AS CompetenciaTipo,
CodigoMVA AS CodigoMVA,
NULL() AS ChaveCodigoUsuario,
ChaveCodigoUnidadeOperacional AS ChaveCodigoUnidadeOperacional,
VeiculoFaixa AS VeiculoFaixa,
VeiculoOrdemFaixa AS VeiculoOrdemFaixa
FROM [$(vSaidaArquivo)HistoricoVeiculos\HistoricoVeiculos_$(vDataFormatada).qvd] (qvd);
//FichaVenda
$(vView):
LOAD DISTINCT
CodigoCliente AS CodigoCliente,
ChaveData AS ChaveData,
NULL() AS CompetenciaTipo,
CodigoMVA AS CodigoMVA,
ChaveCodigoUsuario AS ChaveCodigoUsuario,
ChaveCodigoUnidadeOperacional AS ChaveCodigoUnidadeOperacional,
VeiculoFaixa AS VeiculoFaixa,
VeiculoOrdemFaixa AS VeiculoOrdemFaixa
FROM [$(vSaidaArquivo)FichaVenda\FichaVenda_$(vDataFormatada).qvd] (qvd);
//VendedorMeta
$(vView):
LOAD DISTINCT
NULL() AS CodigoCliente,
ChaveData AS ChaveData,
NULL() AS CompetenciaTipo,
NULL() AS CodigoMVA,
ChaveCodigoUsuario AS ChaveCodigoUsuario,
ChaveCodigoUnidadeOperacional AS ChaveCodigoUnidadeOperacional,
NULL() AS VeiculoFaixa,
NULL() AS VeiculoOrdemFaixa
FROM [$(vSaidaArquivo)VendedorMeta\VendedorMeta_$(vDataFormatada).qvd] (qvd);
// Armazenamento do conteúdo da view no arquivo qvd.
STORE $(vView) INTO $(vSaidaArquivo)$(vView)\$(vView)_$(vDataFormatada).qvd;
// Apaga a tabela da memória.
DROP TABLE $(vView);
// Carrega a próxima data faltante.
NEXT ArquivosQVDFaltante
// Limpa as tabelas da memória.
DROP Table DataCarregadas, DatasFaltantes;
// Limpa o conteúdo das variáveis "vDatasFaltantes" e "vView".
LET vDatasFaltantes = '';
// Dropa a tabela calendário da memória.
DROP TABLE Calendario;
// Encerra a conexão com o banco de dados e o script.
DISCONNECT;
EXIT SCRIPT;
Yuri, como mencionei anteriormente quando gerava isso em um único arquivo o LOAD demorava 20 segundos. O script é o mesmo só que agora o QVD demora dois minutos para gerar e load 1 hora.