Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
vagner_analista
Contributor III
Contributor III

Problema com carga Incremental

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)

1 Reply
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

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;

//

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

furtado@farolbi.com.br