Skip to main content
Announcements
Have questions about Qlik Connect? Join us live on April 10th, at 11 AM ET: SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Processo de carga incremental, limpeza e reprocessamento

Olá!

Gostaria de uma ajuda para entender uma questão relacionada a carga incremental e possíveis reprocessamentos. Partindo do princípio que entendo o formato de trabalhar com datas de criação e modificação, o meu problema é que não tenho estas informações na origem. Então vamos as perguntas:

1. Como o Qlik trata a questão de limpar o que existe e carregar as novas informações, este controle é "nosso" no script, ou é lógico dentro do processo do QV mesmo?

2. Nesta situação, como conseguiria carregar apenas 1 dia no início do mês, por exemplo?

A massa de dados que tenho é muito grande, e não tenho controle de criação/modificações. Então o reprocesso será por exemplo de 15 dias pra trás, ou seja todos os dias rodamos os últimos 15 dias. Podendo ocorrer também um reprocessamento de 3 dias do início do mês.

A principio é isso, espero ter explicado de forma clara.

Obrigado.

André Cirilo

11 Replies
paulovendruscol
Creator
Creator

André,

Infelizmente o carga incremental é realizada via script.

O help do QlikView aborda os requisitos para realizar as cargas incrementais e possui exemplos.

No help do QlikView Desktop, procure por: Usando Arquivos QVD para Carga Incremental

ou no help online:https://help.qlik.com/pt-BR/qlikview/12.0/Subsystems/Client/Content/QVD_Incremental.htm?q=incrementa...

aderlanrm
Partner - Specialist
Partner - Specialist

Olá André,

Você também pode fazer o incremento por um campo chave.

Qualquer forma de saber o que é novo ou velho ou o que mudou nos dados é passível de ser usado.

Um outro recurso muito comum quando a origem não há campo que indique alteração ou inclusão, é o prefixo Buffer com a opção Stale After X Days ou Hours, fazendo com que os dados sejam mantidos em QVD por X tempo em quanto outras tabelas são atualizadas com mais frequência.

Se puder incluir um exemplo (csv, txt, Excel) da estrutura para simular o teu cenários, a galera aqui pode fazer sugestões de como fazer a carga incremental. Anexe o QVW de exemplo com suas tentativas também.

Abraço.

***  Se foi útil ou correto, marque como tal, assim ajuda outros a também encontrar a resposta. ***

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
Clever_Anjos
Employee
Employee

Já achou uma solução? Se alguma resposta foi a correta, marque como "Correta" para fechar o tópico e nos ajudar a manter o forum organizado.

Como obter ajuda? Leia antes de postar

Not applicable
Author

Aderlan tenho uma situação parecida:

Ajudai ai brother se possivel...

Consegui montar quase tudo mas não sei como fazer o esquema das datas:

tipo, consegui fazer a consulta no banco e ele traz as informações, gravei o qvd e dropei a tabela.

Agora tenho o qvd com um campo datahora e tenho a consulta para atualizar esse qvd mas como fazer para a consulta verificar a maxdate dentro do qvd e usar como parametro na consulta para incrementar o qvd sem excluir nada e atualizar o periodo mais recente?

segue meu script

[HISTORICO_CCF]:

SELECT * FROM HISTORICO H

WHERE

h.his_pro_cod ='CCF'

and h.his_datahora >= 'O QUE DEVO COLOCAR AQUI ?? NO MEU QVD ATUALIZEI ATÉ 04/10/2016 ENTÃO O QUE COLOCAR AQUI PARA GERAR A CONSULTA OLHANDO ESSA DATA NO QVD ABAIXO E PEGAMNDO OS REGISTROS SUPERIORES A ESTA DATA'

Concatenate

LOAD HIS_COD,

     HIS_DEV_COD,

     HIS_COMPLEMENTO,

     HIS_DATAHORA,

     HIS_DURACAOLIGACAO,

     HIS_AGENDA,

     HIS_LIGACAOPAGA,

     HIS_NROTELEFONE,

     HIS_UNI_COD,

     HIS_THT_COD,

     HIS_USU_COD,

     HIS_MOC_COD,

     HIS_RETORNODISCADOR,

     HIS_VALIDO,

     HIS_REP_COD,

     TROCA,

     HIS_OCO_COD,

     HIS_PRO_COD,

     HIS_PEF_COD,

     HIS_TEL_COD

FROM

(qvd);

STORE [HISTORICO_CCF] INTO C:\Users\jeferson.vargas\Desktop\HISTORICO_CCF.QVD (qvd);

DROP TABLE [HISTORICO_CCF];

Anonymous
Not applicable
Author

Jeferson,

Quando fiz o questionamento, não conseguia entender muito bem como funcionava a questão de Limpar e Gravar novamente os dados na tabela, porque tinha o conceito que tinha era de limpar a tabela e inserir os dados novos.

Pelo que entendi da sua dúvida, que parece ser a mesma da minha, no meu caso a solução foi fazer:

1. A leitura dos novos registros em alguma tabela temporária (TAB_TEMP)

2. Concatenar a temporária com a original, excluindo ao que for igual a partir de uma data ou campo de chave

     Por exemplo

     CONCATENATE (TAB_TEMP)

       LOAD *

       FROM [NomeQVD.QVD] (qvd)

       WHERE NOT WildMatch(DATA_ATUALIZACAO, '$(vDataCarregada)');

Este Where NOT WildMatch, exclui somente data que colocar, caso precise excluir os campos antes da data que está carregando utilize where DATA_ATUALIZACAO < $(vDataCarregada), assim irá incluir os dados novos na tabela que está criando.

3. Depois de tudo carregado, basta fazer o STORE sobrepondo  QVD com a nova tabela.

Uma coisa que percebi é que neste caso não funciona quando precisa fazer uma combinação com mais campos do tipo Where Data < $(vDataCarga) and CodFilial = $(vFilial).

Espero ter ajudado.

Not applicable
Author

bha brother ainda estou apanhando...

temp:

load

max(campodataqvd) as data

from

meu qvd

let vData = Peek(data, 0, temp)

drop table temp

Conexão com oracle...

[update]

select * from tabela_que_ALIMENTA_QVD

where data > 'vData'

concatenate

[qvd]:

load meu qvd...

drop table update

Esta dando erro literal de string no campo data e agora?

Not applicable
Author

Cara help...não imagino como fazer...

a minha idéia é atualizar esse extrator todos os dias via management console agendamentoen então tipo não sei se precisaria usar for mas se conseguir ajudar com algum exemplo fico muito grato

Not applicable
Author

Valew Galera consegui resolver...apenas precisou formatar a data no campo

let vData = date(peek('HIS_DATAHORA',0,tmp),'DD/MM/YYYY');

Não descobrio ainda porque ele não achava as data quando estavam sem formato...e tambem não achava os campos quando estavam como datahora...mesmo no banco sendo data hora e mesmo formatando a variavel para datahora não funcionava...passei tudo para data e rolou!

aderlanrm
Partner - Specialist
Partner - Specialist

Desculpe, só vi agora.

Tenho andado afastado da Community, mas vou tentar aumentar a frequência aqui. Que bom que já resolveu.

Lembre de marcar o tópico como correto e quem ajudou a encontrar a resposta, é importante para manter a organização.

Grande abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)