Utilizzo dei file QVD per il carico incrementale

Il carico incrementale è un'operazione molto comune nei database. Viene definita come carico nullo, ma effettua un ricaricamento completo o parziale dei record dal database. Tutti gli altri dati devono essere già disponibili. I File QVD consentono di eseguire il carico incrementale nella maggior parte dei casi.

I passaggi di base del processo sono descritti di seguito:

1. Caricare i nuovi dati dalla tabella del database (un processo lento, ma viene caricato un numero limitato di record).

2. Caricare i vecchi dati dal file QVD (vengono caricati molti record, ma si tratta di un processo molto più veloce).

3. Creare un file QVD.

4. Ripetere il procedimento per ogni tabella caricata.

La complessità della soluzione attuale dipende dalla natura del database sorgente, ma è possibile identificare i seguenti casi principali seguenti:

1) Caso 1: Aggiungi solo (in genere, i file di log

2) Caso 2: Inserisci solo (nessun aggiornamento o eliminazione)

3) Caso 3: Inserisci e aggiorna (nessuna eliminazione)

4) Caso 4: Inserisci, aggiorna ed elimina

Di seguito sono illustrate le soluzioni per ognuno di questi casi. La lettura dei file QVD può essere eseguita in modalità ottimizzata oppure in modalità standard. (Il metodo impiegato viene selezionato automaticamente dal motore degli script QlikView in base alla complessità dell'operazione.) La modalità veloce è (approssimativamente) circa 10 volte più veloce della modalità standard o circa 100x più veloce del caricamento del database nella modalità normale.

Caso 1: 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 log (o un altro file in cui i record vengono aggiunti e non inseriti o eliminati) contenuto in un file di testo (nessun ODBC/OLE DB).

  • QlikView tiene traccia del numero di record che sono stati precedentemente letti e carica i record aggiunti alla fine del file.

Esempio:  

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

Caso 2: Inserisci solo (nessun aggiornamento o eliminazione)

Se i dati risiedono in un database diverso da un semplice file di log, l'approccio adottato nel caso 1 non funziona. Il problema potrà essere comunque risolto con un lavoro minimo. Si applicano le seguenti condizioni:

  • La sorgente dati può essere qualsiasi database.

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

  • È richiesto un campo ModificationDate (o simile) per consentire a QlikView di riconoscere quali record sono nuovi.

Esempio:  

QV_Table:

SQL SELECT PrimaryKey, X, Y FROM DB_TABLE

WHERE ModificationTime >= #$(LastExecTime)#

AND ModificationTime < #$(BeginningThisExecTime)#;

 

Concatenate LOAD PrimaryKey, X, Y FROM File.QVD (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).

Caso 3: 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.

  • QlikView carica i record inseriti nel database o aggiornati nel database dopo l’ultima esecuzione dello script

  • È richiesto un campo ModificationDate (o simile) per consentire a QlikView di riconoscere quali record sono nuovi.

  • È necessario un campo chiave primario affinché QlikView 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.

Esempio:  

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);

 

STORE QV_Table INTO File.QVD;

 

Caso 4: Inserisci, aggiorna ed elimina

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.

  • QlikView carica i record inseriti nel database oppure aggiornati dopo l'ultima esecuzione dello script.

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

  • È richiesto un campo ModificationDate (o simile) per consentire a QlikView di riconoscere quali record sono nuovi.

  • È necessario un campo chiave primario affinché QlikView 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.

Esempio:  

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