Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Prezados Bom dia.
Estou contruindo um aplicacao, em que a soma dos registros armazenados em qvd, separados por mes, ultrapassa 20 milhões de registros... porém na aplicação com atualização diária, for recarregar diariamente o tempo que consome é muito alto.
Tem alguma maneira de fazer a primeira carga de todos os qvds, e posteriormente manter em memoria os ja importados e carregar somente os novos qvds ????
Olá, existe o prexifo Add.
Segue informação retirada do manual do QlikView.
O prefixo add pode ser incluído em qualquer comando Load, Select (SQL) ou Map ... using do script. Ele só possui significado durante Recarga Parcial. Durante uma recarga parcial, a tabela QlikView, para a qual um nome de tabela é gerado pelo comando add load/add select (desde que essa tabela exista), receberá o resultado do comando add load/add select. Não é feita a verificação de duplicatas. Portanto, um comando que use o prefixo add normalmente incluirá um qualificador distinct ou uma cláusula where que cerca as duplicatas. O comando replace map...using faz com que o mapeamento ocorra também durante a execução parcial do script.
A sintaxe é:
add [only] (loadstatement |selectstatement |mapstatement)
onde:
only é um qualificador opcional que indica que o comando deve ser desconsiderado durante as recargas normais (não-parciais).
Exemplos:
Tab1:
LOAD Name, Number FROM Persons.csv;
add load Nome, Número from novasPessoas.csv;
Durante uma recarga normal, os dados são carregados de Pessoas.csv e armazenados na tabela Tab1 do QlikView. Os dados de NovasPessoas.csv são concatenados com a mesma tabela QlikView. Consulte Concatenação.
Durante uma recarga parcial, os dados são carregados de NovasPessoas.csv e anexados à tabela Tab1 do QlikView. Não é feita a verificação de duplicatas.
Tab1:
SELECT Name, Number FROM Persons.csv;
ADD LOAD Name, Number FROM NewPersons.csv Where not exists(Name);
É feita uma verificação de duplicatas verificando se Nome existe nos dados da tabela anteriormente carregada (consulte a função exists em exists(campo [ , expressão ])).
Durante uma recarga normal, os dados são carregados de Pessoas.csv e armazenados na tabela Tab1 do QlikView. Os dados de NovasPessoas.csv são concatenados com a mesma tabela do QlikView.
Durante uma recarga parcial, os dados são carregados de NovasPessoas.csv e anexados à tabela Tab1 do QlikView. Testa-se a existência de duplicatas com a verificação da existência de Nome nos dados da tabela carregada anteriormente.
Tab1:
LOAD Name, Number FROM Persons.csv;
ADD ONLY LOAD Name, Number FROM NewPersons.csv Where not exists(Name);
Durante uma recarga normal, os dados são carregados de Pessoas.csv e armazenados na tabela Tab1 do QlikView. O comando que carrega NovasPessoas.csv é ignorado.
Fernando Olá ... antes de tudo grato novamente pelo seu apoio.
Vamos lá ... minha estrutura de qvd é a seguinte:
saldoDeEmprestimos_201302.qvd
saldoDeEmprestimos_201303.qvd
saldoDeEmprestimos_201304.qvd
saldoDeEmprestimos_201305.qvd
E assim por diante ...
Para a primeira carga o script, onde estaria carregando todos os arquivos, seria..
emprestimos:
load * from [...qvd/saldoDeEmprestimos_.*]
ok ?
Como aplicaria no meu script a clausula ADD ...
Outra pergunta ... nestes Qvd armazeno a database, por ex: 31/03/2014.
Seria possivel armazenar este valor em uma variavel... e carregar somente os registros dos qvds aonde a database é maior que a ultima armazenada ??
Paulo, Particularmente eu prefiro ler todos os dados dos arquivos QVDs, sempre evito utilizar o prefixo Add, pois a execução do load só funciona se a recarga for parcial.
O seu script deve ficar assim com o prefixo Add.
emprestimos:
Load * from [...qvd/saldoDeEmprestimos_*.QVD] (qvd);
Add Load * from [...qvd/saldoDeEmprestimos_UltimoMes.QVD] (qvd); // Onde o ultimo mês deve ser apenas o incremento de informação entre a ultima carga e esta carga.
Sobre a data base, como funciona exatamente em seus dados, no mesmo arquivo QVD pode ter mais de uma data base?
Abraços.
Tonial.
Não a data-base é unica.
Como os registros são calculados e armazenados em arquivos mensais, armazendo como database o ultimo dia do mês em questão que foi processado.
Por ex, no arquivo: saldoDeEmprestimos_201302.qvd
Vai constar:
registro data base
1 '28/02/2013'
2 '28/02/2013'
3 '28/02/2013'
O problema que tenho em fazer o Load completo é que hoje levo quase 4 hrs para reimportar todos os arquivos, e isto para mim é um tempo muito longo, considerando que é executado toda noite.
Um outro detalhe que observei é que no QMC não tenho uma opção para indicar se a carga é normal ou parcial... vou ter que criar um batch para ser executado exclusivamente para aplicação ...
A opção de recarga parcial esta disponível apenas para quem possui o publisher.
Muito estranho demorar tanto tempo para fazer a recarga dos dados.
Você esta fazendo apenas Load ou alguma transformação junto?
Sobre a data você pode utilizar variáveis para pegar uma data de referencia.
Exemplo
Let vDataRef = MonthEnd(AddMonths(Today(),-1));
Abraços.
Tonial.
A unica alteração que faço é concatenar 3 campos e adicionar um AUTONUMBERHASH256 afim de criar a PK da tabela no qlikview.
Esse é o motivo da demora, realmente para grande volumes de dados esse processo faz com a carga de dados demore mais.
Fernando .. entendi ..
Uso o hash no momento de carregar meus qvds no aplicativo visando a performance do mesmo...mas com a tua dica vou mudar a minha estrategia e aplicar o hash na carga dos dados do Qvd ...
Imagino que ficara mais rápido.
Já trabalhei com arquivos QVDs com 2 milhões de linhas e fazendo concatenação automática entre eles e demorava menos de 10 segundos entre cada um deles.
Abraços.
Tonial.