Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Senhores boa tarde,
estou tentando fazer uma carga incremental pela primeira vez, e peguei vários exemplos na net, e não consigo fazer funcionar. Tenho o código abaixo, porém, não funciona, uma vez que eu quero dar carga, apenas nos registros novos e os que sofrerem algum tipo de atualização:
LET vFileExists = IF(FileSize('EMPRESAS.qvd') > 0, -1, 0);
LET vCriterio = IF(IsNull(vCriterio), 0, vCriterio);
NOVOSREGISTROS:
SQL
SELECT *
FROM [SIACNET].[dbo].[mt_vw_campanha_horus]
Where Not Exists [SIACNET].[dbo].[mt_vw_campanha_horus].[CodParceiro] > $(vCriterio);
IF vFileExists = -1 THEN
REGISTROS:
Concatenate (NOVOSREGISTROS)
LOAD *
FROM [EMPRESAS.qvd.Qvd] (qvd);
END IF
STORE NOVOSREGISTROS INTO ..\DADOS\EMPRESAS.qvd(qvd)
LET vCriterio = Peek('CodParceiro');
LET vFileExists = ;
Para o código acima, tenho o seguinte erro:
Connector reply error: SQL##f - SqlState: 37000, ErrorCode: 102, ErrorMsg: [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near 'SIACNET'.
e também o seguinte erro:
Table not found error
Table 'NOVOSREGISTROS' not found
STORE NOVOSREGISTROS INTO [EMPRESAS.Qvd] (qvd)
Vagner,
a tabela NOVOSREGISTROS não deve ter sido criado pelo Where. Não deve ter deixado passar nenhum registro.
Where Not Exists [SIACNET].[dbo].[mt_vw_campanha_horus].[CodParceiro] > $(vCriterio);
Normalmente usa-se no incremental uma data ou um valor numerico sequencial.
Então, a partir da ultima carga, pega a ultima data ou o ultimo sequencial e le a partir >= e ao concatenar, contatenamos usando o Where not Exists.
Claro que tem algumas mudanças se o incremental for somente de registros novos, alterados e deletados.
Mais informações em
https://help.qlik.com/en-US/qlikview/November2017/Subsystems/Client/Content/QVD_Incremental.htm
Segue um código exemplo
//=======================================================================================================
// VBFA
TRACE ===================================================================================================;
TRACE ** Gerando o Stage da VBFA - Parte Incremental **;
TRACE ===================================================================================================;
//
LET v_Tem_VBFA = if(QvdNoOfRecords('$(vStagePath)VBFA.QVD')>0,1,0);
LET v_VBFA_Data = '20140101';
//
if $(v_Tem_VBFA) = 1 then
LET v_VBFA_QVD = QvdNoOfRecords('$(vStagePath)VBFA.QVD');
LET v_VBFA_Data = date((floor(QvdCreateTime('$(vStagePath)VBFA.QVD')) - $(vDiasAMenos) ),'YYYYMMDD');
ENDIF
//
[VBFA]:
LOAD
num(VBELV) & '-' & POSNV as PK_VBFA,
*;
SQL Select VBELV VBELN POSNN POSNV from VBFA Where VBTYP_N = 'M' and VBTYP_V = 'C' and ERDAT > '$(v_VBFA_Data)';
//
if $(v_Tem_VBFA) = 1 then
TRACE ** Unindo os dados do QVD com a tabela VBAP **;
Concatenate (VBFA)
LOAD * FROM [$(vStagePath)VBFA.QVD] (qvd) Where not Exists(PK_VBFA);
STORE VBFA Into $(vStagePath)VBFA.QVD (qvd);
ENDIF
DROP Table VBFA;
//
//=======================================================================================================