ssis - integration services

41
SQL Saturday #176 Pordenone, Italy Using Integration Services to load the DWH 17/11/201 2 | SQL Saturday #176 – Pordenone, Italy

Upload: marco-pozzan

Post on 05-Dec-2014

517 views

Category:

Documents


1 download

DESCRIPTION

Sql saturday #176 Pordenone

TRANSCRIPT

Page 1: SSIS - Integration Services

SQL Saturday #176

Pordenone, Italy

Using Integration Services

to load the DWH

17/11/2012 | SQL Saturday #176 – Pordenone, Italy

Page 2: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy17/11/2012 | 2 |

Page 3: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

#sqlsat176

17/11/2012 | 3 |

Page 4: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Marco Pozzan

Lavoro con SQL server dalla versione 2000 Lavoro nella BI dal 2005 Presidente della community 1nn0va (

www.innovazionefvg.net) Relatore in conferenze su SQL Server e BI in Friuli

Venezia Giulia e docente sulla BI. Project menager del reparto Business Intelligence della

CGN S.P.A. (www.cgn.it) Riferimenti:

twitter: @marcopozzan email: [email protected] site: www.marcopozzan.it

17/11/2012 | 4 |

Page 5: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Agenda

Gli strumenti di ETL Caricamento tabella delle dimensioni

Slowly Changing Dimensions Rolling Your Own ,T-SQL Merge, SCD Wizard, Other

Caricamento tabella dei fatti Recupero chiavi surrogate con dimensioni SCD 1 e 2 Inferred members

Best Practices per le performance Progettazione DWH Progettazione SSIS

17/11/2012 | 5 |

Page 6: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Strumenti di ETL

Gli strumenti di ETL: Estraggono dati da fonti diverse Trasformano i dati secondo le regole di business Caricano i dati nelle strutture di destinazione (di

solito tabelle del DWH)

La piattaforma per la costruzione di un ETL che useremo è Sql Server Integration Services (SSIS) di Microsoft: Versione pre 2012 : BIDS Versione 2012 : Data Tools

17/11/2012 | 6 |

Page 7: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

SSIS - Caratteristiche

Caratteristiche: Tool grafici per la creazione di package Task per le funzionalità di workflow Task per le funzionalità di data flow Task amministrativi/email/FTP/file system

Programmabilità Scripting (task sia nel control flow, sia nel data flow)

Estendibilità attraverso il modello ad oggetti è possibile creare task custom programmi esterni

17/11/2012 | 7 |

Page 8: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

SSIS – Scenari

Popolamento di data warehouse e data mart Integrazione di dati eterogenei Pulizia e standardizzazione dei dati

Automatizzazione di funzionalità amministrative Backup / restore, copia di oggetti di SQL Server,

process di cubi OLAP

17/11/2012 | 8 |

Page 9: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Caricamento delle dimensioni

Ci sono due tipi di caricamento delle dimensioni: Full load : Cancello sempre i dati e poi ripopolo

la dimensione Incremental load: non cancello mai i dati

Carico i dati dalla sorgente dati e con le SCD gestisco i cambiamenti dei dati

Change Data Capture (CDC)

17/11/2012 | 9 |

Page 10: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Slowly Changing Dimensions

SCD = Dimensione che varia nel tempo Attenzione sono gli attributi che cambiano!!!

Si basano su due principi fondamentali Determinare il cambiamento degli attributi Confronto tra chiavi di business

17/11/2012 | 10 |

Page 11: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Slowly Changing Dimensions

Esempio: DWH analisi clienti Attributo del cliente “Città” Nel 2012 il cliente Elena sposta di città la propria

azienda da Milano a Pordenone I dati di Elena a quale “Città” vanno associati?

Pordenone: risulterà cliente della zona di Pordenone, anche se non è vero, Elena era di Milano!

Milano: I dati sono legati alla città corretta se l’analisi la facevo prima del 2012.

Dipende dal tipo di analisi che dobbiamo fare

17/11/2012 | 11 |

Page 12: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Slowly Changing Dimensions – SCD 1

Tratteremo solo due tipi di SCD (tipo 1,tipo 2) Tipo 1: Si tiene solo la versione corrente

quindi un’ analisi “AS IS” e non ci interessa il passato Nel nostro caso allora Elena ci interessa sapere

che ora risulta avere l’azienda a Pordenone.

Tutte le volte che cambia un attributo buttiamo via il valore attuale e lo sostituiamo con il nuovo.

17/11/2012 | 12 |

Page 13: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Slowly Changing Dimensions – SCD 2

Tipo 2: Si ottiene una analisi “AS WAS” e quindi quando varia un attributo: Si mantiene tutta la storia Creiamo un nuovo record e invalidiamo il record

attuale

Tutto il passato rimane congelato Nel nostro caso sappiamo che prima del 2012

Elena aveva l’azienda a Milano e che ora è a Pordenone.

17/11/2012 | 13 |

Page 14: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Slowly Changing Dimensions

SCD Wizard (Free) Rolling Your Own (Free) T-SQL Merge (Free) Third-Party

Kimball Component (Free) Table Difference Component (non più free:

CozyRoc’s)

17/11/2012 | 14 |

Page 15: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

SCD Wizard

Vantaggi Facile il setup iniziale

Svantaggi Tutti i confronti devono essere esatti Non posso usare tutti i providers Lentezza nelle lookup (non usa la cache) per

ogni riga sorgente si fa la lookup sulla dimensione

Difficile la modifica delle regole di business

17/11/2012 | 15 |

Page 16: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Rolling Your Own

Vantaggi Molto veloce Può determinare i membri cancellati Molto customizzabile e con un facile debug

Svantaggi Alla vista sembra complicato tempo per svilupparlo perchè richiede una

duplicazione del lavoro.

17/11/2012 | 16 |

Page 17: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

T-SQL Merge

Vantaggi Molto efficiente

Svantaggi Un T-SQL molto complicato con difficoltà di

debug Difficile determinare o impostare una regola di

cambiamento delle righe Se fallisce una riga fallisce tutto

17/11/2012 | 17 |

Page 18: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

T-SQL Merge

Si basa tutto sul comando MERGE: novità di Sql Server 2008 possibilità di eseguire delle istruzioni di insert,

update e delete basandosi sui risultati di una join tra una tabella di origine ed una di destinazione.

Attraverso l’esecuzione di un solo comando E' comoda per operazioni di sincronizzazione tra

due tabelle nel caso esistano delle differenze.

17/11/2012 | 18 |

Page 19: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

T-SQL Merge

17/11/2012 | 19 |

EmployeeID (S) EmployeeName (S)

103 Bob

104 Steave

EmployeeID (T) EmployeeName (T)

100 Mary

101 Sara

102 Stefano

Page 20: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Kimball Component

Anche se riporta il nome di Kimball non è affiliato o supportato dal gruppo Kimball infatti l’utlima versione è SCD dimension merge (http://dimensionmergescd.codeplex.com/)

17/11/2012 | 20 |

Page 21: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Kimball Component

Vantaggi Facile da configurare e riconfigurare Veloce esecuzione Completamente configurabile a livello di matching

Svantaggi Usa molta RAM e CPU Non ha un buon supporto

17/11/2012 | 21 |

Page 22: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Change data capture - CDC

17/11/2012 | 22 |

Gestione manuale su sql server 2008

Supporto nativo su sql server 2012 e permette anche di usare la stessa tecnologia su Oracle grazie ad Attunity

Non appesantisce l’istanza di SQLServer al contrario di altre soluzioni manuali

Page 23: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Change data Capture - CDC

17/11/2012 | 23 |

Si basa sul LSN (Last Sequence Number): è il puntatore ai log

Capture instance: finestra validità dei dati. sys.fn_cdc_get_min_lsn(): limite inferiore

sys.fn_cdc_get_max_lsn():limite superiore sys.fn_cdc_map_lsn_to_time: converte il puntatore in data Esempio:

sys.fn_cdc_map_lsn_to_time(sys.fn_cdc_get_max_lsn())

Page 24: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Change data Capture - CDC

17/11/2012 | 24 |

La tabella che traccia le modifiche si trova nelle system tables e ha lo stesso nome tabella controllata + _CT: campi della tabella controllata Campo __$start_lsn: inizio transazione nei log Campo __$end_lsn: termine transazione Campo __$operation: operazione effettuata Campo __$update_mask: maschera che indica il

campo

Page 25: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Change data capture - CDC

17/11/2012 | 25 |

Per abilitare il CDC bisogna avere abilitato SQL Server Agent (sys.sp_cdc_enable_db)

Per definire le tabelle da monitorare: sys.sp_cdc_enable_table @source_schema =

N'import', @source_name = N'Product_Init', @role_name = N'cdc', @supports_net_changes = 1

Per recupera le transazioni dalla tabella X delle modifiche: Cdc.fn_cdc_get_all_changes_dbo_X Esempio: Cdc.fn_cdc_get_all_changes_dbo_Prodotti

Page 26: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Caricamento tabella dei fatti

Ci sono due tipi di caricamenti Full load: carico sempre tutta la tabella dei fatti

performance molto basse Esempio: Se ho la tabella delle vendite con 1.000.000

vendite il 16-11-2012 e 2.000.000 il 17-11-2012 allora il caricamento del 17 sarà di 3.000.000 righe di cui 1.000.000 le avevo già caricate il 16

Tempi di caricamento si allungano sempre più Incremental Load

si leggono solo i record che non sono già caricati nel nostro sistema DWH

17/11/2012 | 26 |

Page 27: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Caricamento tabella dei fatti

Ma come possiamo garantire di leggere "solo" i record che non sono "già" letti?

Aggiungiamo un campo "data entry" : rappresenta la data in cui si è verificato quel fatto Dopo ogni caricamento si salva in una tabella

"Batch" la data massima caricata Il giorno dopo dobbiamo estrarre i record che

hanno una data successiva quella salvata nella tabella batch

17/11/2012 | 27 |

Page 28: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Caricamento tabella dei fatti

Estrazione dei dati dei fatti dalla sorgente Recuperare le chiavi surrogate dalle dimensioni

attraverso la b-key con: Lookup transformation range-lookup (SCD 2):

Lookup transformation (semplice ma poco performante per tante righe)

Merge join (leggermente complicato rispetto alla lookup ma offre migliori performance con tante righe)

Script (molto complicato ma il più performante)

http://blogs.msdn.com/b/mattm/archive/2008/11/25/lookup-pattern-range-lookups.aspx (Matt Masson)

17/11/2012 | 28 |

Page 29: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Inferred member - Problema

Quando si esegue una ricerca sulle dimensioni per ottenere la chiave surrogata cosa può capitare? Se si trova una corrispondenza della b-key allora

si ottiene la chiave surrogata e si inserisce il dato nella tabella dei fatti.

Se non si trova una corrispondenza: Inferred member

17/11/2012 | 29 |

Page 30: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Inferred member - Soluzione

Due modi per risolvere il problema: (offline analysis)

Usare il “record tappo”: assegnare una chiave predeterminata della dimensione (-1,n/n, unknown member,…

Redirect delle righe in un file o in una tabella di errore

(on-line analysis) creare e assegnare una nuova chiave surrogata nella

dimensione al volo.

17/11/2012 | 30 |

Page 31: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Inferred member – on-line analysis

Tre modi per realizzare on-line analysis

17/11/2012 | 31 |

Metodo Svantaggi Vantaggi

Usando le store procedure

Molto complicato e lento lo sviluppo

Non necessita di SSIS

SSIS – Utilizzando un doppio lookup

Problemi di prestazioni sulla Union All usata per unire le righe con gli inferred member con le altre righe.

Si ha una buona riusabilità e velocità nella realizzazione

SSIS – Script Component

Sono richiesti dei requisiti di .NET

Si ha una buona riusabilità e velocità nella realizzazione

Page 32: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Inferred member – on line analysis

Schema generale:

17/11/2012 | 32 |

Trova le righe che non esistono nella dimensione

Unisce tutte le righe dei fatti

righe fattirighe che esistono nella

dimensioneInserisce fatti

Rig

he

sen

za

chia

ve

surro

ga

taR

igh

e c

on

ch

iave

su

rro

ga

ta

Genera una nuova chiave surrogata (se non si ha identity)

Inserisce la riga nella dimensione con il flag inferred a true

Ritorna la nuova chiave surrogata

Page 33: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Se i fatti > 50 gb usare le partizioni (su chiave data – abilitare lo sliding window) Più velocità nel caricamento e nella cancellazione Query più veloci su singola partizione Migliore gestione degli indici

Indici clustered sulla colonna data Migliora il recupero dei dati storici Ottengo query migliori per popolare il cubo

Best practices take-away - Facts

17/11/2012 | 33 |

Page 34: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Usare opzione ALLOW_ROW_LOCKS = OFF e ALLOW_PAGE_LOCKS = OFF sull’indice clustered: Operazioni di table scan più veloci a query-time Evita eccessive operazioni di locks durante

update pesanti

Best practices take-away - Facts

17/11/2012 | 34 |

Page 35: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Best practices take-away - Dimensions

Usare chiavi surrogate di tipo integer per tutte le dimensioni Usare una chiave (non surrogata) di tipo intero che

rappresenti la data anche per la dimensione tempo (esempio: 20121117)

Usare interi di piccole dimensioni per le chiavi surrogate in modo da tenere ridotta la tabella dei fatti

Sulla chiave surrogata costruire un indice clustered Questa è la chiave principale

17/11/2012 | 35 |

Page 36: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Indici non-clustered sulla business key eventualmente combinata con “effective date” per aiutare il recupero delle chiavi surrogate

Indici non-clustered su tutte le colonne della dimensione usate frequentemente per la ricerca

Evitare il partizionamento di una dimensione Impostare le chiavi esterne tra la tabella dei fatti

e la tabella delle dimensioni ma impostare a NOCHECK per consentire un caricamento più veloce

Best practices take-away - Dimensions

17/11/2012 | 36 |

Page 37: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

SSIS best practices take-away

Migliorare le performance del Control Flow Evitare cicli:

Foreach loop Loop

Sfruttare il parallelismo

17/11/2012 | 37 |

Page 38: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

SSIS best practices take-away

Migliorare le performance del Data Flow Sfruttare il parallelismo Ridurre il volume dei dati quando possibile Attenzione ai componenti che si usano:

17/11/2012 | 38 |

Livello prestazione Tipo di componenti

Prestazioni non tanto buone Merge join, Merge, Union All, Pivot

Prestazioni molto basse Sort, Aggregate, Fuzzy Grouping, OLE DB Command

Page 39: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Link

SQLIS http://www.sqlis.com/ Microsoft Integration Services

http://msdn.microsoft.com/it-it/sqlserver/cc511477 http://msdn.microsoft.com/en-us/library/ms141026.aspx

Data Loading Perfomance Guide http://msdn.microsoft.com/en-us/library/dd425070(v=sql.100).aspx

17/11/2012 | 39 |

Page 40: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

Q & A

17/11/2012 | 40 |

Page 41: SSIS - Integration Services

SQL Saturday #176 – Pordenone, Italy

GRAZIE!Commenta la sessione che hai

appena seguito su Twitter

#sqlsat176

17/11/2012 | 41 |