Do not input private or sensitive data. View Qlik Privacy & Cookie Policy.
Skip to main content

Announcements
Want to see what's currently in public preview? We've pulled it all together in one place. Check it out here
cancel
Showing results for 
Search instead for 
Did you mean: 
Not applicable

Recarga Parcial

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 ????

11 Replies
fernando_tonial
Employee
Employee

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.

Don't Worry, be Qlik.
Not applicable
Author

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 ??

fernando_tonial
Employee
Employee

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.

Don't Worry, be Qlik.
Not applicable
Author

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 ...

fernando_tonial
Employee
Employee

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.

Don't Worry, be Qlik.
Not applicable
Author

A unica alteração que faço é concatenar 3 campos e adicionar um AUTONUMBERHASH256 afim de criar a PK da tabela no qlikview.

fernando_tonial
Employee
Employee

Esse é o motivo da demora, realmente para grande volumes de dados esse processo faz com a carga de dados demore mais.

Don't Worry, be Qlik.
Not applicable
Author

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.

fernando_tonial
Employee
Employee

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.

Don't Worry, be Qlik.