SSIS - Integration Services

620 views
515 views

Published on

Sql saturday #176 Pordenone

1 Comment
0 Likes
Statistics
Notes
  • Ciao Marco, vorrei sapere se c'è la possibilità di dare corsi su SSIS.
    Sono un'esperto.
    Saluti.
    https://www.linkedin.com/profile/view?id=347620692&trk=nav_responsive_tab_profile
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total views
620
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
15
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

SSIS - Integration Services

  1. 1. SQL Saturday #176 Pordenone, Italy Using Integration Services to load the DWH 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  2. 2. 2 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  3. 3. #sqlsat176 3 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  4. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 40. Q&A 40 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy
  41. 41. GRAZIE! Commenta la sessione che hai appena seguito su Twitter #sqlsat176 41 | 17/11/2012 | SQL Saturday #176 – Pordenone, Italy

×