go backarticles

Articles of SQLschool.gr Team

Considerations on Data Loading Phase during ETL process

Antonios Chatzipavlis

Έχουμε φτάσει στο σημείο που θα πρέπει να γεμίσουμε με δεδομένα τους πίνακες που έχουμε στο DW. Και σε αυτή την φάση υπάρχουν θέματα στα οποία θα πρέπει να πάρω αποφάσεις για αυτά.

Surrogate Keys

Η πρώτη βασική απόφαση είναι για το πώς θα δημιουργώ τα surrogate keys στους πίνακες που έχω τέτοια όπως πχ στους dimension tables. Υπάρχουν δύο βασικές «σχολές». Η μία λέει ότι αφήνω την βάση να δίνει τιμή σε αυτό με την χρήση identity columns. H συγκεκριμένη «σχολή» έχει σαν πλεονεκτήματα ότι
  • δεν δίνει overhead στην διαδικασία ETL καθώς αυτόματα δίνεται τιμή κατά την εισαγωγή νέας έγγραφής από την βάση.
  • μπορείς να ελέγξεις από που θα ξεκινάς και πως θα ανεβαίνεις (seed,increment)
  • μπορώ να έχω concurrency καθώς με την αυτόματη ανάθεση τιμής σε αυτό από την βάση δεν θα έχω duplicate key values.
Φυσικά υπάρχουν και μειονεκτήματα όπως
  • η τιμή στο πεδίο αυτό γίνεται γνωστή αφού έχω εισάγει το record στην βάση, όπως για παράδειγμα όταν εισάγω δεδομένα ταυτόχρονα σε πίνακες με την λογική master-details όπου εκεί πρέπει να γνωρίζω την τιμή αρχικά.
  • θα πρέπει να λάβω υπόψη τις ιδιαιτερότητες των @@IDENTITY , SCOPE_IDENTITY() όπου υπάρχει περίπτωση να έχω λάθος επιστροφή τιμών. (ΚΒ 2019779).
  • σε περιπτώσεις που έχω μεταφορές δεδομένων μεταξύ πινάκων όπου θέλω να κρατήσω το referential integrity θα πρέπει να κάνω επιπλέον βήματα για διασφαλίσω αυτό όπως για παράδειγμα να ενεργοποιήσω/απενεργοποιώ το IDENTITY_INSERT.
Η άλλη «σχολή» λέει ότι η τιμή στο surrogate key θα γίνεται μέσα από την διαδικασία του ETL, με μια λογική όπου απαιτεί δύο βήματα όπου στο πρώτο βρίσκουμε την επόμενη τιμή και την αποθηκεύουμε σε μια μεταβλητή (συνήθως με ένα Execute SQL Task το οποίο περιέχει ένα query με max aggregation πάνω στον πίνακα εισαγωγής) και το επόμενο βήμα είναι να κάνουμε ανάθεση της τιμής αυτής της μεταβλητής στο key value (συνήθως μέσα από κάποιο Script component). Τα πλεονεκτήματα της «σχολής» αυτής είναι ότι
  • έχουμε τον απόλυτο έλεγχο της τιμής που εισάγετε.
  • σε περιπτώσεις μεταφοράς δεδομένων μεταξύ πινάκων δεν ανησυχούμε για το referential integrity.
  • δεν εμφανιστούν περιπτώσεις με ενδιάμεσα κενά πχ 1,2,3,7,10,20…
Τα μειονεκτήματα της είναι ότι
  • θα πρέπει να αυτή την διαδικασία να την επαναλαμβάνω σε κάθε SSIS Package που χρειάζεται, αυτό βέβαια μπορεί να λυθεί είτε με τη χρήση templates ή το να δημιουργηθεί ένα custom SSIS component.
  • δεν είναι εύκολο να έχω σενάριο concurrency καθώς κάνω εισαγωγή στον ίδιο πίνακα με μια λογική single user.

Loading incremental changes

Η επόμενη βασική απόφαση είναι το πώς θα ενημερώνω τους πίνακες που έχω στο DW με τις αλλαγές (insert,update,delete) που τα δεδομένα έχουν υποστεί στις πηγές. Αυτές οι εργασίες μπορεί να είναι απαιτητικές σε πόρους αλλά εκτός από αυτό θα πρέπει να έχω βρει και τον τρόπο με τον οποίο θα αντιδρώ σε περιπτώσεις που υπάρχει κάποιο failure στην διαδικασία και θα πρέπει να εκτελεστεί ξανά η διαδικασία του ETL. Βασικά απλά πράγματα θα πρέπει να υλοποιηθούν όπως να είναι transactional η όλη διαδικασία σαν batch και όχι row by row τόσο για τα inserts όσο και για τα updates και deletes. Επειδή δεν υπάρχει κάποιο SSIS task ή component με το οποίο μπορώ να έχω αυτό (batch) μια τεχνική είναι να έχω προσωρινό πίνακα με όλα τις αλλαγές και να κάνω χρήση της MERGE που υπάρχει στην Τ-SQL Επίσης θα πρέπει να βρω το πως θα έχω το καλύτερο performance και τι με συμφέρει ανά περίπτωση να χρησιμοποιήσω για το επιτύχω αυτό πχ θα χρησιμοποιήσω SSIS OLEDB destination, θα χρησιμοποιήσω BULK INSERT task ή to bcp utility. Θα πρέπει να δώσω προσοχή στην σειρά που θα ενημερώνω τους πίνακες μέσα στο DW καθώς είναι σίγουρο ότι μεταξύ τους υπάρχει referential integrity. Έτσι για παράδειγμα θα πρέπει να ενημερώνω πρώτα τα dimension tables και μετά τα facts. Βαρύτητα θα πρέπει να δοθεί στην ιστορικότητα που πρέπει να έχω, ιδιαίτερα στους dimension tables (Slowly Changed Dimension). Θα πρέπει να επιλέξω έναν από τους τρεις τύπους που ο εφευρέτης τους (R. Kimball) έχει ορίσει. Τέλος θα πρέπει να βρω τον τρόπο με τον οποίο θα έχω το βέλτιστο lookup για τον εντοπισμό των records που έχουμε στο DW σε σχέση με την πηγή. Για αυτό θα πρέπει να εξοικειωθώ με την χρήση του SSIS Lookup Transformation.

Επίλογος

Με αυτό το post κλείνω την σειρά των post που είχαν να κάνουμε με το τι πρέπει να προσέξω κατά την υλοποίηση ενός ETL. Θεωρώ ότι ήταν πράγματα τα οποία έπρεπε να γραφτούν καθώς είναι σημεία τα οποία θα έχουν αντίκτυπο στην υλοποίηση πράγμα που κανείς μας δεν θέλει καθώς είναι κουραστικό να κυνηγάς την ουρά σου που σαν άνθρωπος δεν έχεις. Θα συνεχίσω όμως την σειρά των BI posts καθώς είναι από τα αγαπημένα μου θέματα, αλλά πρώτα να είμαστε όλοι μας καλά στην υγεία μας. /*antonch*/            

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios is a Data Solutions Consultant and Trainer. He has been working in IT since 1988. In his career, he has worked as senior developer, IT Manager, Solutions Architect and IT Consultant. Since 1995 he has been devoted on new technologies and software development tools, mainly by Microsoft, either by training company staff and colleagues or assisting them in design, development and implementation as a consultant or chief developer. He has focused in Databases and Data Science since 1995. He specialized in Microsoft SQL Server since version 6.0 in areas like SQL Server Internals, Database Design and Development, Business Intelligence and in 2010 he has started working with Azure Data Platform, NoSQL databases, Big Data Technologies and Machine Learning. He is an active member of many IT communities in Greece, answering colleagues' questions and writing articles in his web site. He is the owner of SQLschool.gr which is a community portal with a lot of information about Microsoft SQL Server. He has been a Microsoft Certified Trainer (MCT) since 2000. Microsoft honored him as MVP on Data Platform due to his activities in SQL Server since 2010. He holds a large number of Microsoft Certifications and Microsoft SQL Server Certifications since version 6.5.


Leave your comment

COMMENT

FULL NAME

EMAIL ADDRESS

We use Gravatar

WEB SITE



captcha


 

Newsletter

If you want to receive updates from us subscribe below with your email.
Follow us in
PASS chapter logo

The Official PASS Local Group for Greece

About us Contact us Terms of Use Privacy Sing in Register
sql school greece logo
© 2010-2020 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.