Skip to main content
Announcements
See why Qlik is a Leader in the 2024 Gartner® Magic Quadrant™ for Analytics & BI Platforms. Download Now
cancel
Showing results for 
Search instead for 
Did you mean: 
alejortizp
Contributor III
Contributor III

Carga incremental para la ultima fecha de modificación

Hola buen día,

Estoy tratando de crear una carga incremental de mis registros, y a partir de mis datos históricos utilizar la ultima fecha de modificación para así solo subir dichos archivos nuevos o actualizados que se hayan modificado en el archivo con los nuevos y actualizados registros.  En el archivo de excel la hoja 1 trae los históricos y en la hoja 2 los archivos nuevos y modificados, pero en la hoja 2 incluí un archivo con una fecha posterior a la del histórico para verificar que no se actualizara y permaneciera el registro mas actual.

Muchas gracias si me dan una luz.

T1:

LOAD

    *

FROM [lib://CARGA_INCREMENTAL/incremental.Qvd](qvd);

sub:

LOAD Date(max(FECHA_SOLICITUD)) as maxID

Resident T1;

DROP Table T1;

let vmaxID=Peek('maxID',-1,T1);

Incremental:

LOAD

    *

FROM

[lib://CARGA_INCREMENTAL/incremental.Qvd](qvd);

Concatenate

LOAD

     *

FROM

[lib://CARGA_INCREMENTAL/direfencial.Qvd](qvd)

Where FECHA_SOLICITUD>$(vmaxID);

STORE Incremental into [lib://CARGA_INCREMENTAL/Prueba4_Incremental.qvd](qvd);

1 Solution

Accepted Solutions
alejortizp
Contributor III
Contributor III
Author

La respuesta correcta es asi:

T1:

LOAD

    *

FROM [lib://CARGA_INCREMENTAL/incremental.Qvd](qvd);

sub:

LOAD

// Date(max(FECHA_SOLICITUD)) as maxID

max(DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')) AS maxID

Resident T1;

let vmaxID=Peek('maxID',0,T1);

DROP Table T1;

Nuevos:

LOAD

     *

FROM

[lib://CARGA_INCREMENTAL/direfencial.Qvd](qvd)

Where DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>=$(vmaxID);

// Where DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>$(vmaxID);

Concatenate

Incremental:

LOAD

    *

FROM

[lib://CARGA_INCREMENTAL/incremental.Qvd](qvd)

Where not Exists(ID_RECIBIDO); //and DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>$(vmaxID);

STORE Nuevos into [lib://CARGA_INCREMENTAL/FINAL_Incremental.qvd](qvd);

View solution in original post

8 Replies
rubenmarin

Hola Alejandro ¿Pero cual es el problema que tienes con al recarga?

Puede que necesitas usar 0 en el peek:

let vmaxID=Peek('maxID',0,T1);

alejortizp
Contributor III
Contributor III
Author

Hola Ruben,

Estoy creando una tabla incremental que se me actualice por la fecha de modificación mas actual. Para esto tengo mi tabla T1 como la histórica y sub contendrá la fecha de modificación mas actual. Y así solo cargar los registros nuevos y actualizados posteriores a esa fecha de modificación mas vigente que se actualizara con cada incremental de datos que se le adicionen. Ya modifique la sentencia let vmaxID=Peek('maxID',0,T1); pero no obtuve el resultado deseado.

Estoy buscando actualizar e ingresar nuevos registros de direfencial.Qvd a incremental.Qvd, pero solo los registros que tengan una fecha de modificación superior a la que tienen en el incremental, dado que si aparece un registro con una fecha posterior a la fecha que tiene en el histórico no se modifique y permanezca el que esta en el histórico, pero mi código no esta reemplazando los registros y no esta teniendo en cuenta tampoco la fecha de modificación de sub estipulada porque esta subiendo un registro con fecha anterior a la de maxID.

Fernando_Fabregas
Creator II
Creator II

Hola Alejandro, probaste de encerrar entre comillas la fecha, sino probablemente lo toma como una división.

    Where FECHA_SOLICITUD>'$(vmaxID)';


Y quizás en la sentencia del Peek sea necesario agregale un Date() para asegurarse el formato.


Para sacarte la duda de qué está haciendo el script imprimí las variables con un TRACE y ahí verás las diferencias de formato.


Saludos!

alejortizp
Contributor III
Contributor III
Author

Con esta sentencia se me arregla la lectura de la fecha Where DATE#(FECHA_SOLICITUD,'DD/MM/YYY)>$(vmaxID);

pero con Where not exists(ID_RECIBIDO) and DATE#(FECHA_SOLICITUD,'DD/MM/YYY)>$(vmaxID); estoy intentando que se me actualicen los archivos y que no me genere duplicación.

alejortizp
Contributor III
Contributor III
Author

Así iría el nuevo código:

T1:

LOAD

    *

FROM [lib://CARGA_INCREMENTAL/incremental.Qvd](qvd);

sub:

LOAD Date(max(FECHA_SOLICITUD)) as maxID

Resident T1;

DROP Table T1;

let vmaxID=Peek('maxID',0,T1);

Incremental:

LOAD

    *

FROM

[lib://CARGA_INCREMENTAL/incremental.Qvd](qvd);

Concatenate

 

LOAD

     *

FROM

[lib://CARGA_INCREMENTAL/direfencial.Qvd](qvd)

Where not exists(ID_RECIBIDO) and DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>$(vmaxID);

STORE Incremental into [lib://CARGA_INCREMENTAL/Prueba4_Incremental.qvd](qvd);

Fernando_Fabregas
Creator II
Creator II

La sentencia con el Peek() no debería ir antes del DROP TABLE T1 ? Seguramente estás obteniendo un valor nulo en vmaxID...

alejortizp
Contributor III
Contributor III
Author

Ya lo realice pero aun me trae el registro antiguo que esta en la tabla direfencial.Qvd.

Asi va el codigo:

T1:

LOAD

    *

FROM [lib://CARGA_INCREMENTAL/incremental.Qvd](qvd);

sub:

LOAD Date(max(FECHA_SOLICITUD)) as maxID

Resident T1;

let vmaxID=Peek('maxID',0,T1);

DROP Table T1;

Nuevos:

LOAD

     *

FROM

[lib://CARGA_INCREMENTAL/direfencial.Qvd](qvd)

Where DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>=$(vmaxID);

Concatenate

Incremental:

LOAD

    *

FROM

[lib://CARGA_INCREMENTAL/incremental.Qvd](qvd)

Where not Exists(ID_RECIBIDO); //and DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>$(vmaxID);

STORE Nuevos into [lib://CARGA_INCREMENTAL/FINAL_Incremental.qvd](qvd);

alejortizp
Contributor III
Contributor III
Author

La respuesta correcta es asi:

T1:

LOAD

    *

FROM [lib://CARGA_INCREMENTAL/incremental.Qvd](qvd);

sub:

LOAD

// Date(max(FECHA_SOLICITUD)) as maxID

max(DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')) AS maxID

Resident T1;

let vmaxID=Peek('maxID',0,T1);

DROP Table T1;

Nuevos:

LOAD

     *

FROM

[lib://CARGA_INCREMENTAL/direfencial.Qvd](qvd)

Where DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>=$(vmaxID);

// Where DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>$(vmaxID);

Concatenate

Incremental:

LOAD

    *

FROM

[lib://CARGA_INCREMENTAL/incremental.Qvd](qvd)

Where not Exists(ID_RECIBIDO); //and DATE#(FECHA_SOLICITUD,'DD/MM/YYYY')>$(vmaxID);

STORE Nuevos into [lib://CARGA_INCREMENTAL/FINAL_Incremental.qvd](qvd);