Δεδομένα ERP και e-shop σε cloud data warehouse με το Boomi Data Integration
Το pattern ELT βήμα βήμα: φορτώστε ακατέργαστα δεδομένα ERP και e-shop σε Snowflake ή BigQuery με rivers του Boomi Data Integration και μετασχηματίστε τα στο warehouse.
Η διοίκηση θέλει ένα dashboard πωλήσεων: τιμολόγια από το ERP, παραγγελίες από το e-shop, ανανεωμένα κάθε πρωί. Σήμερα κάποιος το φτιάχνει με το χέρι σε ένα spreadsheet. Σε αυτό το άρθρο εξηγούμε το pattern που αντικαθιστά αυτή τη δουλειά και μετά το υλοποιούμε με το Boomi Data Integration, την υπηρεσία ELT που απέκτησε το Boomi με την εξαγορά της Rivery το 2024, με προορισμό ένα cloud data warehouse όπως το Snowflake ή το Google BigQuery.
Γιατί η απευθείας προσέγγιση αποτυγχάνει
Οι δελεαστικές συντομεύσεις είναι να συνδέσετε το εργαλείο BI κατευθείαν στη βάση του ERP, ή να γράψετε ένα μεγάλο script που εξάγει, καθαρίζει και ενώνει τα πάντα πριν φορτώσει το αποτέλεσμα. Και οι δύο σπάνε:
- Τα ερωτήματα κατευθείαν στο ERP φορτώνουν με αναλυτική δουλειά το σύστημα που κόβει τιμολόγια, συνήθως σε ώρες γραφείου. Και η ένωση με τα δεδομένα του e-shop στο ίδιο ερώτημα δεν γίνεται έτσι κι αλλιώς.
- Τα scripts «πρώτα μετασχηματίζω, μετά φορτώνω» πετούν τα ακατέργαστα δεδομένα. Όταν αλλάξει ο ορισμός των «καθαρών πωλήσεων», πρέπει να ξαναεξαγάγετε μήνες ιστορικού.
- Οι χειροποίητες εξαγωγές καλύπτουν μόνο το ιδανικό σενάριο. Αλλαγές schema, όρια APIs, retries και ειδοποιήσεις μένουν για αργότερα, και το αργότερα έρχεται το πρωί του διοικητικού συμβουλίου.
Το pattern: ακατέργαστα μέσα, μετασχηματισμός στο warehouse
Το pattern ELT χωρίζει τη δουλειά σε επίπεδα:
ERP (SQL Server) ─┐
├──► επίπεδο raw (αντίγραφα πινάκων) ──► μοντέλα SQL (καθαρά, ενωμένα) ──► dashboard
E-shop (API) ─────┘
- Εξαγωγή και φόρτωση κάθε πηγής σε ένα schema raw στο warehouse, όσο πιο κοντά γίνεται στην πηγή. Ένα pipeline ανά πηγή, προγραμματισμένο.
- Μετασχηματισμός μέσα στο warehouse με SQL: διόρθωση τύπων, ένωση πελατών ERP και e-shop, υπολογισμός δεικτών. Τα αποτελέσματα πάνε σε ένα schema analytics.
- Orchestration, ώστε οι μετασχηματισμοί να τρέχουν μόνο αφού πετύχουν όλες οι φορτώσεις.
Το επίπεδο raw είναι το δίχτυ ασφαλείας σας: κάθε μοντέλο μπορεί να ξαναχτιστεί από αυτό χωρίς να αγγίξετε ξανά τις πηγές.
Υλοποίηση στο Boomi Data Integration
Στο Boomi Data Integration ένα pipeline λέγεται river. Τα δύο είδη που χρησιμοποιούμε εδώ είναι τα source-to-target rivers, που αντιγράφουν δεδομένα από μια πηγή σε έναν προορισμό, και τα logic rivers, που τρέχουν μια σειρά βημάτων όπως ερωτήματα SQL και άλλα rivers. Η υπηρεσία τρέχει στο cloud· οι ακριβείς ονομασίες και επιλογές μπορεί να αλλάζουν από έκδοση σε έκδοση, οπότε συμβουλευτείτε την τρέχουσα τεκμηρίωση στην πορεία.
Βήμα 1: Προετοιμάστε το warehouse
Δημιουργήστε μια βάση (Snowflake) ή ένα project με datasets (BigQuery) με δύο schemas, για παράδειγμα raw και
analytics. Δημιουργήστε έναν ξεχωριστό service user για το Boomi Data Integration με δικαίωμα να δημιουργεί και να
γράφει πίνακες μόνο στο raw και να τρέχει ερωτήματα στο analytics. Μη χρησιμοποιήσετε προσωπικό λογαριασμό.
Βήμα 2: Δημιουργήστε τα connections
Δημιουργήστε ένα connection για κάθε σύστημα:
- Προορισμός: Snowflake ή BigQuery, με τον service user (ή κλειδί service account για το BigQuery).
- ERP: πολλά ERP που χρησιμοποιούν ελληνικές εταιρείες τρέχουν πάνω σε Microsoft SQL Server, οπότε ένα connection βάσης με χρήστη μόνο ανάγνωσης είναι συνήθως ο πιο καθαρός δρόμος. Αν η βάση είναι on-premises, θα χρειαστεί να επιτρέψετε πρόσβαση από την υπηρεσία, για παράδειγμα μέσω SSH tunnel ή επιτρεπόμενων IP διευθύνσεων· ρωτήστε την ομάδα IT ποια επιλογή ταιριάζει στο δίκτυό σας.
- E-shop: χρησιμοποιήστε έτοιμο connector αν υπάρχει για την πλατφόρμα σας. Αν όχι, το Boomi Data Integration μπορεί να καλέσει ένα REST API μέσω custom ορισμού connection· ελέγξτε τι προσφέρει η τρέχουσα έκδοση για custom REST πηγές.
Βήμα 3: Το river του ERP
Δημιουργήστε ένα source-to-target river με πηγή το connection του SQL Server και προορισμό το warehouse.
- Επιλέξτε τους πίνακες που χρειάζεστε, όχι όλη τη βάση: για παράδειγμα πελάτες, είδη, κεφαλίδες και γραμμές τιμολογίων.
- Για κάθε πίνακα, ορίστε το όνομα του πίνακα-στόχου στο schema
raw, π.χ.raw.erp_invoice_lines. - Επιλέξτε τον τρόπο φόρτωσης (loading mode). Για μικρούς πίνακες αναφοράς (είδη, υποκαταστήματα), η πλήρης αντικατάσταση σε κάθε εκτέλεση είναι το πιο απλό. Για μεγάλους πίνακες, χρησιμοποιήστε upsert/merge στο πρωτεύον κλειδί, ώστε οι γραμμές να ενημερώνονται αντί να διπλασιάζονται.
- Στην πρώτη εκδοχή, εξαγάγετε όλες τις γραμμές. Γυρίστε τους μεγάλους πίνακες σε incremental εξαγωγή όταν το pipeline δουλέψει· δείτε το Incremental φορτώσεις και CDC με το Boomi Data Integration.
Τρέξτε το μία φορά χειροκίνητα και συγκρίνετε το πλήθος γραμμών με το ERP.
Βήμα 4: Το river του e-shop
Δημιουργήστε δεύτερο river για παραγγελίες και γραμμές παραγγελιών από το e-shop. Οι πηγές API επιστρέφουν nested JSON (μια παραγγελία περιέχει γραμμές, διεύθυνση αποστολής, εκπτώσεις). Δύο συνηθισμένες επιλογές είναι να φορτώσετε το JSON όπως είναι σε μια ημιδομημένη στήλη και να το «ισιώσετε» με SQL, ή να αφήσετε το river να το σπάσει σε ξεχωριστούς πίνακες. Η φόρτωση σε ακατέργαστη μορφή αντέχει καλύτερα τις αλλαγές στο API του e-shop.
Βήμα 5: Μετασχηματισμός στο warehouse
Γράψτε την επιχειρησιακή λογική ως views ή πίνακες SQL στο analytics. Για παράδειγμα, ένα μοντέλο ημερήσιων πωλήσεων
που συνδυάζει τα δύο κανάλια:
create or replace table analytics.daily_sales as
select invoice_date::date as day, 'ERP' as channel, sum(net_amount) as net_sales
from raw.erp_invoice_lines
group by 1
union all
select created_at::date as day, 'E-shop' as channel, sum(subtotal - discount_total) as net_sales
from raw.eshop_orders
where status in ('completed', 'shipped')
group by 1;
Κρατήστε αυτή την SQL σε version control. Όσο τα μοντέλα πληθαίνουν, αξίζει να εξετάσετε ένα εξειδικευμένο εργαλείο μετασχηματισμού όπως το dbt· το Boomi Data Integration μπορεί επίσης να τρέχει βήματα SQL, κάτι που αρκεί για αρχή.
Βήμα 6: Orchestration και χρονοπρογραμματισμός
Δημιουργήστε ένα logic river που τρέχει, με σειρά:
- το river του ERP και το river του e-shop (μπορούν να τρέξουν παράλληλα),
- το βήμα SQL που ξαναχτίζει το
analytics.daily_sales, - προαιρετικά, ένα ερώτημα ποιότητας δεδομένων που αποτυγχάνει την εκτέλεση αν, για παράδειγμα, η χθεσινή μέρα έχει μηδενικές πωλήσεις.
Προγραμματίστε το logic river, για παράδειγμα καθημερινά στις 05:30 ώρα Ελλάδας, ώστε το dashboard να είναι φρέσκο στην αρχή της μέρας. Προσέξτε τη ζώνη ώρας της ρύθμισης. Στείλτε τις ειδοποιήσεις αποτυχίας σε κοινό mailbox ή κανάλι ομάδας, όχι σε έναν άνθρωπο.
Πριν βγείτε σε παραγωγή
- Συμφωνία με την πηγή. Συγκρίνετε μηνιαία σύνολα στο warehouse με τις αναφορές του ίδιου του ERP για μερικούς μήνες πριν κανείς εμπιστευτεί το dashboard.
- Ελάχιστα δικαιώματα παντού. Χρήστης ERP μόνο ανάγνωσης, χρήστης προορισμού περιορισμένος στα schemas του.
- Προσωπικά δεδομένα. Οι πελάτες του e-shop είναι προσωπικά δεδομένα. Φορτώστε μόνο τις στήλες που χρειάζεστε για ανάλυση και περιορίστε την πρόσβαση στους raw πίνακες.
- Προσοχή στο κόστος. Η επεξεργασία στο warehouse και ο όγκος δεδομένων κοστίζουν. Τρέξτε τους βαριούς μετασχηματισμούς μία φορά τη μέρα αντί για κάθε λίγα λεπτά, εκτός αν χρειάζεστε πιο φρέσκα δεδομένα.
- Τεκμηριώστε την ιδιοκτησία. Γράψτε ποιος έχει κάθε river και κάθε μοντέλο και ποιος ειδοποιείται όταν αποτύχει. Δείτε και το Παρακολούθηση και ειδοποιήσεις για integrations στο Boomi.
Σύνοψη
Το pattern ELT κρατά την εξαγωγή απλή και βάζει την επιχειρησιακή λογική σε ένα σημείο, το warehouse, όπου μπορεί να έχει εκδόσεις, να ελέγχεται και να ξαναχτίζεται από τα ακατέργαστα δεδομένα. Στο Boomi Data Integration αυτό σημαίνει source-to-target rivers ανά πηγή, SQL για τα μοντέλα και ένα logic river που τα τρέχει όλα με σειρά. Για τη μεγάλη εικόνα, δείτε τον Ολοκλήρωση δεδομένων, ETL και ELT: πρακτικός οδηγός.