Skip to main content
Announcements
Qlik Community Office Hours, March 20th. Former Talend Community users, ask your questions live. SIGN UP
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