Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
erivera10
Creator
Creator

Recarga inicial + recargas incrementales cada 30 mins

Hola buenas tardes,

Tengo un problema de performance, necesito recargar una sola ves registros de una base de datos llamada archive.qvd,  a partir de esa fecha necesito hacer recargas de datos nuevos en un .qvd llamado delta (siendo delta, una tabla temporal) y unir las dos tablas y guardar nuevamente en archive.qvd, así cada media hora actualizar datos nuevos.

Saludos de antemano

Erick

11 Replies
Not applicable

Erick:

buenas te pongo el ejemplo de un excel que hice y me actualiza y guarda los datos en el QVD

espero te ayude

quiero intentar hacer la prueba de 1 qvd actualizar otro pero no me ha dado demasiado tiempo

tecomento mas adelante si logro hacerlo

saludos

erivera10
Creator
Creator
Author

Estimado Agustín Tinoco,

Encontré algo bastante bueno, con una condición IF

extraigo datos de "archive" o historico, ejemplo si hoy fuera 18/may/2015,

desde esa fecha hacía atrás, en lugar de 30 minutos que sea un mes,

entonces, ya tenemos desde 18 de mayo y ya paso un mes y ya es 18/jun/2015, entonces con un

LET fijo una variable si existe archive.qvd, la condición IF entonces me manda a sacar solo "DELTA", los últimos registros, a partir de la última recarga.

LET vDeltaqvdexistst=isnull(QvdCreateTime('../qvd/DELTA.qvd'));  // if qvd exists then 0 else -1
LET vArchiveqvdexist=isnull(QvdCreateTime('../qvd/archive.qvd'));// if qvd exists then 0 else -1


Una ves que ya se si existe o no cada uno entonces extraigo la fecha en la que fue creado el qvd:

LET  vDELTA=QvdCreateTime('../qvd/DELTA.qvd');// Muestra la fecha y hora en que fue creado DELTA.qvd
LET vArchive=QvdCreateTime('../qvd/archive.qvd'); // Muestra la fecha y hora en que fue creado archive.qvd

Posteriormente

tabla1:

LOAD * FROM archive.qvd;

tabla2:

ADD LOAD * FROM DELTA.qvd;

Extra: aplicas un store  Tabla1 into ../qvd/tabla3.qvd;

DROP TABLE tabla1;

Not applicable

Erick:

gracias por el comentario y por compartir esta información bastante interesenta quizas algun día me sirva en algun requerimiento.

saludos coordiales

ramoncova06
Partner - Specialist III
Partner - Specialist III

puedes crear un qvw con los datos guardados y luego hacer una carga binaria sobre el mismo documento y luego hacer una concatenación con la nueva tabla, esto es lo más rápido para este tipo de cargas y supuestamente es lo utilizado para big data

erivera10
Creator
Creator
Author

Agustin Tinoco:

No hay de que, yo lo estoy implementando en un requerimiento.

Saludos.

erivera10
Creator
Creator
Author

Ramon,

Ya use el CONCATENATE, es muy útil cuando falta algún campo ya que lo forza:

tabla1:

load a,b,c from tabla1.qvd;

tabla2:

concatenate

LOAD a,c from tabla2.qvd;

Mas es el mismo principio el ADD o el CONCATENATE, y hay un recurso más, las lecturas dinámicas cuando las tablas tienen el mismo número de campos y nombres de los mismos.

tabla1:l

LOAD * from tabla*.qvd;

rperezlaso
Contributor III
Contributor III

¿ puedes explicar un poco mas el proceso ?

erivera10
Creator
Creator
Author

rperezlaso

El punto es obtener fechas con hora, y con ello crear variables para posteriormente con condiciones where dinámicas, es decir que cada que se actualice encuentre nuevas fechas de la última vez que se actualizo, una vez en memory, puedes integrar todo e ir construyendo las cargas incrementales.

Por ejemplo:


LET vDeltaqvdexistst=isnull(QvdCreateTime('../qvd/DELTA.qvd')); // if qvd exists then 0 else -1
LET vArchiveqvdexist=isnull(QvdCreateTime('../qvd/archive.qvd'));// if qvd exists then 0 else -1


Una ves que ya se si existe o no cada uno entonces extraigo la fecha en la que fue creado el qvd:

LET  vDELTA=QvdCreateTime('../qvd/DELTA.qvd');// Muestra la fecha y hora en que fue creado DELTA.qvd
LET vArchive=QvdCreateTime('../qvd/archive.qvd');// Muestra la fecha y hora en que fue creado archive.qvd

Posteriormente

tabla1: //nombre temporal para integrar archive con la carga nueva.

LOAD * FROM archive.qvd;

tabla2: //al concatenar con tabla 1, desaparece como tal, la tabla2

ADD LOAD * FROM DELTA.qvd //Puede ser desde una Base de datos cualquiera, SQL, MySQL, Oracle, etc. Debe       

where Date>=$(vArchive);           //contener los mismos campos, o al menos la mayoría.

Extra: aplicas un store  tabla1 into ../qvd/archive.qvd;  //Se sobreescribe Archive con la carga Archive + DELTA

DROP TABLE tabla1;

*Si tienes alguna duda hazmela saber.

rperezlaso
Contributor III
Contributor III

Muchas gracias ha quedado comprendido.

1.- ver la fecha de creación del fichero qvd.

2.- cargar el qvd.

3.- cargar bbdd con where y la fecha de creacion del qvd del paso 1.

4.- hacer un store y eliminar tablas.

========

pero con esto me surge una duda:

si las fechas de creación no son en tiempo real, ¿no seria mejor saber cual es la ultima fecha cargada en el qvd ?

gracias.-