KETTLE
KETTLE
διάστασης Με το χειριστήριο αυτό μπορούμε να διαβάσουμε ένα csv αρχείο που είναι αποθηκευμένο στον υπολογιστή μας. Ας το ονομάσουμε αρχείο εισόδου. Αφού βρούμε και κλικάρουμε το αρχείο (Filename), πατάμε Get Fields επιλέγουμε να διαβαστεί ένας αριθμός γραμμών ικανός για να αναγνωριστούν τα πεδία του πίνακα (που βρίσκεται μέσα στο αρχείο). Στη συνέχεια επιλέγουμε Preview όπου βλέπουμε τα περιεχόμενα του αρχείου, όπως αυτό διαβάστηκε από το χειριστήριο (ενδέχεται να χρειάζεται να προβούμε σε τροποποιήσεις των τύπων δεδομένων. Ο πίνακας που βλέπουμε στο Preview είναι η έξοδος του χειριστηρίου
διάστασης Το χειριστήριο αυτό δέχεται ως είσοδο τα δεδομένα από το αρχείο εισόδου του προηγούμενου βήματος. Τα δεδομένα αυτά θα αποθηκευτούν ως πίνακας διάστασης στην αποθήκη δεδομένων. Πρέπει πρώτα να εισάγουμε τη σύνδεση με τη βάση δεδομένων, και στη συνέχεια να δώσουμε το όνομα του πίνακα ο οποίος θα παίξει το ρόλο του πίνακα διάστασης (στο παράδειγμα είναι ο πίνακας products_dim). Στη συνέχεια επιλέγουμε την καρτέλα Keys, πατάμε Get Fields και σβήνουμε όλα τα πεδία εκτός από το πεδίο που παίζει το ρόλο του πρωτεύοντος κλειδιού. Διακρίνουμε δύο στήλες στην καρτέλα Keys, τη στήλη Dimension Field και τη στήλη Field in stream. Το stream είναι τα δεδομένα του αρχείου εισόδου, και στο field in stream βλέπουμε τη στήλη που περιέχει το πρωτεύον κλειδί. Στο dimension field βλέπουμε το πεδίο που θα δημιουργηθεί στον πίνακα διάστασης, για να κρατάει το πρωτεύον κλειδί. Στο παράδειγμά μας και οι δύο στήλες έχουν το ίδιο όνομα, δηλαδή στον πίνακα διάστασης θα υπάρχει ένα πεδίο PRODUCT_ID όπως και στο αρχείο εισόδου, με τις ίδιες ακριβώς τιμές.
διάστασης Στη συνέχεια επιλέγουμε την καρτέλα fields και πατάμε Get Fields Θα εμφανιστούν οι υπόλοιπες στήλες του stream (δηλαδή του αρχείου εισόδου) και στα αριστερά τους (στη στήλη Dimension field ) τα αντίστοιχα πεδία στον πίνακα διάστασης που θα δημιουργηθεί. Μία νέα στήλη, η type of dimension update έχει εμφανιστεί (θα δούμε αργότερα τι είναι η στήλη αυτή). Απομένει να εισάγουμε το Technical key field. Είναι ένα νεό πεδίο που θα δημιουργηθεί στον πίνακα διάστασης, και θα είναι το νέο πρωτεύον κλειδί του πίνακα, σε ότι αφορά την αποθήκη δεδομένων μας. Απομένει να πατήσουμε SQL και εκτέλεση για να παραχθεί η εντολή που θα δημιουργήσει τον πίνακα διάστασης στο σχήμα της βάσης δεδομένων μας, και στη συνέχεια να εκτελέσουμε το μετασχηματισμό, για να εισάγουμε μία μία τις γραμμές του πίνακα εισόδου, στον πίνακα διάστασης
διάστασης Παράδειγμα Αυτό είναι ένα κομμάτι του αρχείου που περιέχει τα προϊόντα στην αρχική βάση δεδομένων. Ο κωδικός προϊόντος είναι το πρωτεύον κλειδί. Ο πίνακας διάστασης που θα δημιουργηθεί από το μετασχηματισμό θα έχει ένα επιπλέον πεδίο, το technical key το οποίο θα ονομάσουμε (σε αντιστοιχία με το προηγούμενο παράδειγμα) product_key_id. Εφαρμόζοντας το μετασχηματισμό που είδαμε μέχρι τώρα θα προκύψει ο ακόλουθος πίνακας διάστασης. Είναι σαν να έχουμε δημιουργήσει έναν άξονα σε ένα νέο σύστημα συντεταγμένων, όπου κάθε προϊόν έχει αντιστοιχηθεί με ένα σημείο του άξονα αυτού. Άξονας προϊόντων 1 2 3 4
διάστασης Type of Dimension update Υπάρχουν 3 επιλογές στη στήλη αυτή, 1) insert, 2) update και 3) punch through Ας υποθέσουμε ότι έχουμε τον παρακάτω πίνακα διάστασης Και θέλουμε να εκτελέσουμε πάλι το μετασχηματισμό, όπου το αρχείο csv είναι τώρα το ακόλουθο. Παρατηρούμε ότι το προϊόν με κωδικό ΣΡ54 έχει αλλάξει ονομασία. Αν στη στήλη αυτή έχουμε την επιλογή update, τότε στον πίνακα διάστασης η εγγραφή του προϊόντος θα ενημερωθεί, και η παλιά εγγραφή θα χαθεί. Αν στη στήλη αυτή έχουμε την επιλογή insert, τότε θα εισαχθεί μία νέα εγγραφή για το προϊόν αυτό. Η νέα αυτή εγγραφή θα έχει product_key_id 5 (στο παράδειγμα), και θα εισαχθεί και ένα νέο πεδίο version. Όλες οι εγγραφές πλην της νέας θα έχουν τιμή 1 στο πεδίο version ενώ η νέα θα έχει τιμή 2. Έτσι, το προϊόν με κωδικό ΣΡ54 θα έχει δύο εγγραφές στον πίνακα διάστασης, και θα θυμόμαστε έτσι το ιστορικό των αλλαγών του ονόματος του προϊόντος. Ο νέος πίνακας διάστασης φαίνεται στην επόμενη διαφάνεια.
διάστασης χρόνου
διάστασης χρόνου Η διάσταση του χρόνου είναι μία ειδική περίπτωση. Η βάση δεδομένων μας έχει τη χρονική στιγμή κάθε πώλησης (υποθέτουμε ότι θέλουμε να μελετήσουμε τις πωλήσεις) αλλά υπάρχουν και μέρες κατά τις οποίες δεν έγιναν πωλήσεις. Θέλουμε και αυτές οι μέρες να υπάρχουν στον άξονα του χρόνου. Έτσι, δε μπορούμε να φτιάξουμε τον άξονα του χρόνου από τις ημερομηνίες των πωλήσεων. Θα δημιουργήσουμε όλες τις ημερομηνίες ανάμεσα στην πρώτη και την τελευταία πώληση, χρησιμοποιώντας τα εργαλεία του KETTLE.
διάστασης χρόνου Πρώτα θα δημιουργήσουμε ένα πίνακα μίας στήλης, όπου η στήλη αυτή θα ονομάζεται StartDate, θα δημιουργήσουμε τόσες γραμμές όσες διαφορετικές ημερομηνίες χρειαζόμαστε (στο παράδειγμα 1100), και θα θέσουμε όλες τις τιμές του πίνακα ίσες με μία αρχική ημερομηνία, μετά από την οποία συνέβη η πρώτη πώληση. (στο παράδειγμα η ημερομηνία αυτή είναι η 01-JAN-06). Τη δουλειά αυτή την κάνει το χειριστήριο Generate Rows
διάστασης χρόνου Η έξοδος του προηγούμενου βήματος γίνεται είσοδος σε αυτό το βήμα, όπου προστίθεται μία ακόμη στήλη δίπλα στην StartDate. Η στήλη αυτή έχει τιμές 1,2,3,4 κλπ, δηλαδή η τιμή σε κάθε γραμμή είναι κατά 1 μεγαλύτερη από την τιμή της προηγούμενης γραμμής. Η νέα στήλη ονομάζεται increment_date και την παράγει το χειριστήριο Add sequence.
διάστασης χρόνου Στη συνέχεια εισάγουμε μία ακόμη στήλη (sales_date), η τιμή της οποίας (σε κάθε γραμμή) προκύπτει ως το άθροισμα των τιμών των δύο άλλων στηλών. Προκύπτουν έτσι στη νέα στήλη 1100 ημερομηνίες, όπου κάθε ημερομηνία είναι η επόμενη της ημερομηνίας στον πιο πάνω γραμμή. Αυτή είναι και η στήλη που ορίζει τον άξονα του χρόνου, και συνεπώς οι άλλες δύο στήλες (start_date και increment_date) δε μας χρειάζονται πια.
διάστασης χρόνου Με το χειριστήριο select values, επιλέγουμε τη στήλη που θέλουμε να κρατήσουμε (δηλαδή τη sales_date) και πετάμε (στα σκουπίδια) αυτές που δε χρειαζόμαστε πια.
διάστασης χρόνου Με το χειριστήριο calculator εμπλουτίζουμε τη χρονική πληροφορία δημιουργώντας νέα πεδία. Δημιουργούμε έτσι ιεραρχίες στον άξονα του χρόνου (π.χ. μέρα, εβδομάδα, μήνας, έτος) που θα μας είναι χρήσιμες στις αναλύσεις μας. Κάθε ένα από τα πεδία που φαίνεται πιο πάνω δημιουργείται από το πεδίο sales_date, με τη βοήθεια μίας έτοιμης πράξης η οποία παρέχεται από μία λίστα έτοιμων πράξεων.
διάστασης χρόνου Το αποτέλεσμα μέχρι τώρα...
διάστασης χρόνου Στο παράδειγμά μας θέλουμε για κάθε ημερομηνία της διάστασης του χρόνου, να έχουμε την πληροφορία για το αν η ημερομηνία αυτή είναι αργία ή όχι. Οι αργίες βρίσκονται σε ένα αρχείο xls, το οποίο και διαβάζουμε με το χειριστήριο Microsoft Excel Input. Κομμάτι του αρχείου αυτού φαίνεται παρακάτω.
διάστασης χρόνου Στη συνέχεια χρησιμοποιούμε το χειριστήριο stream lookup, το οποίο δέχεται δύο εισόδους. Η μία είσοδός του είναι η έξοδος από το calculator (θα την ονομάσουμε stream 1) και η άλλη είναι η έξοδος του Microsoft Excel Input. Το χειριστήριο λειτουργεί ως εξής: κάθε τιμή στη στήλη HOLIDAY_DATE του stream 2, συγκρίνεται με κάθε τιμή στη στήλη sales_date του stream 1. Αν βρεθεί ταύτιση, τότε έχει βρεθεί μία ημερομηνία στη διάσταση του χρόνου, η οποία είναι αργία. Το χειριστήριο δημιουργεί τις στήλες HOLIDAY_DESCRIPTION και IS_A_HOLIDAY στο stream 1 και αν βρεθεί ότι κάποια γραμμή του stream 1 είναι αργία, αντιγράφει τις τιμές των στηλών HOLIDAY_DESCRIPTION και IS_A_HOLIDAY από την αντίστοιχη γραμμή του stream 2 (δηλαδή τη γραμμή του stream 2 που αντιστοιχεί στην ίδια ημερομηνία), στη γραμμή του stream 1 που είναι αργία και στις στήλες HOLIDAY_DESCRIPTION και IS_A_HOLIDAY αντίστοιχα.
διάστασης χρόνου Η έξοδος του stream lookup γίνεται είσοδος σε ένα χειριστήριο Dimension lookuo/update, που ρόλο έχει να δημιουργήσει τον πίνακα διάστασης και να τον τροφοδοτήσει με εγγραφές.
διάστασης χρόνου Τμήμα του εξερχόμενου stream (το αποτέλεσμα του μετασχηματισμού)
Δημιουργώντας το fact table Αρχικά διαβάζουμε το αρχείο που περιέχει τις παραγγελίες και μετά κάνουμε ένα βήμα για κάθε διάσταση.
Δημιουργώντας το fact table Πρώτο βήμα: διάβασμα του αρχείου
Δημιουργώντας το fact table Τμήμα του stream που παράγει σαν έξοδο το πρώτο βήμα
Δημιουργώντας το fact table Δεύτερο βήμα: Διάσταση πελάτη Βλέπουμε εδώ το βήμα για τη διάσταση πελάτη. Το stream είναι η είσοδος του χειριστηρίου και μας ενδιαφέρουν οι τιμές του πεδίου CUSTOMER_ID (στη δική μου υλοποίηση). Γενικά, μας ενδιαφέρει η στήλη που αντιστοιχεί στο πρωτεύον κλειδί του (μιλάμε για το πρωτεύον κλειδί στη βάση δεδομένων από όπου πήραμε τα στοιχεία). Κάθε τιμή της στήλης αυτής την αναζητούμε στον πίνακα της διάστασης πελάτη (Costumer_dim, ανορθόγραφα) και πιο συγκεκριμένα στο πεδίο CUSTOMER_DIM. Όταν τη βρούμε, έχουμε βρει και τον πελάτη στον οποίο αναφέρεται η πώληση. Παίρνουμε την τιμή του πεδίου costumer_dim_id για τον πελάτη αυτό και τη μεταφέρουμε στο stream, στο οποίο έχουμε δημιουργήσει μία νέα στήλη με όνομα costumer_dim_id. Έτσι, κάθε νέα εγγραφή που μπαίνει στο fact table, έχει και ένα πεδίο με το τεχνικό κλειδί του πελάτη στον οποίο αναφέρεται ή εγγραφή (πώληση). Μπορεί τώρα η εγγραφή αυτή να συσχετιστεί με τον πελάτη στον οποίο αντιστοιχεί, χρησιμοποιώντας μόνο τα τεχνικά κλειδιά. Προσέχουμε να μην είναι τσεκαρισμένη η επιλογή update the dimension? όπως επίσης και η επιλογή Enable the cache? Η έξοδος είναι ένα stream που περιέχει μία ακμή στήλη σε σχέση με το stream της εισόδου. Περιέχει τη στήλη costumer_dim_id, συνεπώς για κάθε πώληση έχουμε τώρα και το τεχνικό κλειδί του πελάτη.
Δημιουργώντας το fact table Τμήμα του stream στην έξοδο του δεύτερου βήματος. Παρατηρήστε το επιπλέον πεδίο σε σχέση με την έξοδο του πρώτου βήματος
Δημιουργώντας το fact table Τρίτο βήμα: Διάσταση υπαλλήλου Με ένα βήμα ίδιο με το προηγούμενο, ανακτούμε για κάθε εγγραφή που θα εισαχθεί στο fact table το τεχνικό κλειδί του εμπλεκόμενου υπαλλήλου. Τα τεχνικά κλειδιά δημιουργούν μία νέα στήλη στο stream εξόδου.
Δημιουργώντας το fact table Τμήμα της εξόδου του τρίτου βήματος: Παρατηρήστε τη νέα στήλη που έχει προστεθεί στα δεξιά, σε σύγκριση με το προηγούμενο βήμα
Δημιουργώντας το fact table Τέταρτο βήμα: διάσταση προϊόντος
Δημιουργώντας το fact table Πέμπτο βήμα: διάσταση promotion
Δημιουργώντας το fact table Έκτο βήμα: διάσταση χρόνου
Δημιουργώντας το fact table Κομμάτι της εξόδου του έκτου βήματος. Οι τελευταίες 3 στήλες προστέθηκαν (από αριστερά προς τα δεξιά) από τα βήματα 4, 5 και 6
Δημιουργώντας το fact table Το επόμενο βήμα είναι ένα calculator το οποίο δημιουργεί δύο επιπλέον στήλες στο stream εισόδου, τις στήλες dolars_sold και amount_sold. Στην παρακάτω εικόνα φαίνεται πως υπολογίζεται η τιμή σε κάθε στήλη. Για παράδειγμα, η στήλη dolars_sold είναι το γινόμενο των στηλών UNIT_PRICE και QUANTITY.
Δημιουργώντας το fact table Με το τελευταίο βήμα δημιουργούμε το fact table και εισάγουμε μία μία τις εγγραφές. Στην καρτέλα database fields πετάμε τα πεδία που μας είναι άχρηστα. Κρατάμε αυτά που φαίνονται, δηλαδή τα νούμερα που μελετάμε, και τις τιμές των συντεταγμένων κάθε γραμμής. Η αποθήκη δεδομένων έχει τελειώσει.