Caricamento di record nuovi e aggiornati mediante il carico incrementale

Se l'app contiene un numero elevato di dati provenienti da sorgenti del database in costante aggiornamento, il ricaricamento dell'intera serie di dati può richiedere diverso tempo. In questo caso è necessario caricare dal database solo i record nuovi o modificati, perché tutti gli altri dati saranno già disponibili nell'app. Questa operazione può essere eseguita con il caricamento incrementale utilizzando file QVD.

I passaggi di base del processo sono descritti di seguito:

  1. Caricare dati nuovi o aggiornati dalla tabella della sorgente del database.

    Si tratta di un processo lento, anche se viene caricato solo un numero limitato di record.

  2. Caricare i dati già disponibili nell'app dal file QVD.

    Viene caricato un numero elevato di record, tuttavia si tratta di un processo molto più veloce.

  3. Creare un nuovo file QVD.

    Si tratta del file che verrà utilizzato per il carico incrementale successivo.

  4. Ripetere il procedimento per ogni tabella caricata.

Nei seguenti esempi vengono illustrati dei casi in cui si utilizza il carico incrementale, anche se potrebbe essere necessaria una soluzione più complessa, a seconda della struttura del database sorgente e dalla modalità di funzionamento.

  • Aggiungi solo (utilizzato generalmente per i file di registro)
  • Inserisci solo (nessun aggiornamento o eliminazione)
  • Inserisci e Aggiorna (nessuna eliminazione)
  • Inserimento, aggiornamento ed eliminazione

È possibile leggere i file QVD nella modalità ottimizzata o nella modalità standard. La modalità impiegata viene selezionata automaticamente dall'engine di Qlik Sense in base alla complessità dell'operazione. La modalità ottimizzata è circa 10 volte più veloce rispetto alla modalità standard e circa 100 volte più veloce del caricamento del database nella modalità normale.

Per ulteriori informazioni, vedere Utilizzo dei file QVD.

Aggiungi solo

Il caso più semplice è quello relativo ai file di registro, dove i record vengono solamente aggiunti e mai eliminati. Si applicano le seguenti condizioni:

  • Il database deve essere un file di registro (o un altro file in cui i record vengono aggiunti e non inseriti o eliminati) contenuto in un file di testo (ODBC, OLE DB o altri database non sono supportati).

  • Qlik Sense tiene traccia del numero di record letti in precedenza e carica solo i record aggiunti alla fine del file.

Example:  

(Windows)

Buffer (Incremental) Load * From LogFile.txt (ansi, txt, delimiter is '\t', embedded labels);

Example:  

(Kubernetes)

Buffer (Incremental) Load * From [lib://MyDataFiles/LogFile.txt] (ansi, txt, delimiter is '\t', embedded labels);

Inserisci solo (nessun aggiornamento o eliminazione)

Se i dati risiedono in un database diverso da un semplice file di registro, la soluzione dell'aggiunta non funzionerà. Il problema potrà essere comunque risolto con una quantità di lavoro minima. Si applicano le seguenti condizioni:

  • La sorgente dati può essere qualsiasi database.

  • Qlik Sense carica i record inseriti nel database dopo l'ultima esecuzione dello script.

  • È richiesto un campo ModificationTime (o simile) per consentire a Qlik Sense di riconoscere i record nuovi.

Example:  

(Windows)

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD;

STORE QV_Table INTO File.QVD;

 

I segni cancelletto nella clausola SQL WHERE definiscono l'inizio e la fine di una data. Consultare il manuale del database per la sintassi corretta delle date per il database.

Example:  

(Kubernetes)

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM [lib://MyDataFiles/File.QVD];

STORE QV_Table INTO [lib://MyDataFiles/File.QVD];

 

I segni cancelletto nella clausola SQL WHERE definiscono l'inizio e la fine di una data. Consultare il manuale del database per la sintassi corretta delle date per il database.

Inserisci e Aggiorna (nessuna eliminazione)

Il caso seguente è applicabile quando i dati in un record caricato in precedenza possono avere subito modifiche tra le varie esecuzioni dello script. Si applicano le seguenti condizioni:

  • La sorgente dati può essere qualsiasi database.

  • Qlik Sense carica i record inseriti nel database o aggiornati nel database dopo l'ultima esecuzione dello script.

  • È richiesto un campo ModificationTime (o simile) per consentire a Qlik Sense di riconoscere i record nuovi.

  • È necessario un campo chiave primario affinché Qlik Sense riordini i record aggiornati dal file QVD.

  • Questa soluzione forzerà la lettura del file QVD in modalità standard (anziché in modalità ottimizzata), che è considerevolmente più veloce del caricamento dell'intero database.

Example:  

(Windows)

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD

WHERE NOT Exists(PrimaryKey);

WHERE NOT Exists(PrimaryKey);

 

STORE QV_Table INTO File.QVD;

Example:  

(Kubernetes)

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#;

 

WHERE NOT Exists(PrimaryKey);

Concatenate LOAD PrimaryKey, X, Y FROM [lib://MyDataFiles/File.QVD];

WHERE NOT Exists(PrimaryKey);

 

STORE QV_Table INTO [lib://MyDataFiles/File.QVD];

Inserimento, aggiornamento ed eliminazione

Il caso più complesso si verifica quando tra esecuzioni successive dello script vengono eliminati record dal database sorgente. Si applicano le seguenti condizioni:

  • La sorgente dati può essere qualsiasi database.

  • Qlik Sense carica i record inseriti nel database o aggiornati nel database dopo l'ultima esecuzione dello script.

  • Qlik Sense rimuove i record eliminati dal database dopo l'ultima esecuzione dello script.

  • È richiesto un campo ModificationTime (o simile) per consentire a Qlik Sense di riconoscere i record nuovi.

  • È necessario un campo chiave primario affinché Qlik Sense riordini i record aggiornati dal file QVD.

  • Questa soluzione forzerà la lettura del file QVD in modalità standard (anziché in modalità ottimizzata), che è considerevolmente più veloce del caricamento dell'intero database.

Example:  

(Windows)

Let ThisExecTime = Now( );

 

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(ThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD

WHERE NOT EXISTS(PrimaryKey);

 

Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;

 

If ScriptErrorCount = 0 then

STORE QV_Table INTO File.QVD;

Let LastExecTime = ThisExecTime;

End If

Example:  

(Kubernetes)

Let ThisExecTime = Now( );

 

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(ThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM [lib://MyDataFiles/File.QVD]

WHERE NOT EXISTS(PrimaryKey);

 

Inner Join SQL SELECT PrimaryKey FROM DB_TABLE;

 

If ScriptErrorCount = 0 then

STORE QV_Table INTO [lib://MyDataFiles/File.QVD];

Let LastExecTime = ThisExecTime;

End If