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);
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);
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);
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.
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!
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.
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);
La sentencia con el Peek() no debería ir antes del DROP TABLE T1 ? Seguramente estás obteniendo un valor nulo en vmaxID...
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);
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);