SlideShare una empresa de Scribd logo
1 de 41
SQL Saturday #176
Pordenone, Italy
Using Integration Services
to load the DWH

17/11/2012 |

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

SQL Saturday #176 – Pordenone, Italy
#sqlsat176

3 | 17/11/2012 |

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: info@marcopozzan.it
 site: www.marcopozzan.it
4 | 17/11/2012 |

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
5 | 17/11/2012 |

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
6 | 17/11/2012 |

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
7 | 17/11/2012 |

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

8 | 17/11/2012 |

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)

9 | 17/11/2012 |

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

10 | 17/11/2012 |

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
11 | 17/11/2012 |

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.
12 | 17/11/2012 |

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.
13 | 17/11/2012 |

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)

14 | 17/11/2012 |

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

15 | 17/11/2012 |

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.

16 | 17/11/2012 |

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 | 17/11/2012 |

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.

18 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
T-SQL Merge
EmployeeID (S)

EmployeeName (S)

EmployeeID (T)

EmployeeName (T)

103

Bob

100

Mary

104

Steave

101

Sara

102

Stefano

19 | 17/11/2012 |

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

20 | 17/11/2012 |

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

21 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Change data capture - CDC
 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
22 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Change data Capture - CDC
 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(
))
23 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Change data Capture - CDC
 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

24 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Change data capture - CDC
 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
25 | 17/11/2012 |

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
26 | 17/11/2012 |

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
27 | 17/11/2012 |

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/lookuppattern-range-lookups.aspx (Matt Masson)
28 | 17/11/2012 |

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

29 | 17/11/2012 |

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.

30 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Inferred member – on-line analysis
 Tre modi per realizzare on-line analysis
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 Si ha una buona
sulla Union All usata
riusabilità e velocità
per unire le righe con
nella realizzazione
gli inferred member
con le altre righe.

SSIS – Script
Component

Sono richiesti dei
requisiti di .NET

31 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy

Si ha una buona
riusabilità e velocità
nella realizzazione
Inferred member – on line analysis
 Schema generale:
righe fatti

Trova le righe
che non
esistono nella
dimensione

righe che esistono nella
dimensione

32 | 17/11/2012 |

Righe con
chiave
surrogata

Righe senza
chiave
surrogata

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

Unisce tutte
le righe dei
fatti

Inserisce la riga
nella dimensione
con il flag inferred a
true

SQL Saturday #176 – Pordenone, Italy

Ritorna la nuova
chiave surrogata

Inserisce fatti
Best practices take-away - Facts
 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

33 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Best practices take-away - Facts
 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

34 | 17/11/2012 |

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
35 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Best practices take-away - Dimensions
 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
36 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
SSIS best practices take-away
 Migliorare le performance del Control Flow
 Evitare cicli:
 Foreach loop
 Loop

 Sfruttare il parallelismo

37 | 17/11/2012 |

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:
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

38 | 17/11/2012 |

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

39 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
Q&A

40 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy
GRAZIE!
Commenta la sessione che hai
appena seguito su Twitter
#sqlsat176

41 | 17/11/2012 |

SQL Saturday #176 – Pordenone, Italy

Más contenido relacionado

Similar a SSIS - Integration Services

Similar a SSIS - Integration Services (20)

[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
[ITA] SQL Saturday 264 - Put databases in ALM backgrounds
 
Giancarlo Ronci IT
Giancarlo Ronci ITGiancarlo Ronci IT
Giancarlo Ronci IT
 
Da Oracle a PostgreSQL: l'evoluzione dei RDBMS
Da Oracle a PostgreSQL: l'evoluzione dei RDBMSDa Oracle a PostgreSQL: l'evoluzione dei RDBMS
Da Oracle a PostgreSQL: l'evoluzione dei RDBMS
 
Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...
Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...
Polyglot Persistence e Big Data: tra innovazione e difficoltà su casi reali -...
 
Migrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQL
Migrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQLMigrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQL
Migrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQL
 
Migrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQL
Migrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQLMigrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQL
Migrazione di basi di dati dall’ambiente MS-Access all’ambiente MS SQL
 
Power bi Clean and Modelling (SQL Saturday #675)
Power bi Clean and Modelling  (SQL Saturday #675)Power bi Clean and Modelling  (SQL Saturday #675)
Power bi Clean and Modelling (SQL Saturday #675)
 
Ms sql server 2005 - Upgrading to microsoft sql server 2005 - Scheda corso LEN
Ms sql server 2005 - Upgrading to microsoft sql server 2005 - Scheda corso LENMs sql server 2005 - Upgrading to microsoft sql server 2005 - Scheda corso LEN
Ms sql server 2005 - Upgrading to microsoft sql server 2005 - Scheda corso LEN
 
noSQL La nuova frontiera dei Database [DB05-S]
noSQL La nuova frontiera dei Database [DB05-S]noSQL La nuova frontiera dei Database [DB05-S]
noSQL La nuova frontiera dei Database [DB05-S]
 
Linuxday2013
Linuxday2013 Linuxday2013
Linuxday2013
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Splunk live! milan 2015 Cerved presentation
Splunk live! milan 2015  Cerved presentationSplunk live! milan 2015  Cerved presentation
Splunk live! milan 2015 Cerved presentation
 
Yashi Enterprise e Microsoft Perchè aggiornare a windows server 2012 r2
Yashi Enterprise e Microsoft Perchè aggiornare a windows server 2012 r2Yashi Enterprise e Microsoft Perchè aggiornare a windows server 2012 r2
Yashi Enterprise e Microsoft Perchè aggiornare a windows server 2012 r2
 
ETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data FactoryETL on Cloud: Azure Data Factory
ETL on Cloud: Azure Data Factory
 
Le Novita’ dello sviluppo applicazioni per IBM i
Le Novita’ dello sviluppo applicazioni per IBM iLe Novita’ dello sviluppo applicazioni per IBM i
Le Novita’ dello sviluppo applicazioni per IBM i
 
Evento 18 giugno - Sviluppo applicativo
Evento 18 giugno - Sviluppo applicativoEvento 18 giugno - Sviluppo applicativo
Evento 18 giugno - Sviluppo applicativo
 
Curriculum Vitae_FB
Curriculum Vitae_FBCurriculum Vitae_FB
Curriculum Vitae_FB
 
SQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload AnalysisSQL Server Benchmarking, Baselining and Workload Analysis
SQL Server Benchmarking, Baselining and Workload Analysis
 
OrientDB & Big Data
OrientDB & Big DataOrientDB & Big Data
OrientDB & Big Data
 
Curriculum Vitae_FB
Curriculum Vitae_FBCurriculum Vitae_FB
Curriculum Vitae_FB
 

Más de Marco Pozzan

Power BI and business application platform
Power BI and business application platformPower BI and business application platform
Power BI and business application platform
Marco Pozzan
 

Más de Marco Pozzan (20)

Metadata Driven Pipeline with Microsoft Fabric
Metadata Driven Pipeline  with Microsoft FabricMetadata Driven Pipeline  with Microsoft Fabric
Metadata Driven Pipeline with Microsoft Fabric
 
Data Warehouse with Fabric on data lakehouse
Data Warehouse with Fabric on data lakehouseData Warehouse with Fabric on data lakehouse
Data Warehouse with Fabric on data lakehouse
 
Data modelling for Power BI
Data modelling for Power BIData modelling for Power BI
Data modelling for Power BI
 
SlideModellingDataSat.pdf
SlideModellingDataSat.pdfSlideModellingDataSat.pdf
SlideModellingDataSat.pdf
 
Datamart.pdf
Datamart.pdfDatamart.pdf
Datamart.pdf
 
Datamart.pptx
Datamart.pptxDatamart.pptx
Datamart.pptx
 
Quanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless SynapseQuanto mi costa SQL Pool Serverless Synapse
Quanto mi costa SQL Pool Serverless Synapse
 
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-servicePower BI: Introduzione ai dataflow e alla preparazione dei dati self-service
Power BI: Introduzione ai dataflow e alla preparazione dei dati self-service
 
Data flow
Data flowData flow
Data flow
 
Microsoft Power BI fast with aggregation and composite model
Microsoft Power BI fast with aggregation and composite modelMicrosoft Power BI fast with aggregation and composite model
Microsoft Power BI fast with aggregation and composite model
 
REAL TIME ANALYTICS INFRASTRUCTURE WITH AZURE
REAL TIME ANALYTICS INFRASTRUCTURE WITH AZUREREAL TIME ANALYTICS INFRASTRUCTURE WITH AZURE
REAL TIME ANALYTICS INFRASTRUCTURE WITH AZURE
 
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power biBig data analytics quanto vale e come sfruttarlo con stream analytics e power bi
Big data analytics quanto vale e come sfruttarlo con stream analytics e power bi
 
What is in reality a DAX filter context
What is in reality a DAX filter contextWhat is in reality a DAX filter context
What is in reality a DAX filter context
 
Azure saturday pn 2018
Azure saturday pn 2018Azure saturday pn 2018
Azure saturday pn 2018
 
Power B: Cleaning data
Power B: Cleaning dataPower B: Cleaning data
Power B: Cleaning data
 
Power BI and business application platform
Power BI and business application platformPower BI and business application platform
Power BI and business application platform
 
Optimizing dax
Optimizing daxOptimizing dax
Optimizing dax
 
Optimizing dax
Optimizing daxOptimizing dax
Optimizing dax
 
Power bi + Flow
Power bi + FlowPower bi + Flow
Power bi + Flow
 
Power BI
Power BIPower BI
Power BI
 

SSIS - Integration Services

  • 1. SQL Saturday #176 Pordenone, Italy Using Integration Services to load the DWH 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 2. 2 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 3. #sqlsat176 3 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 4. 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: info@marcopozzan.it  site: www.marcopozzan.it 4 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 5. 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 5 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 6. 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 6 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 7. 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 7 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 8. 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 8 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 9. 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) 9 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 10. 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 10 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 11. 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 11 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 12. 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. 12 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 13. 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. 13 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 14. 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) 14 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 15. 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 15 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 16. 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. 16 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 17. 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 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 18. 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. 18 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 19. T-SQL Merge EmployeeID (S) EmployeeName (S) EmployeeID (T) EmployeeName (T) 103 Bob 100 Mary 104 Steave 101 Sara 102 Stefano 19 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 20. 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/) 20 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 21. 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 21 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 22. Change data capture - CDC  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 22 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 23. Change data Capture - CDC  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( )) 23 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 24. Change data Capture - CDC  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 24 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 25. Change data capture - CDC  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 25 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 26. 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 26 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 27. 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 27 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 28. 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/lookuppattern-range-lookups.aspx (Matt Masson) 28 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 29. 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 29 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 30. 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. 30 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 31. Inferred member – on-line analysis  Tre modi per realizzare on-line analysis 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 Si ha una buona sulla Union All usata riusabilità e velocità per unire le righe con nella realizzazione gli inferred member con le altre righe. SSIS – Script Component Sono richiesti dei requisiti di .NET 31 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy Si ha una buona riusabilità e velocità nella realizzazione
  • 32. Inferred member – on line analysis  Schema generale: righe fatti Trova le righe che non esistono nella dimensione righe che esistono nella dimensione 32 | 17/11/2012 | Righe con chiave surrogata Righe senza chiave surrogata Genera una nuova chiave surrogata (se non si ha identity) Unisce tutte le righe dei fatti Inserisce la riga nella dimensione con il flag inferred a true SQL Saturday #176 – Pordenone, Italy Ritorna la nuova chiave surrogata Inserisce fatti
  • 33. Best practices take-away - Facts  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 33 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 34. Best practices take-away - Facts  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 34 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 35. 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 35 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 36. Best practices take-away - Dimensions  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 36 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 37. SSIS best practices take-away  Migliorare le performance del Control Flow  Evitare cicli:  Foreach loop  Loop  Sfruttare il parallelismo 37 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 38. 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: 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 38 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 39. 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 39 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 40. Q&A 40 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  • 41. GRAZIE! Commenta la sessione che hai appena seguito su Twitter #sqlsat176 41 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy