Skip to main content
Woohoo! Qlik Community has won “Best in Class Community” in the 2024 Khoros Kudos awards!
Announcements
Nov. 20th, Qlik Insider - Lakehouses: Driving the Future of Data & AI - PICK A SESSION
cancel
Showing results for 
Search instead for 
Did you mean: 
edgarestrada
Contributor II
Contributor II

Carga incremental a Sense Desktop

Hola!

Gracias por aceptarme en el grupo.

Quisiera saber si alguien tiene experiencia en cargas incrementales para Sense Desktop.

Mi BD remota tiene muchos registros, y cada que le doy "load data" vuelve a bajar todo.

Hay forma de que solo baje los ultimos registros?

Tengo campos de identificcion unicos por registro, y tambien campos de fecha y hora.

Alguna sugerencia?

Gracias!

1 Solution

Accepted Solutions
alexdataiq
Partner - Creator III
Partner - Creator III

Este es un post algo viejo, pero por si le sirve a alguien, así es como yo lo haría:

Las cargas incrementales a nivel script se comportan igual tanto para QlikView como para QlikSense.

Si estás haciendo la extracción directamente de la B.D. se me ocurren ciertas cosas:

  1. Primero necesitas realizar un extracción inicial de todos los datos (en teoría una sola vez, al principio).
  2. Almacenar dicha información en un QVD.
  3. Para las siguientes extracciones incrementales, necesitas obtener la fecha máxima de tu información previamente almacenada.

Por ejemplo:

MaxFecha:

LOAD max(CampoFecha) as maxFecha FROM MiQVD.qvd (qvd);

Una vez obtenido esa fecha (maxFecha), lo que necesitas es agregar una condición WHERE a tú query, dónde utilices algún campo fecha para que sólo te extraiga los datos más recientes Por ejemplo:

vFecha = peek('maxFecha', MaxFecha);

SELECT *

FROM miBD

WHERE Fecha >= $(vFecha);

Espero sea de utilidad.

¡Saludos!

View solution in original post

20 Replies
alexdataiq
Partner - Creator III
Partner - Creator III

Este es un post algo viejo, pero por si le sirve a alguien, así es como yo lo haría:

Las cargas incrementales a nivel script se comportan igual tanto para QlikView como para QlikSense.

Si estás haciendo la extracción directamente de la B.D. se me ocurren ciertas cosas:

  1. Primero necesitas realizar un extracción inicial de todos los datos (en teoría una sola vez, al principio).
  2. Almacenar dicha información en un QVD.
  3. Para las siguientes extracciones incrementales, necesitas obtener la fecha máxima de tu información previamente almacenada.

Por ejemplo:

MaxFecha:

LOAD max(CampoFecha) as maxFecha FROM MiQVD.qvd (qvd);

Una vez obtenido esa fecha (maxFecha), lo que necesitas es agregar una condición WHERE a tú query, dónde utilices algún campo fecha para que sólo te extraiga los datos más recientes Por ejemplo:

vFecha = peek('maxFecha', MaxFecha);

SELECT *

FROM miBD

WHERE Fecha >= $(vFecha);

Espero sea de utilidad.

¡Saludos!

edgarestrada
Contributor II
Contributor II
Author

Hola Eduardo, muchas gracias por responderme!

Mi escenario es el siguiente:

En el Sense Desktop -> Data Load Editor, hay dos secciones: Main y Auto-generated

En teoria lo que entiendo es que en la seccion auto-generated es donde se bajan los datos (ahi hay sentencias LOAD y sentencias SQL)

En el sistema de archivos no veo ningun QVD, solo un QVF con el nombre de mi BD -- qiuere decir que tendria que bajar todo a un nuevo QVD, y luego filtrarlo con la funcionalidad de MaxFecha que me mencionas?

En que seccion tengo que hacer todo, esto, en la Main? ahi tiene 17 sentencias SET...

Gracias!

alexdataiq
Partner - Creator III
Partner - Creator III

Hola Edgar, el archivo QVF que se crea es el que crea Qlik Sense Desktop para tu aplicación. En este caso y como tu mencionas si necesitarías guardar la información extraída en un archivo QVD. Utilizando un


STORE MiTable INTO MiQVD.qvd (qvd);

Posteriormente sólo harías la consulta a la B.D. para extraer los nuevos registros, cargarías tu QVD ya creado y le pegarías los nuevos registros. Por ejemplo:

Tabla:

SQL SELECT * FROM Tabla_BD

WHERE FechaModificacion >= CampoFecha;

Concatenate

LOAD *

FROM MiQVD.qvd (qvd);


Estás en lo correcto en que la sección de Auto-Generate es la que realiza la extracción de la B.D:, esta es generada automáticamente por la funcionalidad del Qlik Sense 2.0.1 al utilizar el Data Manager. Si necesitas editar dicho código, le puedes dar clic en el icono del candado. Ten en cuenta que si editas directamente el código ya no podrás utilizar el Data Manager para editar tu código de carga y tendrás que hacerlo manualmente. A final de cuentas si quieres implementarle cambios para hacerlo incremental se tiene que hacer manualmente, así que no tengas miedo.


Las sentencias SET que mencionas en Main son variables de sistema que genera (y utiliza) Qlik Sense; éstas te recomiendo dejarlas así para su correcto funcionamiento. Tu puedes escribir código en Main debajo de las variables o crear más secciones (pestañas) en el editor de código sí así lo deseas y no debe de haber ningún problema.


¡Saludos!


edgarestrada
Contributor II
Contributor II
Author

Hola Alejandro, Gracias por el apoyo, mira te muestro mi codigo de carga inicial, me manda error... dice "Failed to open file in write mode for file C:\Users\krantz\Documents\QVDs\Fechas.qvd "

Hice mi conexion al folder (QVDMasOrganica)  como indica la ayuda, pero no puedo cargar mis datos inicialmente. Aqui el codigo:

LIB CONNECT TO 'masorganica';

Fechas:

LOAD Fecha;

SQL SELECT Fecha

FROM central.dbo.Fechas;

store * from Fechas into 'lib://QVDMasOrganica/Fechas.qvd'

SumpTank2SinAgua:

LOAD Dia,

    Hora,

    Minuto,

    sumpTank2;

SQL SELECT Dia,

    Hora,

    Minuto,

    sumpTank2

FROM central.dbo.sumpTank2SinAgua;

store * from SumpTank2SinAgua into 'lib://QVDMasOrganica/SumpTank2SinAgua.qvd'

SumpTank1SinAgua:

LOAD Dia,

    Hora,

    Minuto,

    sumpTank1;

SQL SELECT Dia,

    Hora,

    Minuto,

    sumpTank1

FROM central.dbo.sumpTank1SinAgua;

store * from SumpTank1SinAgua into 'lib://QVDMasOrganica/SumpTank1SinAgua.qvd'

VistaLecturas:

LOAD Momento,

    Dia,

    Hora,

    Minuto,

    T1,

    CalentadorT1,

    T2,

    CalentadorT2,

    T3,

    CalentadorT3,

    T4,

    CalentadorT4,

    Ambiente,

    Luz,

    statusLuzCrecimiento,

    Ph1,

    Ph2,

    ID,

    sumpTank1,

    sumpTank2,

    statusBombaAuxiliar1,

    statusBombaAuxiliar2,

    HumedadExterior,

    TemperaturaExterior,

    TemperaturaAparenteExterior,

    Lluvia,

    CortinasAbiertas,

    LuzExterior,

    temperaturaInterCooler,

    statusBombaIntercooler;

SQL SELECT Momento,

    Dia,

    Hora,

    Minuto,

    T1,

    CalentadorT1,

    T2,

    CalentadorT2,

    T3,

    CalentadorT3,

    T4,

    CalentadorT4,

    Ambiente,

    Luz,

    statusLuzCrecimiento,

    Ph1,

    Ph2,

    ID,

    sumpTank1,

    sumpTank2,

    statusBombaAuxiliar1,

    statusBombaAuxiliar2,

    HumedadExterior,

    TemperaturaExterior,

    TemperaturaAparenteExterior,

    Lluvia,

    CortinasAbiertas,

    LuzExterior,

    temperaturaInterCooler,

    statusBombaIntercooler

FROM central.dbo.vistaLecturas;

store * from VistaLecturas into 'lib://QVDMasOrganica/VistaLecturas.qvd'

BombasAuxiliaresActivadas:

LOAD Dia,

    Hora,

    Minuto,

    statusBombaAuxiliar1,

    statusBombaAuxiliar2;

SQL SELECT Dia,

    Hora,

    Minuto,

    statusBombaAuxiliar1,

    statusBombaAuxiliar2

FROM central.dbo.bombasAuxiliaresActivadas;

Store * from BombasAuxiliaresActivadas into 'lib://QVDMasOrganica/BombasAuxiliaresActivadas.qvd'

Podrias por favor indicarme que estoy haciendo mal? gracias!

alexdataiq
Partner - Creator III
Partner - Creator III

Que tal Edgar, así de primera impresión veo que te falta poner los punto y coma después de tus sentencias STORE. Como no lo tienes Qlik Sense no debe saber dónde termina el nombre del archivo e intenta hacer un nombre inválido con todo el resto de las palabras en el script.

También es recomendable indicar el tipo de datos (qvd), que aunque por defecto Qlik Sense asume es en formato QVD, no está de más hacerlo explícito como buena práctica:

store * from Fechas into 'lib://QVDMasOrganica/Fechas.qvd' (qvd);

Saludos.

edgarestrada
Contributor II
Contributor II
Author

Ahora si me sentí como noob.

Gracias

Ahora voy con el script de carga incremental per-se.

Saludos, te agradezco tu invaluable apoyo.

edgarestrada
Contributor II
Contributor II
Author

Hola Alejandro:

Mira, hice esto:

MaxFecha:

LOAD max(Momento) FROM "lib://QVDMasOrganica/VistaLecturas.qvd" (qvd);

LET vFecha = peek('Momento', MaxFecha);

Pero a la hora de correrlo, tanto vFecha como MaxFecha son nulos -- entonces a la hora de hacerle el load a la base de datos central, me manda error porque la condicion WHERE no trae valor despues del >

Alguna idea acerca de lo que posiblemente haya hecho mal?

Gracias!

alexdataiq
Partner - Creator III
Partner - Creator III

Prueba poniendo

MaxFecha:

LOAD max(Momento) as Momento

FROM "lib://QVDMasOrganica/VistaLecturas.qvd" (qvd);


LET vFecha = Peek('Momento', 0, 'MaxFecha');

Como no le estás poniendo nombre a tu campo con AS, el campo de tu tabla se llama 'max(Momento)' por eso no lo encuentra el Peek.

Saludos

alexdataiq
Partner - Creator III
Partner - Creator III

Ha ha,  ¡a todos nos pasa!