Skip to main content
Announcements
Introducing a new Enhanced File Management feature in Qlik Cloud! GET THE DETAILS!
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Cargas Incrementales!

Hola

Voy iniciando en Qlik Sense y necesito entender un poco mejor las cargas incrementales...

He estado haciendo pruebas con un archivo de excel para posteriormente usarlo con mi base de datos

Adjunto el script que estoy utilizando.

Al parecer la funcion logica de

WHERE "Date" > $(vUltimaCarga);

No es ta funcionando puesto que cargo datos nuevos y se agregan por la concatenacion del id pero no es eficiente ya que vuelve a leer todo el archivo de excel y lo vuelve a cargar completamente y no por la fecha de ultima carga y futuro necesitare que sea por fecha para un mejor rendimiento.

Espero me puedan ayudar.

Gracias

19 Replies
diego_a_barboza
Creator
Creator

Yo pensaba algo como esto, fijate si te sirve:

/******ARCHIVO DE CONTROL********/

LET vFileExists = FileSize('[lib://Datos/Fechas_cargadas]')

//Si existe el archivo de control, se hace la carga incremental

IF $(vFileExists) > 0

then

UltimaCarga:

LOAD MAX(LOAD_DATE) AS MAX_LOAD_DATE

FROM [lib://Datos/Fechas_cargadas];

LET vUltimaCarga = FieldValue('MAX_LOAD_DATE',1);

/******CARGA INCREMENTAL********/

DATOS:

LOAD

id,

first_name,

last_name,

email,

gender,

ip_address,

"Date",

NUM(DATE("Date",'YYYYMMDD') AS REFERENCIA_FECHA

FROM [lib://Datos/Datos Prueba.xlsx] (ooxml, embedded labels, table is data)

WHERE NUM(DATE("Date",'YYYYMMDD') > $(vUltimaCarga);

Concatenate(DATOS)

LOAD

id,

first_name,

last_name,

email,

gender,

ip_address,

"Date",

REFERENCIA_FECHA

FROM [lib://QVD/DATOS.qvd](qvd)

WHERE NOT EXISTS(id);

// NO ENTIENDO EL PROPÓSITO DE ESTA PARTE ¿Es para eliminar registros que no fueron cargados en la última actualización?

/* INNER JOIN

LOAD id

FROM [lib://Datos/Datos Prueba.xlsx]

(ooxml, embedded labels, table is data); */

ELSE

/********CARGA FULL********/

//Si no existe el archivo de control, se hace la carga completa

DATOS:

LOAD

id,

first_name,

last_name,

email,

gender,

ip_address,

"Date"

FROM [lib://Datos/Datos Prueba.xlsx] (ooxml, embedded labels, table is data);

ENDIF;

// SENTENCIA DE STORE

STORE DATOS INTO [lib://QVD/DATOS.qvd](qvd);

DROP TABLE DATOS;

// CONTROL DE FECHAS

Fechas_cargadas:

LOAD NUM(DATE("Date",'YYYYMMDD') AS LOAD_DATE

FROM [lib://QVD/DATOS.qvd](qvd);

// STORE DE ARCHIVO DE CONTROL

STORE Fechas_cargadas INTO [lib://Datos/Fechas_cargadas];

DROP TABLE Fechas_cargadas;

Anonymous
Not applicable
Author

estaba probandolo y me marco el siguiente error en el operador logico

diego_a_barboza
Creator
Creator

Mala mia: Probá con el siguiente script:

LET vFileExists = if(isnull(FileSize('[lib://Datos/Fechas_cargadas]')),0,1);

También se pueden usar el FileTime() y el qvdloaddate() como funciones alternativas para verificar la existencia de un archivo.

Anonymous
Not applicable
Author

Ntp ya hice los cambios y agregue los parentesis que faltaban ahora el unico problema es que me marca que la sentencia de then no la reconoce

Muchas Gracias por tu paciencia y ayuda Diego

diego_a_barboza
Creator
Creator

Probá poniendo el then en la misma linea que el if, o también encerrando la variable entre comillas simples

IF '$(vFileExists)' > 0 then


Disculpame los problemas, pero escribí todo en el notepad y no lo corrí en Qlik, por eso salieron tantos errores.


Suerte

Anonymous
Not applicable
Author

Ya casi queda solamente que ahora el campo LOAD_DATE no lo reconoce en la validacion de la existencia del archivo fechas cargadas

Anonymous
Not applicable
Author

El archivo que se creo llamado fechas cargadas lo converti en un qvd y de esa forma ya se hizo la validacion pero ahora me indica que el campo fecha referencia no existe

rubenmarin

Hola, ese error será porque el qvd no  tiene el campo REFERENCIA_FECHA, si es un campo nuevo habría que realizar una carga inicial del qvd que genere ese campo.

O hacer un script temporal de forma que cree el campo usando el propio qvd:

// Solo ejecutar una vez para generar el campo:

Concatenate(DATOS)

LOAD

id,

first_name,

last_name,

email,

gender,

ip_address,

"Date",

//REFERENCIA_FECHA

NUM(DATE("Date",'YYYYMMDD') AS REFERENCIA_FECHA

FROM [lib://QVD/DATOS.qvd](qvd)

WHERE NOT EXISTS(id);

diego_a_barboza
Creator
Creator

Ahi te paso la versión actualizada, con agregando el campo faltante en la tabla de carga original (full).

La idea es que si no existe el archivo de control, se hace la carga full... y si el archivo existe, hace el incremental.

De vuelta, mis disculpas por no haber ejecutado el script para revisar errores antes de pasartelo. Espero que la lógica básica te sirva para lo que estas armando.

Anonymous
Not applicable
Author

No hay problema Diego he avanzado contigo en 1 dia que lo que he avanzao yo solo en 2 semanas

No marca errores y las condicionales para realizar la carga incremental funcionan ahora el problema es que no realiza la carga de los nuevos registros te adjunto el log.