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: 
Not applicable

Carga incremental ( Limpando e carregando )...

Boa tarde Pessoal!

Estou montando um processo de carga incremental e gostaria da ajuda de vocês...

Criei um GeraQVD com informações desde 2007, porém, preciso de ajuda para fazer a carga apenas dos últimos sete dias.

Exemplo: Quero fazer a limpeza dos últimos seis dias do QVD e carregar as informações dos últimos sete dias do banco nesse mesmo QVD.

Por favor, podem me ajudar?

Obrigado.

Douglas.

Labels (1)
5 Replies
Marcio_Campestrini
Specialist
Specialist

Bom dia Douglas

Você pode fazer algo do tipo:

1) Selecionar na tabela inicial somente os registros dos últimos 7 dias (data >= dia atual - 7)

2) Carregar o QVD lendo todos os registros MENOS os últimos 6 dias (data >= dia atual - 6)

3) Concatenar os dois resultados e salvar o novo QVD

Márcio Rodrigo Campestrini
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Douglas,

segue uma rotina que podes adaptar....

//=======================================================================================================

// Verifica se tem arquivo QVD

LET v_Tem_QVD       = if(QvdNoOfRecords('$(vStagePath)Nome_Arquivo.QVD')>0,1,0);

// Caso nao tenha, define a data de leitura inicial

LET v_QVD_Data      = '20140101';

// Define os dias para tras a ler

LET vDiasAMenos   = 7;

//

// Se tem o arquivo QVD pega a data. Aqui pegamos a data do arquivo, mas poderia dar um MAX do campo data para saber a ultima data......

if $(v_Tem_QVD) = 1 then

   LET v_Tem_QVD    = QvdNoOfRecords('$(vStagePath)Nome_Arquivo.QVD');

   LET v_QVD_Data   = date((floor(QvdCreateTime('$(vStagePath)Nome_Arquivo.QVD')) - $(vDiasAMenos) ),'YYYYMMDD');

ELSE

   TRACE *********************** Nao Achou o QVD **********************************;  

ENDIF

//

//

[XXXXXXX]:

SQL Select CAMPO1, CAMPO2  from Tabela  Where CAMPODATA >= '$(v_VBUK_Data)' ;

//

// Se tem arquivo QVD vai concatenar

if $(v_Tem_QVD) = 1 then

    TRACE ** Unindo os dados do QVD com a tabela XXXXXXXX **;

  Concatenate (XXXXXXX)

  LOAD * FROM [$(XXXXXXX)VBUK.QVD] (qvd) Where not Exists(CAMPO1);  // O not exists serve para nao concatenar registros ja lidos do banco. Aqui tem que cuidar da chave.....Se composta, por exemplo....

ENDIF

//

STORE XXXXXXX Into  $(vStagePath)Nome_Arquivo.QVD (qvd);

//

//=======================================================================================================

furtado@farolbi.com.br
Anonymous
Not applicable
Author

Bom dia Douglas,

Veja se um Script parecido com esse lhe ajuda:


LET V_DATA_INI = Today() -7;

TABELA:   
//AQUI VOCE FAZ A CARGA DOS DIAS DESEJADOS
LOAD *;
SQL
SELECT *
FROM TABELA_BANCO
WHERE CAMPO_DATA >= '$(V_DATA_INI)';

Concatenate     //QUANDO AS TABELA TÊM OS MESMO CAMPOS O QlikView CONCATENA AUTOMATICAMENTE

LOAD * FROM TABELA.QVD (qvd)    //CARREGA, DO QVD, APENAS OS REGISTROS COM AS DATAS ANTERIORES ÀS CARGA RECENTE
Where CAMPO_DATA < '$(V_DATA_INI)';

STORE TABELA into TABELA.QVD (qvd);

DROP Table TABELA;

    Um Script como esse só funciona corretamente quando os dados do seu banco não sofrem alterações depois de gravados. Tipo se dados com mais de sete dias podem sofrer alterações o Script precisa ser revisto.

    Cálculos com datas podem nos confundir às vezes e um script com Carga Incremental e Limpeza pode ser bem mais complexo que esse. Tudo vai depender de como os dados são armazenados no Banco de Dados, e a liberdade que tem para alterá-los.

Espero ter podido ajudar.

Felicidades...

Marcio_Campestrini
Specialist
Specialist

Conseguiu resolver seu problema? Marque as respostas como úteis/correta para mantermos a comunidade organizada.

Márcio Rodrigo Campestrini
mario_sergio_ti
Partner - Specialist
Partner - Specialist

Para apoio;

Referência (Tópicos 2.3 e 2.4): Manual do usuário | Como criar e gerir minhas perguntas?

Abraço.

Consultor certificado | Quem compartilha, aprende!
https://www.linkedin.com/in/mariosergioti