Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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.
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
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);
//
//=======================================================================================================
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...
Conseguiu resolver seu problema? Marque as respostas como úteis/correta para mantermos a comunidade organizada.
Para apoio;
Referência (Tópicos 2.3 e 2.4): Manual do usuário | Como criar e gerir minhas perguntas?
Abraço.