Parte IV — Progettazione fisica · Capitolo 13

Progettazione fisica: ETL e indici

~50 min di lettura6 widget interattivi11 tavole

In questo capitolo

  1. La progettazione dell'ETL
  2. L'estrazione dei dati: natura della sorgente e modalità
  3. L'estrazione incrementale: quattro tecniche
  4. Il risultato dell'estrazione
  5. Il caricamento: ODS, dimension table e fact table
  6. Trasformazione e pulizia
  7. Il refresh delle viste
  8. Indici per il data mart: i limiti dei B+-tree
  9. Gli indici bitmap
  10. Indici di join e indici star
  11. Su quali attributi creare indici
  12. Verifica le tue conoscenze

I capitoli 10, 11 e 12 hanno coperto la progettazione concettuale e logica: schemi di fatto, schemi a stella, viste materializzate. Questo capitolo chiude la metodologia con la progettazione fisica, che nelle slide del corso ha due grandi blocchi. Il primo è la progettazione dell'ETL: le procedure che portano i dati dalle sorgenti operazionali al data mart, dal livello estensionale dell'integrazione (capitolo 6) fino al caricamento delle dimension table e delle fact table con le chiavi surrogate. Il secondo è la scelta degli indici: le caratteristiche dei data mart — accessi in sola lettura, aggiornamento periodico, accessi ad ampie porzioni di dati — rendono i B+-tree non più sufficienti e aprono la strada agli indici bitmap, di join e star. È la materia che i quesiti d'esame riassumono in poche domande secche: quale tecnica di estrazione incrementale, quale indice per quale predicato.

1. La progettazione dell'ETL

Definizione — progettazione dell'ETL

Durante la fase di progettazione dell'ETL vengono definite le procedure necessarie a caricare all'interno del data mart i dati provenienti dalle sorgenti operazionali. Le procedure operano in due direzioni: dalle sorgenti operazionali all'ODS realizzano a livello estensionale le trasformazioni definite in fase di integrazione; dall'ODS al data mart conformano la struttura dei dati del livello riconciliato agli schemi a stella utilizzati in ambito multidimensionale.

La distinzione fra le due direzioni è importante perché corrisponde a due nature diverse dei dati. Fra le sorgenti e l'ODS i dati sono integrati e riconciliati: nascono dalle trasformazioni del capitolo 6, applicate però ai valori reali invece che agli schemi. Fra l'ODS e il data mart i dati vengono ridimensionati: gli schemi a stella richiedono chiavi surrogate, gerarchie denormalizzate e misure già pronte per l'aggregazione.

Sorgenti operazionali ODS livello riconciliato Data mart schemi a stella integrazione livello estensionale conformazione agli schemi a stella progettazione dell'ETL = definire le procedure di caricamento l'ODS realizza a livello estensionale ciò che l'integrazione ha definito a livello intensionale
Tavola 13.1 — Le due direzioni della progettazione ETL. Dalle sorgenti all'ODS si realizzano le trasformazioni dell'integrazione sui dati; dall'ODS al data mart si conforma la struttura del livello riconciliato agli schemi a stella.

L'alimentazione dello schema riconciliato

Il percorso che alimenta l'ODS attraversa la staging area: uno spazio utilizzato per memorizzare in via transitoria le informazioni necessarie all'esecuzione delle procedure. La terminologia delle slide distingue quattro operazioni:

OperazioneRuolo
EstrazioneOperazioni che permettono di acquisire i dati dalle sorgenti
PuliziaOperazioni che permettono di eliminare le incongruenze dovute a errori e omissioni
TrasformazioneOperazioni che conformano i dati delle sorgenti allo schema riconciliato
CaricamentoOperazioni necessarie a inserire i dati trasformati nell'ODS

Simulazione: il flusso di alimentazione dell'ODS

Avanzate le quattro operazioni e osservate dove risiede ciascun dato durante il percorso.

2. L'estrazione dei dati: natura della sorgente e modalità

Le operazioni di estrazione dipendono dalla natura dei dati presenti nelle sorgenti operazionali. Le slide classificano tre livelli di storicizzazione:

Transitoria. Il sistema mantiene solo l'immagine corrente dei dati, sovrascrivendo quelli che non sono più validi. Esempi tipici: dati di inventario, scorte di magazzino. Per l'estrazione è un caso difficile: dello stato precedente non resta nulla da leggere.

Semi-storicizzata. Il sistema mantiene un limitato numero di stati precedenti, e non è possibile determinare per quanto tempo ciascun dato verrà conservato. L'estrazione può trovare qualche stato passato, ma senza garanzie sulla completezza della storia.

Storicizzata. Tutte le modifiche intervenute nei dati vengono mantenute in un intervallo di tempo ben definito. Esempi tipici: dati bancari e assicurativi. È il caso più favorevole per l'estrazione incrementale, perché ogni stato passato è ancora leggibile.

Indipendentemente dalla natura dei dati, l'estrazione può avvenire in due modalità. L'estrazione statica estrae tutti i dati dei database sorgenti. L'estrazione incrementale estrae solo i dati modificati o inseriti nell'intervallo di tempo intercorso dall'ultima estrazione, e può essere immediata (le modifiche vengono rilevate e catturate nel momento in cui si verificano) oppure ritardata (le modifiche vengono individuate a posteriori, analizzando tracce lasciate dal sistema).

MODALITÀ DI ESTRAZIONE Statica Incrementale immediata ritardata la natura dei dati (transitoria, semi-storicizzata, storicizzata) condiziona le tecniche incrementali
Tavola 13.2 — Modalità di estrazione. La statica estrae tutti i dati; l'incrementale estrae solo le modifiche dall'ultima estrazione, con rilevamento immediato o ritardato.

3. L'estrazione incrementale: quattro tecniche

Le slide presentano quattro tecniche di estrazione incrementale, che si distinguono per il meccanismo con cui le modifiche vengono individuate e per il momento in cui vengono catturate.

1. Estrazione assistita dall'applicazione

Tecnica di estrazione immediata. Le modifiche vengono rilevate da specifiche funzioni implementate direttamente all'interno delle applicazioni OLTP, che le segnalano all'estrattore. Richiede quindi la modifica delle applicazioni; è utile con sistemi legacy che non forniscono sistemi di triggering o log, e trova applicazione anche nei sistemi moderni quando esiste un livello di API comune a tutte le applicazioni: una sola modifica serve per tutti gli accessi di uno stesso tipo.

2. Estrazione basata su log

Tecnica di estrazione ritardata. Le modifiche vengono memorizzate in appositi file prodotti dal DBMS. Il problema: interpretare il contenuto dei log può risultare molto complesso, perché il formato è normalmente proprietario dello specifico DBMS. È consigliabile solo quando il modulo di estrazione è fornito direttamente dal produttore del DBMS.

3. Estrazione basata su trigger

Tecnica di estrazione immediata. Le modifiche vengono individuate mediante funzioni basate su eventi implementate e controllate direttamente nel DBMS (i trigger). Per motivi prestazionali non è possibile adottarla in modo estensivo: richiederebbe al DBMS di monitorare continuamente tutte le transazioni potenzialmente in grado di innescare un trigger.

4. Estrazione basata su marche temporali

Tecnica di estrazione ritardata. Prevede la modifica dello schema del database, che dovrà contenere uno o più campi necessari a contrassegnare i record modificati. Il modulo di estrazione opera a posteriori, individuando il tipo di modifica subita dai dati grazie alle marche.

ESTRAZIONE INCREMENTALE — QUATTRO TECNICHE Assistita dall'applicazione immediata Basata su log ritardata Basata su trigger immediata Marche temporali ritardata funzioni nelle applicazioni · file di log del DBMS · trigger nel DBMS · campi di marcatura nello schema immediate = catturano la modifica mentre avviene · ritardate = la individuano a posteriori log: formato proprietario, solo con modulo del produttore · trigger: limiti prestazionali marche temporali: efficacia dipendente dalla struttura del sistema operazionale
Tavola 13.3 — Le quattro tecniche di estrazione incrementale. L'asse immediata/ritardata divide il rilevamento «al momento» da quello «a posteriori»; log e trigger sono legati al DBMS, l'applicazione e le marche temporali richiedono modifiche al codice o allo schema.
Il limite delle marche temporali

L'efficacia della tecnica basata su marche temporali dipende dalla struttura stessa del sistema operazionale: se i dati sono transitori o semi-storicizzati, l'estrazione basata su marche temporali non può identificare gli stati intermedi di quei record modificati più volte durante l'intervallo di aggiornamento. L'esempio delle slide è il record del vino Barolo: estratto l'1/4/2002 con quantità 100, il 2/4/2002 la quantità diventa 200, il 3/4/2002 diventa 150. L'estrazione del 3/4/2002 legge lo stato corrente (150) e la marca temporale segnala la modifica — ma la modifica intermedia (200) è persa: non è mai stata estratta e dello stato intermedio non resta traccia.

Esercizio: quale tecnica di estrazione?

Data la situazione descritta, scegliete la tecnica di estrazione incrementale appropriata.

4. Il risultato dell'estrazione

Qualunque tecnica incrementale si utilizzi, il risultato della fase di estrazione consiste nell'insieme di record della sorgente modificati, aggiunti o cancellati rispetto alla precedente esecuzione della procedura di estrazione. I dati risiedono nella staging area.

Per facilitare le fasi successive è opportuno associare a ogni record estratto il tipo di operazione (Inserimento, Modifica, Cancellazione) che ne ha generato la variazione. Nell'esempio delle slide, fra la situazione al 4/4/2002 e quella al 6/4/2002 la differenza incrementale contiene quattro record: il record 3 (Barbera) è stato cancellato (C), il record 4 (Sangiovese) è stato modificato (M, da 45 a 145), i record 5 e 6 (Vermentino, Trebbiano) sono stati inseriti (I).

SITUAZIONE AL 4/4/2002 SITUAZIONE AL 6/4/2002 cod prodotto cliente qtà 1 Greco di tufo Malavasi 50 2 Barolo Maio 150 3 Barbera Lumini 75 4 Sangiovese Cappelli 45 cod prodotto cliente qtà 1 Greco di tufo Malavasi 50 2 Barolo Maio 150 4 Sangiovese Cappelli 145 5 Vermentino Maltoni 25 6 Trebbiano Maltoni 150 DIFFERENZA INCREMENTALE cod prodotto cliente qtà oper 3 Barbera Lumini 75 C 4 Sangiovese Cappelli 145 M 5 Vermentino Maltoni 25 I 6 Trebbiano Maltoni 150 I C = cancellazione M = modifica I = inserimento
Tavola 13.4 — Il risultato dell'estrazione incrementale. La differenza fra due esecuzioni consecutive produce i record variati con il tipo di operazione (I, M, C), pronti per le fasi successive dalla staging area.

5. Il caricamento: ODS, dimension table e fact table

Dalla staging area all'ODS

La modalità di caricamento dei dati dalla staging area all'ODS dipende dalla tecnica utilizzata in fase di estrazione e dal livello di storicizzazione dell'ODS:

Nota del redattore

Il livello di storicizzazione dell'ODS dipende da quello delle sorgenti operazionali e dai requisiti utente relativi alla reportistica operativa: un ODS storicizzato è il presupposto per le gerarchie dinamiche di tipo III del capitolo 12.

Il caricamento delle dimension table

Il caricamento di una dimension table richiede quattro passi: identificazione dei dati da caricare; sostituzione degli identificatori con chiavi surrogate; verifica delle corrispondenze identificatori-chiavi surrogata tramite le tabelle di look-up; caricamento delle tuple nella dimension table. La chiave surrogata di una tupla già presente viene riusata; per le tuple nuove viene generata una nuova chiave.

STAGING AREA LOOK-UP DIMENSION TABLE Tuple della DT aggiornate/inserite ID1 attr1 ID2 attr3 ID3 attr5 attr6 ID2 chiaveS ID3 chiaveS chiaveS attr1 attr3 attr5 attr6 verifica corrispondenze caricamento nella DT gli identificatori operazionali (ID) vengono sostituiti con le chiavi surrogate (chiaveS) la tabella di look-up mantiene la corrispondenza fra identificatori e chiavi
Tavola 13.5 — Caricamento di una dimension table. La staging area fornisce le tuple variate; la tabella di look-up mappa gli identificatori operazionali sulle chiavi surrogate già assegnate; la dimension table riceve le tuple da inserire o aggiornare.

Il caricamento delle fact table

Il caricamento delle fact table segue l'alimentazione delle dimension table, per poter rispettare i vincoli di integrità referenziale. Anche qui si identificano i dati da caricare e si sostituiscono gli identificatori con le chiavi surrogate, usando le tabelle di look-up; alle chiavi si aggiungono le misure (mis 1, mis 3, mis 5, mis 6 nell'esempio delle slide).

Esercizio: cosa succede a ogni passo?

Scegliete l'esito corretto per ciascuna situazione di caricamento.

6. Trasformazione e pulizia

L'insieme delle operazioni atte a garantire la correttezza e la consistenza dei dati presenti nel livello riconciliato. Le slide classificano le sorgenti di errore in quattro famiglie:

FamigliaEsempio
Errori di battituravalori digitati male nei sistemi operazionali
Differenza di formato dei dati nello stesso campodate in formati diversi, maiuscole/minuscole
Inconsistenza tra valori e descrizione dei campievoluzione del modo di operare dell'azienda, evoluzioni della società, convenzioni interne ai reparti diverse da quelle generali del sistema informativo
Inconsistenza tra valori di campi correlatiCittà='Bologna' e Regione='Lazio' nella stessa tupla
Prevenzione

La maggior parte delle inconsistenze può essere prevenuta rendendo più rigorose le regole di inserimento dei dati nelle applicazioni del sistema operazionale.

Le tecniche di pulizia

TECNICHE DI PULIZIA Dizionari look-up per sinonimi e abbreviazioni dominio noto e limitato battitura · formato Ad hoc regole specifiche del dominio applicativo equazioni (profitto = …) outliers (>20%) Fusione approssimata record corrispondenti senza identificatori comuni join approssimati purge/merge problem la maggior parte delle inconsistenze può essere prevenuta con regole di inserimento più rigorose nei sistemi operazionali, non nel data mart
Tavola 13.6 — Le tecniche di pulizia. I dizionari coprono domini noti e limitati; le tecniche ad hoc codificano regole di dominio; la fusione approssimata trova corrispondenze senza chiavi comuni.

Esercizio: quale tecnica di pulizia?

Data l'inconsistenza descritta, scegliete la famiglia di tecniche più adatta.

7. Il refresh delle viste

Le viste materializzate del capitolo 12 vanno aggiornate quando arrivano nuovi dati. Il problema è la scelta della vista aggiornata che minimizza il costo di aggiornamento: la risposta delle slide è semplice e diretta — è la più piccola vista che permette di risolvere l'interrogazione.

RETICOLO MULTIDIMENSIONALE {a,b} {a',b} {a,b'} {b} {a',b'} {a} {b'} {a'} {} vista da alimentare
Tavola 13.7 — Il refresh delle viste. Fra le viste che risolvono l'interrogazione, si aggiorna la più piccola: nel reticolo, la vista {a', b'} è quella che minimizza il costo di aggiornamento.

Il collegamento con l'aggregate navigator del capitolo 12 è immediato: se il navigator sceglie la vista che minimizza il costo di esecuzione delle interrogazioni, il refresh sceglie quella che minimizza il costo di aggiornamento — e in entrambi i casi la logica è la stessa, scegliere la vista più piccola che «fa il lavoro».

8. Indici per il data mart: i limiti dei B+-tree

Le specifiche caratteristiche dei data mart permettono di utilizzare classi di indici diverse dal ben noto B+-tree utilizzato nella maggior parte dei DBMS commerciali:

Alcuni indici sono nati in conseguenza delle esigenze di data warehousing; altri erano preesistenti ma non venivano utilizzati. Le tre classi citate dalle slide sono gli indici bitmap, gli indici di join e gli indici star.

Come funziona un B+-tree

Nei B+-tree le foglie contengono tutti i valori di chiave; i nodi interni, organizzati come un B-tree, costituiscono solo una mappa per consentire una rapida localizzazione delle chiavi e memorizzano dei separatori.

Perché i B+-tree non sono più sufficienti

Conclusione delle slide

I B+-tree non sono più sufficienti ma rimangono ancora molto utili: il punto non è abbandonarli, ma affiancarli con indici pensati per la bassa selettività e per i join a stella.

9. Gli indici bitmap

Definizione — indice bitmap

Un indice bitmap su un attributo è composto da una matrice di bit contenente tante righe quante sono le tuple della relazione e tante colonne quanti sono i valori distinti (di chiave) dell'attributo. Il bit (i, j) è posto a TRUE se nella tupla i-esima è presente il valore j-esimo.

L'esempio delle slide costruisce un indice bitmap sulla Posizione della tabella impiegati, con sei valori distinti: Ingegnere, Consulente, Manager, Programmatore, Assistente, Ragioniere. La matrice ha una riga per impiegato (RID 1–5) e una colonna per posizione: l'impiegato con RID 1 è un Manager, quindi la sua riga ha un solo bit a 1, nella colonna Manager.

INDICE BITMAP SU POSIZIONE RID Ing. Cons. Man. Prog. Assis. Rag. 1 0 0 1 0 0 0 2 0 0 0 1 0 0 3 0 0 0 0 1 0 4 0 0 0 1 0 0 5 0 0 0 0 0 1 l'impiegato con RID 1 è un Manager una colonna per valore distinto · un bit a TRUE per tupla la cardinalità dell'attributo determina il numero di colonne
Tavola 13.8 — La matrice di bit dell'indice bitmap sulla Posizione. Ogni tupla ha esattamente un bit a 1 per la colonna del proprio valore.

Implementazione e vantaggi

Normalmente i bitmap sono associati a B+-tree le cui foglie contengono vettori di bit invece di RID. La valutazione di un predicato segue quattro passi: si naviga il B+-tree, si caricano i vettori di bit corrispondenti, si determina quali bit sono posti a TRUE e infine si recuperano le tuple corrispondenti ai RID.

L'esempio delle slide è la domanda «Quanti maschi in Emilia-Romagna sono assicurati?». Si prendono i vettori di bit delle tre condizioni (sesso = M, assicurato = Sì, regione = E/R) e se ne fa l'AND vettoriale: il numero di bit a 1 nel risultato è la risposta — senza mai leggere le tuple.

RID Sesso Assic. Regione 1 M No LO 2 M Sì E/R 3 F No LA 4 M Sì E/R Sesso=M Assic.=Sì Regione=E/R 1 0 0 1 1 1 0 0 0 1 1 1 AND = 2 0 1 gli operatori binari elaborano i predicati senza accedere alle tuple I/O molto basso: si leggono solo i vettori di bit necessari
Tavola 13.9 — AND vettoriale di tre bitmap. La risposta («quanti maschi in E/R assicurati?») è il conteggio dei bit a 1 del vettore risultante, senza accesso ai dati.

Occupazione su disco

Gli indici bitmap sono adatti ad attributi con ridotta cardinalità: ogni nuovo valore distinto richiede un ulteriore vettore di bit, e all'aumentare del numero di chiavi distinte aumenta la sparsità della matrice. Con NR = 10.000.000 e puntatori da 4 byte, il confronto fra B-tree e bitmap è:

IndiceSpazio
B-treeNR × Len(Pointer) = 10.000.000 × 32 bit
BitmapNR × NK × 1 bit

Si ha un risparmio di spazio se densità media ≥ 1 / Len(RID); la compressione delle matrici riduce il fattore di crescita della dimensione. Per valori piccoli di NK (attributi a bassa cardinalità) il bitmap occupa una frazione del B-tree; al crescere di NK la matrice si sparge e il vantaggio si riduce — il grafico delle slide mostra le due curve che si incrociano intorno a qualche decina di chiavi distinte.

Esercizio: bitmap o B+-tree?

Data la selettività del predicato, scegliete l'indice più adatto.

10. Indici di join e indici star

Gli indici di join

Le interrogazioni su schemi a stella richiedono sempre uno o più join. Un indice di join calcola in anticipo le tuple che soddisfano un particolare predicato di join, memorizzando le coppie di RID corrispondenti. Nell'esempio delle slide, l'indice contiene le coppie che soddisfano Vendite.IDNegozi = Negozi.IDNegozi: la riga 1 di Vendite (IDNegozi 123) corrisponde alla riga 1 di Negozi, e così via.

VENDITE NEGOZI RID IDNegozi IDSett. IDProd. Quantità Guadagno 1 123 13 41 100 10,00 2 123 24 17 150 15,00 3 367 36 94 350 35,00 4 367 27 11 120 12,00 IDNegozi Negozio Città Stato Agente 123 N1 RM I R1 367 N3 MI I R2 INDICE DI JOIN (V-Rid, N-rid) 1 1 2 1 3 2 4 2 l'indice contiene le coppie di RID che soddisfano Vendite.IDNegozi = Negozi.IDNegozi
Tavola 13.10 — Un indice di join. Il join tra fact table e dimension table viene precalcolato: l'indice memorizza le coppie di RID che soddisfano il predicato di join.

Gli indici star

Gli indici star estendono il concetto di indice di join a più tabelle, concatenando i valori delle colonne della fact table e di più dimension table. L'esempio delle slide collega Vendite con Settimana e Negozi: ogni riga dell'indice contiene la quadrupla (VRID, NRID, SID, PID) che rappresenta una combinazione di tuple che soddisfa i join. Tre osservazioni dalle slide:

Attenzione

Il numero di indici star necessari a rispondere efficientemente a interrogazioni che coinvolgono un insieme arbitrario di dimensioni è funzione del numero di permutazioni dell'insieme di dimensioni: cresce rapidamente, ed è per questo che la scelta va guidata dal carico di lavoro.

Esercizio: quale indice per il data mart?

Data la caratteristica del data mart o del predicato, scegliete la classe di indici appropriata.

11. Su quali attributi creare indici

Le slide chiudono la parte sugli indici con i consigli operativi: creare indici su

Il caveat delle statistiche

Se il DBMS non utilizza statistiche per definire il piano di accesso, la creazione degli indici deve essere valutata con molta attenzione: senza stime di selettività e cardinalità, un indice scelto a priori può peggiorare le prestazioni invece di migliorarle.

Le slide illustrano la logica di scelta con un esempio ispirato a Redbrick 6.0, un DBMS relazionale storico pensato per il data warehousing. L'algoritmo decide come rispondere a una query interrogandosi su: quante dimension table sono coinvolte da condizioni (0, 1, 2 o più); se esiste un indice sulla fact table che inizia con la chiave della prima dimension table condizionata (IXFT1 su k1); se la query richiede di accedere ai dati della fact table. A seconda delle risposte si accede alla dimension table e poi all'indice, si esegue un hash join, si fa una RID intersection fra le condizioni, o si scandisce la fact table facendo il join con tutte le dimension table richieste dal group-by set — terminando con il raggruppamento delle tuple. La morale è che la scelta dell'indice non è indipendente dal piano di accesso.

SI CONSIGLIA DI CREARE INDICI SU… Chiavi importate FT velocità dei join B+-tree · join · star bitmapped join index Attributi dimensionali spesso in selezione B+-tree o bitmap Misure spesso in clausole di selezione bitmap evoluti senza statistiche il piano di accesso non è definito: la creazione degli indici va valutata con molta attenzione
Tavola 13.11 — Le regole per la creazione degli indici. Chiavi importate della fact table per i join; attributi dimensionali e misure in selezione per i predicati; l'avvertenza finale sulle statistiche del DBMS.

Verifica le tue conoscenze

Che cosa si definisce nella progettazione dell'ETL e in quali due direzioni operano le procedure?

Si definiscono le procedure necessarie a caricare all'interno del data mart i dati provenienti dalle sorgenti operazionali. Due direzioni: (1) dalle sorgenti operazionali all'ODS, realizzando a livello estensionale le trasformazioni definite in fase di integrazione; (2) dall'ODS al data mart, conformando la struttura del livello riconciliato agli schemi a stella.

Quali sono le quattro operazioni che alimentano lo schema riconciliato?

Estrazione (acquisire i dati dalle sorgenti), pulizia (eliminare le incongruenze dovute a errori e omissioni), trasformazione (conformare i dati allo schema riconciliato), caricamento (inserire i dati trasformati nell'ODS). Tutte transitano dalla staging area, spazio di memorizzazione transitoria.

Come si classificano i dati delle sorgenti e le modalità di estrazione?

Per natura dei dati: transitoria (solo immagine corrente), semi-storicizzata (limitato numero di stati precedenti), storicizzata (tutte le modifiche mantenute). Per modalità: estrazione statica (tutti i dati) e incrementale (solo i dati modificati/inseriti dall'ultima estrazione), che può essere immediata o ritardata.

Quali sono le quattro tecniche di estrazione incrementale?

Assistita dall'applicazione (immediata: funzioni dentro le applicazioni OLTP); basata su log (ritardata: file di log del DBMS, formato proprietario, consigliata solo col modulo del produttore); basata su trigger (immediata: funzioni basate su eventi nel DBMS, non estensibile per motivi prestazionali); basata su marche temporali (ritardata: campi di marcatura nello schema, opera a posteriori).

Qual è il limite della tecnica basata su marche temporali?

Se i dati sono transitori o semi-storicizzati, non può identificare gli stati intermedi dei record modificati più volte durante l'intervallo di aggiornamento: resta solo l'ultimo stato, e le modifiche intermedie vanno perse (esempio Barolo: 100 → 200 → 150, l'estrazione legge 150 e perde il 200).

In che cosa consiste il risultato dell'estrazione incrementale?

Nell'insieme di record della sorgente modificati, aggiunti o cancellati rispetto alla precedente esecuzione, residenti nella staging area. A ogni record conviene associare il tipo di operazione (Inserimento, Modifica, Cancellazione) che ne ha generato la variazione.

Come si caricano i dati dalla staging area all'ODS?

Estrazione statica → riscrittura completa. Estrazione incrementale: ODS non storicizzato → si memorizza solo il tipo di operazione; ODS storicizzato → si memorizzano anche le marche temporali di validità. Il livello di storicizzazione dell'ODS dipende dalle sorgenti e dai requisiti di reportistica operativa.

Come avviene il caricamento delle dimension table e delle fact table?

Si identificano i dati da caricare, si sostituiscono gli identificatori con chiavi surrogate verificando le corrispondenze nelle tabelle di look-up, quindi si caricano le tuple. Le fact table si caricano dopo le dimension table per rispettare i vincoli di integrità referenziale.

Quali famiglie di inconsistenze affronta la trasformazione e pulizia, e con quali tecniche?

Errori di battitura, differenze di formato, inconsistenze tra valori e descrizione, inconsistenze tra campi correlati (Bologna/Lazio). Tecniche: basate su dizionari (look-up per sinonimi e abbreviazioni, dominio noto e limitato), ad hoc (equazioni, outliers), fusione approssimata (join approssimati, purge/merge). La prevenzione con regole di inserimento rigorose è la strada migliore.

Quale vista si sceglie per il refresh e perché?

La più piccola vista che permette di risolvere l'interrogazione: è quella che minimizza il costo di aggiornamento, esattamente come l'aggregate navigator sceglie la vista che minimizza il costo di esecuzione.

Perché i B+-tree non sono più sufficienti nei data mart?

Danno buone prestazioni con selettività molto elevata, ma le interrogazioni OLAP usano predicati a bassa selettività (es. sesso); sono più adatti a interrogazioni semplici e richiedono molto spazio. Non sono più sufficienti, ma rimangono molto utili.

Come è fatto un indice bitmap e quali sono i suoi vantaggi?

Una matrice di bit: una riga per tupla, una colonna per valore distinto; bit (i,j) = TRUE se la tupla i ha il valore j. Vantaggi: spazio ridotto, I/O basso (si leggono solo i vettori), ottimi per query senza accesso ai dati, operatori binari (AND/OR/NOT) per i predicati. Adatti a cardinalità ridotta: si risparmia spazio se densità media ≥ 1/Len(RID).

Che cosa sono gli indici di join e gli indici star?

L'indice di join calcola in anticipo le coppie di RID che soddisfano un predicato di join. L'indice star estende il concetto a più tabelle, concatenando le colonne della fact table e di più dimension table: efficiente sulle colonne iniziali, sub-ottimo altrimenti; il numero di indici necessari cresce con le permutazioni delle dimensioni.

Su quali attributi si consiglia di creare indici?

Chiavi importate della fact table (per i join: B+-tree, indici di join, star, bitmapped join index), attributi dimensionali spesso in selezione (B+-tree o bitmap), misure spesso in clausole di selezione (bitmap evoluti). Se il DBMS non usa statistiche, la creazione va valutata con molta attenzione.