Sei sulla pagina 1di 10

Incremental Load

TBD – aggiornare qvw in qvf


Struttura cap
01 Daily Incremental Reloads (insert/update) - 1 o poche tables
05 Incremental Reloads – Deletion Flag
06 Incremental Reloads – No Deletion Flag

02 Multi-QVD Incremental Reloads ---- Molte Tables, anche sorgenti


diverse
03 Frequent Incremental Reloads (solo Insert) (si spera solo insert)
04 Hystorical Data Management
01 Overview...................................................1 02 Multi-QVD Incremental Reloads..........3
02 Cos’è?........................................................1 03 Frequent Incremental Reloads (solo
03 Cos’è il QVD?...........................................1 Insert).....................................................3
04 A cosa servono i QVD?............................1 04 Hystorical Data Management................4
01 Aumento della velocità di caricamento.1 05 Incremental Reloads – Deletion Flag....4
02 Diminuzione del carico sui server.........1 06 Incremental Reloads – No Deletion Flag
03 Consolidamento dati da applicazioni ................................................................5
Qlik multiple..........................................1 06 Esempi Pratici...........................................6
04 Incremental Load..................................1 01 Esempio New Insert..............................6
05 Basic Incremental Load Process...............2
01 Daily Incremental Reloads
(insert/update)........................................2

01 Overview
L’Incremental Load è un task script molto comune nelle operazioni di trasformazioni dati.
Permette di ridurre notevolmente i tempi durante operazioni complesse.

02 Cos’è?
Significa caricare solo i record nuovi o modificati da un database, non toccando i record che non
hanno subito cambiamenti.
L’incremental load può esser eseguito tramite l’utilizzo del formato dati compressi .qvd.

03 Cos’è il QVD?
QVD – è un file contenente una tabella di dati esportati da Qlik, in un formato nativo Qlik.
Un file qvd può esser scritto o letto soltanto da una risorsa Qlik.
La compressione permette di ottimizzare le performance rendendo la lettura/scrittura dei dati più
veloce e compatta – 10-100 volte più veloce, in relazione alle regole di normalizzazione del dato.

04 A cosa servono i QVD?


Nota: utilizzi generali
01 Aumento della velocità di caricamento
Considerando i flussi dati generati durante il caricamento, può esser conveniente l’utilizzo di
formati compressi qvd per rendere più veloce ed agevole quest’ultimo.
02 Diminuzione del carico sui server
Caricando i dati da un Database una sola volta, e gestendoli successivamente tramite qvd, si
riducono di molto i tempi e le sessioni di accesso.
03 Consolidamento dati da applicazioni Qlik multiple
Diversi qvd possono estrarre dati da applicazioni diversi, permettendo di combinarli in nuove app
04 Incremental Load
Caricamento di nuovi dati da database incrementali – fonti dati che aumentano e cambiano nel
tempo.
05 Basic Incremental Load Process
1. Caricamento dei nuovi dati da una Sorgente (processo lento su una base dati piccola)
2. Caricamento dei dati vecchi da QVD file (processo veloce su di una base dati grande)
3. Creazione nuovo QVD file
4. Si ripete la procedura per la tabella successiva

Vi sono differenti casi da prendere in esame a seconda della struttura dati in essere:
1. Daily Incremental Reloads (insert/update)
2. Multi-QVD Incremental Reloads
3. Frequent Incremental Reloads (solo Insert) – si utilizza un approccio di loading binario
4. Hystorical Data Management usando Daily/Monthly Stacked QVDs
5. Incremental Reloads (Insert/Update/Delete) con Deletion Flag disponibile
6. Incremental Reloads (Insert/Update/Delete) senza Deletion Flag
01 Daily Incremental Reloads (insert/update)

Vengono estratti i records nuovi e cambiati su base giornaliera (Data Set), per poi esser storicizzati
in formato QVD.
Ogni nuovo/cambiato record sarà associato ad una chiave univoca di riconoscimento (creata o
nativa).
Una volta che il Data Set è stato generato in formato qvd, verrà caricato sull’app.
Nel loading della nuova app sarà presente la clausola WHERE NOT EXISTS per concatenare i dati
vecchi con quelli nuovi.
Viene assunto:
 Tutti i dati nuovi e vecchi sono identificati da una chiave univoca
 Se viene aggiunto un dato con una chiave già presente sul’app questo verrà sovrascritto dal
nuovo
 Se viene aggiunto un dato non presente sull’app, questo verrà aggiunto
 È necessario sia presente un campo indicante la data di estrazione del dato
02 Multi-QVD Incremental Reloads

È concettualmente simile allo scenario precedente, ma adattato per applicazioni che condividono
più data files.
Viene usata l’estrazione incrementale per la creazione di QVD individuali relativamente a tabelle
logiche individuali.
Tutti i qvd generati verranno usati successivamente su una o più applicazioni.
03 Frequent Incremental Reloads (solo Insert)
TBD – Spiegare il commando ADD

È uno scenario consueto in caso di estrazioni frequenti nell’ordine di ore o minuti.


Richiede la creazione di un campo indicante il timestamp di estrazione (Data e Orario).
Consiste nell’Append diretto dei nuovi dati sull’applicazione finale.
04 Hystorical Data Management

Al termine di ogni giorno/mese, vengono estratti e salvati i dati in un qvd specifico.


Verrà creata una struttura di file qvd contenenti lo storico dei dati, a disposizione delle app Qlik.
05 Incremental Reloads – Deletion Flag

Questo approccio è possibile quando sulla sorgente dati i record da cancellare sono identificati da
un flag di delete.
Tramite un check su questo flag, tali record non verranno caricati nella base dati finale sull’app.
06 Incremental Reloads – No Deletion Flag

Se il Deletion Flag non è presente, diventa necessario un ulteriore passo.


Ovvero, dopo aver estratto i nuovi/modificati dati e concatenati nel qvd dei vecchi, verrà eseguita
una INNER JOIN delle chiavi primarie tra la base dati su QVD finale e la Sorgente Dati, in maniera
da eliminare tutti i record non presenti in entrambe.
06 Esempi Pratici
01 Esempio New Insert
Ho un data set con record aggiornato al 15 Gennaio 2016
Devo aggiungervi i dati aggiornati al 25 Gennaio 2016

Possiedo due sheets:

Incr1.xls  dati fino al 15 Gennaio 2016


Incr2.xls  dati aggiornati al 25 Gennaio 2016

1) Carico i dati vecchi – ovvero quelli non aggiornati

//1. File Load


table1:
LOAD
id,
"date",
"firsr name",
"second name"
FROM [lib://DataFiles/incr1.xlsx]
(ooxml, embedded labels, table is Sheet1);

2) Storicizzo i dati non aggiornati in un qvd


Elimino la tabella caricata per poter liberare spazio

//2. Store data on qvd


Store table1 into [lib://DataFiles/QVD/oldData.qvd];

Drop Table table1;

3) Carico i dati sull’app in una tabella chiamata Stored

//3. Load existing data from qvd


stored:
LOAD
id,
"date",
"firsr name",
"second name"
FROM [lib://DataFiles/QVD/oldData.qvd]
(qvd);

4) A partire dalla tabella storicizzati, genero una tabella logica dove inserisco l’unico valore
indicante la data massima dei dati non aggiornati.
L’obbiettivo è di avere il limite temporale inferiore che mi indicherà fino a che punto nel tempo ho
caricato i dati precedenti.
//4. Find the maximum date
Max_Date:
Load
Max(date) as MaxDate
Resident stored;

5) Creo la variabile MaxDate.

Funzione Peek()
Individua il valore di un campo in una tabella per riga.

Sintassi:

Peek(field_name[, row_no[, table_name ] ] )

Fied_name  nome del campo desiderato


Row_no  Opzionale: indica il valore della riga da dove prendere il
campo. Default: ultimo record letto
Table_name  Opzionale: tabella da cui prendere il campo. Default:
ultima tabella letta

Funzione Floor()
Arrotonda per eccesso un numero al multiplo più vicino di Step modificato in base al numero di
offset.

Sintassi:

Floor(x[, step[, offset]])

X  numero input
Step  Opzionale: Incremento di intervallo. Default: 1
Offset  Base dell’intervallo di fase. Default: 0

Esempi:

Floor(2.4)  2  Default floor restituisce l’intero di un decimale


Floor(4.2)  4
Floor(3.88, 0.1)  3.8  Intervallo da 3.8 <= x <= 3.9
Floor(3.88, 5)  0  Intervallo da 0 <= x <= 5
Floor(1.1, 1)  1  Intervallo da 1 <= x <= 2
Floor(1.1, 1, 0.5)  0.5  Intervallo da 0.5 <= x <= 1.5 (base 0.5)

Inoltre cancello la tabella stored in quanto serviva solo per recuperare il massimo della data.
Essendo una tabella storicizzata in qvd, il recupero successivo dei dati risulterà rapido.

//5. Store the maximum date in a variable


Let v_MaxDate = Floor(Peek('MaxDate'));

Drop Table stored;


6) Viene generata la nuova tabella stored_new a partire dallo sheet contenente i dati fino al 25
gennaio.
L’opzione where stabilisce che verranno presi soltanto i dati successivi alla data massima
precedentemente caricata sull’app.
Range da 15 Gennaio al 25 Gennaio.

//6. Pull the rows that are new from the update file
stored_new:
LOAD
id,
"date",
"firsr name",
"second name"
FROM [lib://DataFiles/incr2.xlsx]
(ooxml, embedded labels, table is Sheet1)
Where date > $(v_MaxDate);

7) I dati precedentemente memorizzati sul qvd, ovvero i dati vecchi, verranno concatenati ai nuovi
dati.

//7. Concatenate the new values with the old data qvd
Concatenate
Load
id,
"date",
"firsr name",
"second name"
FROM [lib://DataFiles/QVD/oldData.qvd]
(qvd);

Store stored_new into [lib://DataFiles/QVD/Data.qvd];

Potrebbero piacerti anche