Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

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

Tags (1)
11 Replies
fernando_tonial
Valued Contributor

Re: Recarga Parcial

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.

Not applicable

Re: Recarga Parcial

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
Valued Contributor

Re: Re: Recarga Parcial

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.

Not applicable

Re: Recarga Parcial

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
Valued Contributor

Re: Recarga Parcial

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.

Not applicable

Re: Recarga Parcial

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
Valued Contributor

Re: Recarga Parcial

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

Not applicable

Re: Recarga Parcial

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
Valued Contributor

Re: Recarga Parcial

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.