Δέκα νέες οπτικές μεταμορφώσεις στο AWS Glue Studio

Δέκα νέες οπτικές μεταμορφώσεις στο AWS Glue Studio

Κόμβος πηγής: 2641422

AWS Glue Studio είναι μια γραφική διεπαφή που διευκολύνει τη δημιουργία, εκτέλεση και παρακολούθηση εργασιών εξαγωγής, μετατροπής και φόρτωσης (ETL) σε Κόλλα AWS. Σας επιτρέπει να συνθέσετε οπτικά ροές εργασίας μετασχηματισμού δεδομένων χρησιμοποιώντας κόμβους που αντιπροσωπεύουν διαφορετικά βήματα χειρισμού δεδομένων, τα οποία αργότερα μετατρέπονται αυτόματα σε κώδικα για εκτέλεση.

AWS Glue Studio κυκλοφόρησε πρόσφατα 10 ακόμη οπτικοί μετασχηματισμοί που επιτρέπουν τη δημιουργία πιο προηγμένων εργασιών με οπτικό τρόπο χωρίς δεξιότητες κωδικοποίησης. Σε αυτήν την ανάρτηση, συζητάμε περιπτώσεις πιθανών χρήσεων που αντικατοπτρίζουν κοινές ανάγκες ETL.

Οι νέοι μετασχηματισμοί που θα παρουσιαστούν σε αυτήν την ανάρτηση είναι: Συνένωση, Διαχωρισμός συμβολοσειράς, Πίνακας σε στήλες, Προσθήκη τρέχουσας χρονικής σφραγίδας, Συγκεντρωτικές γραμμές σε στήλες, Κατάργηση περιστροφής στηλών σε γραμμές, αναζήτηση, Έκρηξη πίνακα ή αντιστοίχιση σε στήλες, παράγωγη στήλη και επεξεργασία αυτόματης ισορροπίας .

Επισκόπηση λύσεων

Σε αυτήν την περίπτωση χρήσης, έχουμε ορισμένα αρχεία JSON με λειτουργίες επιλογής μετοχών. Θέλουμε να κάνουμε μερικούς μετασχηματισμούς πριν από την αποθήκευση των δεδομένων για να διευκολύνουμε την ανάλυση και θέλουμε επίσης να δημιουργήσουμε μια ξεχωριστή σύνοψη δεδομένων.

Σε αυτό το σύνολο δεδομένων, κάθε σειρά αντιπροσωπεύει μια συναλλαγή συμβάσεων προαίρεσης. Τα δικαιώματα προαίρεσης είναι χρηματοπιστωτικά μέσα που παρέχουν το δικαίωμα —αλλά όχι την υποχρέωση— αγοράς ή πώλησης μετοχών σε σταθερή τιμή (καλούμενη  τιμή απεργίας) πριν από μια καθορισμένη ημερομηνία λήξης.

Εισαγωγή δεδομένων

Τα δεδομένα ακολουθούν το ακόλουθο σχήμα:

  • order_id – Μια μοναδική ταυτότητα
  • σύμβολο – Ένας κωδικός που βασίζεται γενικά σε λίγα γράμματα για τον προσδιορισμό της εταιρείας που εκπέμπει τις υποκείμενες μετοχές
  • όργανο – Το όνομα που προσδιορίζει τη συγκεκριμένη επιλογή που αγοράζεται ή πωλείται
  • νόμισμα – Ο κωδικός νομίσματος ISO στον οποίο εκφράζεται η τιμή
  • τιμή – Το ποσό που καταβλήθηκε για την αγορά κάθε συμβολαίου δικαιώματος προαίρεσης (στα περισσότερα χρηματιστήρια, ένα συμβόλαιο σάς επιτρέπει να αγοράσετε ή να πουλήσετε 100 μετοχές)
  • ανταλλαγή – Ο κωδικός του κέντρου ανταλλαγής ή του τόπου όπου έγινε η διαπραγμάτευση του δικαιώματος
  • πωλούνται – Μια λίστα με τον αριθμό των συμβολαίων που διατέθηκαν για την πλήρωση της εντολής πώλησης όταν πρόκειται για συναλλαγή πώλησης
  • αγόρασε – Μια λίστα με τον αριθμό των συμβολαίων που διατέθηκαν για την πλήρωση της εντολής αγοράς όταν πρόκειται για συναλλαγή αγοράς

Το παρακάτω είναι ένα δείγμα των συνθετικών δεδομένων που δημιουργήθηκαν για αυτήν την ανάρτηση:

{"order_id": 1679931512485, "symbol": "AMZN", "instrument": "AMZN MAR 24 23 102 PUT", "currency": "usd", "price": 17.18, "exchange": "EDGX", "bought": [18, 38]}
{"order_id": 1679931512486, "symbol": "BMW.DE", "instrument": "BMW.DE MAR 24 23 96 PUT", "currency": "eur", "price": 2.98, "exchange": "XETR", "bought": [28]}
{"order_id": 1679931512487, "symbol": "BMW.DE", "instrument": "BMW.DE APR 28 23 101 CALL", "currency": "eur", "price": 14.71, "exchange": "XETR", "sold": [9, 59, 54]}
{"order_id": 1679931512489, "symbol": "JPM", "instrument": "JPM JUN 30 23 140 CALL", "currency": "usd", "price": 11.83, "exchange": "EDGX", "bought": [33, 42, 55, 67]}
{"order_id": 1679931512490, "symbol": "SIE.DE", "instrument": "SIE.DE MAR 24 23 149 CALL", "currency": "eur", "price": 13.68, "exchange": "XETR", "bought": [96, 89, 82]}
{"order_id": 1679931512491, "symbol": "NKE", "instrument": "NKE MAR 24 23 112 CALL", "currency": "usd", "price": 3.23, "exchange": "EDGX", "sold": [67]}
{"order_id": 1679931512492, "symbol": "AMZN", "instrument": "AMZN MAY 26 23 95 CALL", "currency": "usd", "price": 11.44, "exchange": "EDGX", "sold": [41, 62, 12]}
{"order_id": 1679931512493, "symbol": "JPM", "instrument": "JPM MAR 24 23 121 PUT", "currency": "usd", "price": 1.0, "exchange": "EDGX", "bought": [61, 34]}
{"order_id": 1679931512494, "symbol": "SAP.DE", "instrument": "SAP.DE MAR 24 23 132 CALL", "currency": "eur", "price": 15.9, "exchange": "XETR", "bought": [69, 33]}

Απαιτήσεις ETL

Αυτά τα δεδομένα έχουν μια σειρά από μοναδικά χαρακτηριστικά, όπως συχνά συναντώνται σε παλαιότερα συστήματα, που κάνουν τα δεδομένα πιο δύσκολο στη χρήση.

Οι ακόλουθες είναι οι απαιτήσεις ETL:

  • Το όνομα του οργάνου έχει πολύτιμες πληροφορίες που προορίζονται να κατανοήσουν οι άνθρωποι. θέλουμε να το κανονικοποιήσουμε σε ξεχωριστές στήλες για ευκολότερη ανάλυση.
  • Οι ιδιότητες bought και sold Αποκλείονται αμοιβαία· Μπορούμε να τα ενοποιήσουμε σε μία στήλη με τους αριθμούς συμβολαίων και να έχουμε μια άλλη στήλη που να δείχνει εάν τα συμβόλαια αγοράστηκαν ή πουλήθηκαν με αυτήν τη σειρά.
  • Θέλουμε να διατηρήσουμε τις πληροφορίες σχετικά με τις εκχωρήσεις μεμονωμένων συμβολαίων αλλά ως μεμονωμένες σειρές αντί να αναγκάζουμε τους χρήστες να ασχολούνται με μια σειρά αριθμών. Θα μπορούσαμε να αθροίσουμε τους αριθμούς, αλλά θα χάναμε πληροφορίες σχετικά με τον τρόπο ολοκλήρωσης της παραγγελίας (υποδεικνύοντας τη ρευστότητα της αγοράς). Αντίθετα, επιλέγουμε να αποκανονικοποιήσουμε τον πίνακα, ώστε κάθε σειρά να έχει έναν μόνο αριθμό συμβάσεων, χωρίζοντας τις παραγγελίες με πολλούς αριθμούς σε ξεχωριστές σειρές. Σε μια συμπιεσμένη μορφή στηλών, το επιπλέον μέγεθος δεδομένων αυτής της επανάληψης είναι συχνά μικρό όταν εφαρμόζεται συμπίεση, επομένως είναι αποδεκτό να διευκολύνουμε το ερώτημα για το σύνολο δεδομένων.
  • Θέλουμε να δημιουργήσουμε έναν συνοπτικό πίνακα όγκου για κάθε τύπο επιλογής (call and put) για κάθε μετοχή. Αυτό παρέχει μια ένδειξη του κλίματος της αγοράς για κάθε μετοχή και την αγορά γενικότερα (απληστία εναντίον φόβου).
  • Για να ενεργοποιήσουμε τις συνολικές περιλήψεις συναλλαγών, θέλουμε να παρέχουμε για κάθε πράξη το συνολικό σύνολο και να τυποποιούμε το νόμισμα σε δολάρια ΗΠΑ, χρησιμοποιώντας μια κατά προσέγγιση αναφορά μετατροπής.
  • Θέλουμε να προσθέσουμε την ημερομηνία που έγιναν αυτοί οι μετασχηματισμοί. Αυτό θα μπορούσε να είναι χρήσιμο, για παράδειγμα, να υπάρχει αναφορά σχετικά με το πότε έγινε η μετατροπή νομίσματος.

Με βάση αυτές τις απαιτήσεις, η εργασία θα παράγει δύο αποτελέσματα:

  • Ένα αρχείο CSV με μια περίληψη του αριθμού των συμβάσεων για κάθε σύμβολο και τύπο
  • Ένας πίνακας καταλόγου για τη διατήρηση ιστορικού της παραγγελίας, αφού γίνουν οι μετασχηματισμοί που υποδεικνύονται
    Σχήμα δεδομένων

Προϋποθέσεις

Θα χρειαστείτε τον δικό σας κάδο S3 για να ακολουθήσετε αυτήν την περίπτωση χρήσης. Για να δημιουργήσετε έναν νέο κάδο, ανατρέξτε στο Δημιουργία κάδου.

Δημιουργήστε συνθετικά δεδομένα

Για να ακολουθήσετε αυτήν την ανάρτηση (ή να πειραματιστείτε με αυτό το είδος δεδομένων μόνοι σας), μπορείτε να δημιουργήσετε αυτό το σύνολο δεδομένων συνθετικά. Το ακόλουθο σενάριο Python μπορεί να εκτελεστεί σε περιβάλλον Python με εγκατεστημένο το Boto3 και πρόσβαση σε αυτό Απλή υπηρεσία αποθήκευσης Amazon (Amazon S3).

Για να δημιουργήσετε τα δεδομένα, ολοκληρώστε τα ακόλουθα βήματα:

  1. Στο AWS Glue Studio, δημιουργήστε μια νέα εργασία με την επιλογή Πρόγραμμα επεξεργασίας σεναρίων κελύφους Python.
  2. Δώστε στην εργασία ένα όνομα και στο Λεπτομέρειες εργασίας καρτέλα, επιλέξτε α κατάλληλο ρόλο και ένα όνομα για το σενάριο Python.
  3. Στο Λεπτομέρειες εργασίας ενότητα, επέκταση Προηγμένες ιδιότητες και μετακινηθείτε προς τα κάτω Παράμετροι εργασίας.
  4. Εισαγάγετε μια παράμετρο με όνομα --bucket και αντιστοιχίστε ως τιμή το όνομα του κάδου που θέλετε να χρησιμοποιήσετε για να αποθηκεύσετε τα δείγματα δεδομένων.
  5. Εισαγάγετε το ακόλουθο σενάριο στο πρόγραμμα επεξεργασίας κελύφους AWS Glue:
    import argparse
    import boto3
    from datetime import datetime
    import io
    import json
    import random
    import sys # Configuration
    parser = argparse.ArgumentParser()
    parser.add_argument('--bucket')
    args, ignore = parser.parse_known_args()
    if not args.bucket: raise Exception("This script requires an argument --bucket with the value specifying the S3 bucket where to store the files generated") data_bucket = args.bucket
    data_path = "transformsblog/inputdata"
    samples_per_file = 1000 # Create a single file with synthetic data samples
    s3 = boto3.client('s3')
    buff = io.BytesIO() sample_stocks = [("AMZN", 95, "usd"), ("NKE", 120, "usd"), ("JPM", 130, "usd"), ("KO", 130, "usd"), ("BMW.DE", 95, "eur"), ("SIE.DE", 140, "eur"), ("SAP.DE", 115, "eur")]
    option_type = ["PUT", "CALL"]
    operations = ["sold", "bought"]
    dates = ["MAR 24 23", "APR 28 23", "MAY 26 23", "JUN 30 23"]
    for i in range(samples_per_file): stock = random.choice(sample_stocks) symbol = stock[0] ref_price = stock[1] currency = stock[2] strike_price = round(ref_price * 0.9 + ref_price * random.uniform(0.01, 0.3)) sample = { "order_id": int(datetime.now().timestamp() * 1000) + i, "symbol": stock[0], "instrument":f"{symbol} {random.choice(dates)} {strike_price} {random.choice(option_type)}", "currency": currency, "price": round(random.uniform(0.5, 20.1), 2), "exchange": "EDGX" if currency == "usd" else "XETR" } sample[random.choice(operations)] = [random.randrange(1,100) for i in range(random.randrange(1,5))] buff.write(json.dumps(sample).encode()) buff.write("n".encode()) s3.put_object(Body=buff.getvalue(), Bucket=data_bucket, Key=f"{data_path}/{int(datetime.now().timestamp())}.json")

  6. Εκτελέστε την εργασία και περιμένετε μέχρι να εμφανιστεί ως επιτυχώς ολοκληρωμένη στην καρτέλα Εκτέλεση (θα χρειαστούν μόνο λίγα δευτερόλεπτα).

Κάθε εκτέλεση θα δημιουργήσει ένα αρχείο JSON με 1,000 σειρές κάτω από τον καθορισμένο κάδο και το πρόθεμα transformsblog/inputdata/. Μπορείτε να εκτελέσετε την εργασία πολλές φορές εάν θέλετε να δοκιμάσετε με περισσότερα αρχεία εισόδου.
Κάθε γραμμή στα συνθετικά δεδομένα είναι μια σειρά δεδομένων που αντιπροσωπεύει ένα αντικείμενο JSON όπως το ακόλουθο:

{ "order_id":1681986991888, "symbol":"AMZN", "instrument":"AMZN APR 28 23 100 PUT", "currency":"usd", "price":2.89, "exchange":"EDGX", "sold":[88,49]
}

Δημιουργήστε την οπτική εργασία AWS Glue

Για να δημιουργήσετε την οπτική εργασία AWS Glue, ολοκληρώστε τα παρακάτω βήματα:

  1. Μεταβείτε στο AWS Glue Studio και δημιουργήστε μια εργασία χρησιμοποιώντας την επιλογή Οπτική με έναν κενό καμβά.
  2. Αλλαγή Untitled job να του δώσετε ένα όνομα και να του αναθέσετε ρόλος κατάλληλος για κόλλα AWS σχετικά με την Λεπτομέρειες εργασίας Tab.
  3. Προσθέστε μια πηγή δεδομένων S3 (μπορείτε να την ονομάσετε JSON files source) και εισαγάγετε τη διεύθυνση URL S3 κάτω από την οποία αποθηκεύονται τα αρχεία (για παράδειγμα, s3://<your bucket name>/transformsblog/inputdata/), στη συνέχεια επιλέξτε JSON ως μορφή δεδομένων.
  4. Αγορά Σχήμα συμπερασμάτων οπότε ορίζει το σχήμα εξόδου με βάση τα δεδομένα.

Από αυτόν τον κόμβο πηγής, θα συνεχίσετε να αλυσιδώνετε μετασχηματισμούς. Όταν προσθέτετε κάθε μετασχηματισμό, βεβαιωθείτε ότι ο επιλεγμένος κόμβος είναι ο τελευταίος που προστέθηκε, ώστε να εκχωρηθεί ως γονέας, εκτός εάν υποδεικνύεται διαφορετικά στις οδηγίες.

Εάν δεν επιλέξατε τον σωστό γονέα, μπορείτε πάντα να επεξεργαστείτε τον γονέα επιλέγοντάς τον και επιλέγοντας έναν άλλο γονέα στο παράθυρο διαμόρφωσης.

Διαμόρφωση γονέα κόμβου

Για κάθε κόμβο που προστίθεται, θα του δώσετε ένα συγκεκριμένο όνομα (έτσι ο σκοπός του κόμβου φαίνεται στο γράφημα) και μια διαμόρφωση στο Μεταμορφώστε Tab.

Κάθε φορά που ένας μετασχηματισμός αλλάζει το σχήμα (για παράδειγμα, προσθέστε μια νέα στήλη), το σχήμα εξόδου πρέπει να ενημερώνεται, ώστε να είναι ορατό στους μετασχηματισμούς κατάντη. Μπορείτε να επεξεργαστείτε μη αυτόματα το σχήμα εξόδου, αλλά είναι πιο πρακτικό και ασφαλέστερο να το κάνετε χρησιμοποιώντας την προεπισκόπηση δεδομένων.
Επιπλέον, με αυτόν τον τρόπο μπορείτε να επαληθεύσετε ότι ο μετασχηματισμός λειτουργεί όσο αναμένεται. Για να το κάνετε αυτό, ανοίξτε το Προεπισκόπηση δεδομένων καρτέλα με επιλεγμένο τον μετασχηματισμό και ξεκινήστε μια περίοδο λειτουργίας προεπισκόπησης. Αφού επαληθεύσετε ότι τα μετασχηματισμένα δεδομένα φαίνονται όπως αναμένεται, μεταβείτε στο Σχήμα εξόδου καρτέλα και επιλέξτε Χρησιμοποιήστε το σχήμα προεπισκόπησης δεδομένων για αυτόματη ενημέρωση του σχήματος.

Καθώς προσθέτετε νέα είδη μετασχηματισμών, η προεπισκόπηση ενδέχεται να εμφανίζει ένα μήνυμα σχετικά με μια εξάρτηση που λείπει. Όταν συμβεί αυτό, επιλέξτε Τέλος συνεδρίας και ξεκινά ένα νέο, έτσι η προεπισκόπηση επιλέγει το νέο είδος κόμβου.

Εξαγωγή πληροφοριών οργάνου

Ας ξεκινήσουμε ασχολούμενοι με τις πληροφορίες σχετικά με το όνομα του οργάνου για να τις κανονικοποιήσουμε σε στήλες που είναι ευκολότερη η πρόσβαση στον πίνακα εξόδου που προκύπτει.

  1. Προσθέστε μια Χωρισμένη χορδή κόμβο και ονομάστε τον Split instrument, το οποίο θα κάνει tokenize τη στήλη του οργάνου χρησιμοποιώντας ένα regex κενού διαστήματος: s+ (ένας μόνος χώρος θα έκανε σε αυτήν την περίπτωση, αλλά αυτός ο τρόπος είναι πιο ευέλικτος και οπτικά πιο καθαρός).
  2. Θέλουμε να διατηρήσουμε τις αρχικές πληροφορίες του οργάνου ως έχουν, επομένως εισαγάγετε ένα νέο όνομα στήλης για τον διαχωρισμένο πίνακα: instrument_arr.
    Διαίρεση διαμόρφωσης
  3. Προσθέστε ένα Πίνακας σε στήλες κόμβο και ονομάστε τον Instrument columns για να μετατρέψετε τη στήλη του πίνακα που μόλις δημιουργήθηκε σε νέα πεδία, εκτός από symbol, για το οποίο έχουμε ήδη στήλη.
  4. Επιλέξτε τη στήλη instrument_arr, παραλείψτε το πρώτο διακριτικό και πείτε του να εξαγάγει τις στήλες εξόδου month, day, year, strike_price, type χρησιμοποιώντας ευρετήρια 2, 3, 4, 5, 6 (τα κενά μετά τα κόμματα είναι για αναγνωσιμότητα, δεν επηρεάζουν τη διαμόρφωση).
    Διαμόρφωση πίνακα

Το έτος που εξάγεται εκφράζεται μόνο με δύο ψηφία. Ας βάλουμε ένα ενδιάμεσο κενό για να υποθέσουμε ότι είναι σε αυτόν τον αιώνα αν χρησιμοποιούν απλώς δύο ψηφία.

  1. Προσθέστε μια Παράγωγη στήλη κόμβο και ονομάστε τον Four digits year.
  2. εισάγετε year ως παραγόμενη στήλη, την αντικαθιστά και εισαγάγετε την ακόλουθη έκφραση SQL:
    CASE WHEN length(year) = 2 THEN ('20' || year) ELSE year END
    Διαμόρφωση στήλης που προέρχεται από το έτος

Για ευκολία, κατασκευάζουμε ένα expiration_date πεδίο που μπορεί να έχει ένας χρήστης ως αναφορά της τελευταίας ημερομηνίας που μπορεί να ασκηθεί η επιλογή.

  1. Προσθέστε μια Συνενώστε στήλες κόμβο και ονομάστε τον Build expiration date.
  2. Ονομάστε τη νέα στήλη expiration_date, επιλέξτε τις στήλες year, month, να day (με αυτή τη σειρά), και μια παύλα ως διαχωριστικό.
    Συνδεδεμένη ημερομηνία διαμόρφωσης

Το διάγραμμα μέχρι στιγμής θα πρέπει να μοιάζει με το παρακάτω παράδειγμα.

DAG

Η προεπισκόπηση δεδομένων των νέων στηλών μέχρι στιγμής θα πρέπει να μοιάζει με το παρακάτω στιγμιότυπο οθόνης.

Προεπισκόπηση δεδομένων

Κανονικοποιήστε τον αριθμό των συμβάσεων

Κάθε μία από τις σειρές στα δεδομένα υποδεικνύει τον αριθμό των συμβολαίων κάθε επιλογής που αγοράστηκαν ή πουλήθηκαν και τις παρτίδες στις οποίες εκπληρώθηκαν οι παραγγελίες. Χωρίς να χάσουμε τις πληροφορίες σχετικά με τις μεμονωμένες παρτίδες, θέλουμε να έχουμε κάθε ποσότητα σε μια μεμονωμένη σειρά με μία τιμή ποσότητας, ενώ οι υπόλοιπες πληροφορίες αναπαράγονται σε κάθε σειρά που παράγεται.

Αρχικά, ας συγχωνεύσουμε τα ποσά σε μία στήλη.

  1. Προσθέστε ένα Αναίρεση περιστροφής στηλών σε γραμμές κόμβο και ονομάστε τον Unpivot actions.
  2. Επιλέξτε τις στήλες bought και sold για να καταργήσετε την περιστροφή και να αποθηκεύσετε τα ονόματα και τις τιμές στις στήλες που ονομάζονται action και contracts, Αντίστοιχα.
    Unpivot config
    Παρατηρήστε στην προεπισκόπηση ότι η νέα στήλη contracts εξακολουθεί να είναι ένας πίνακας αριθμών μετά από αυτόν τον μετασχηματισμό.
  1. Προσθέστε ένα Αναπτύξτε τον πίνακα ή τον χάρτη σε σειρές σειρά με όνομα Explode contracts.
  2. Επιλέξτε contracts στήλη και εισάγετε contracts ως νέα στήλη για να την αντικαταστήσουμε (δεν χρειάζεται να διατηρήσουμε τον αρχικό πίνακα).

Η προεπισκόπηση δείχνει τώρα ότι κάθε σειρά έχει ένα μοναδικό contracts ποσό και τα υπόλοιπα πεδία είναι ίδια.

Αυτό σημαίνει επίσης ότι order_id δεν είναι πλέον μοναδικό κλειδί. Για τις δικές σας περιπτώσεις χρήσης, πρέπει να αποφασίσετε πώς να μοντελοποιήσετε τα δεδομένα σας και εάν θέλετε να αποκανονικοποιήσετε ή όχι.
Explode config

Το παρακάτω στιγμιότυπο οθόνης είναι ένα παράδειγμα του πώς μοιάζουν οι νέες στήλες μετά τους μετασχηματισμούς μέχρι στιγμής.
Προεπισκόπηση δεδομένων

Δημιουργήστε έναν συνοπτικό πίνακα

Τώρα δημιουργείτε έναν συνοπτικό πίνακα με τον αριθμό των συμβολαίων που διαπραγματεύονται για κάθε τύπο και κάθε σύμβολο μετοχής.

Ας υποθέσουμε για λόγους επεξήγησης ότι τα αρχεία που υποβλήθηκαν σε επεξεργασία ανήκουν σε μία ημέρα, επομένως αυτή η σύνοψη παρέχει στους επιχειρηματίες χρήστες πληροφορίες σχετικά με το ενδιαφέρον και το συναίσθημα της αγοράς εκείνη την ημέρα.

  1. Προσθέστε μια Επιλέξτε Πεδία κόμβο και επιλέξτε τις ακόλουθες στήλες που θα διατηρήσετε για τη σύνοψη: symbol, type, να contracts.
    Επιλεγμένα πεδία
  2. Προσθέστε μια Συγκεντρώστε τις γραμμές σε στήλες κόμβο και ονομάστε τον Pivot summary.
  3. Συγκεντρωτικό στο contracts στήλη χρησιμοποιώντας sum και επιλέξτε να μετατρέψετε το type στήλη.
    Ρύθμιση περιστροφής

Κανονικά, θα το αποθηκεύατε σε κάποια εξωτερική βάση δεδομένων ή αρχείο για αναφορά. Σε αυτό το παράδειγμα, το αποθηκεύουμε ως αρχείο CSV στο Amazon S3.

  1. Προσθέστε ένα Επεξεργασία αυτόματης ισορροπίας κόμβο και ονομάστε τον Single output file.
  2. Αν και αυτός ο τύπος μετασχηματισμού χρησιμοποιείται συνήθως για τη βελτιστοποίηση του παραλληλισμού, εδώ τον χρησιμοποιούμε για να μειώσουμε την έξοδο σε ένα μόνο αρχείο. Επομένως, εισάγετε 1 στη διαμόρφωση του αριθμού των κατατμήσεων.
    Διαμόρφωση αυτόματης ισορροπίας
  3. Προσθέστε έναν στόχο S3 και ονομάστε τον CSV Contract summary.
  4. Επιλέξτε CSV ως μορφή δεδομένων και εισαγάγετε μια διαδρομή S3 όπου ο ρόλος εργασίας επιτρέπεται να αποθηκεύει αρχεία.

Το τελευταίο μέρος της εργασίας θα πρέπει τώρα να μοιάζει με το ακόλουθο παράδειγμα.
DAG

  1. Αποθηκεύστε και εκτελέστε την εργασία. Χρησιμοποιήστε το Τρέχει καρτέλα για να ελέγξετε πότε ολοκληρώθηκε με επιτυχία.
    Θα βρείτε ένα αρχείο κάτω από αυτήν τη διαδρομή που είναι CSV, παρόλο που δεν έχει αυτήν την επέκταση. Μάλλον θα χρειαστεί να προσθέσετε την επέκταση μετά τη λήψη της για να την ανοίξετε.
    Σε ένα εργαλείο που μπορεί να διαβάσει το CSV, η σύνοψη θα πρέπει να μοιάζει με το ακόλουθο παράδειγμα.
    Υπολογιστικό φύλλο

Καθαρίστε τις προσωρινές στήλες

Προετοιμάζοντας την αποθήκευση των παραγγελιών σε έναν ιστορικό πίνακα για μελλοντική ανάλυση, ας καθαρίσουμε ορισμένες προσωρινές στήλες που δημιουργήθηκαν στην πορεία.

  1. Προσθέστε μια Πεδία απόθεσης κόμβος με το Explode contracts ο κόμβος που επιλέχθηκε ως γονέας του (διακλαδίζουμε τη γραμμή δεδομένων για να δημιουργήσουμε μια ξεχωριστή έξοδο).
  2. Επιλέξτε τα πεδία που θα απορριφθούν: instrument_arr, month, day, να year.
    Τα υπόλοιπα θέλουμε να κρατήσουμε, ώστε να αποθηκευτούν στον ιστορικό πίνακα που θα δημιουργήσουμε αργότερα.
    Απόθεση πεδίων

Τυποποίηση νομισμάτων

Αυτά τα συνθετικά δεδομένα περιέχουν φανταστικές πράξεις σε δύο νομίσματα, αλλά σε ένα πραγματικό σύστημα θα μπορούσατε να λάβετε νομίσματα από αγορές σε όλο τον κόσμο. Είναι χρήσιμο να τυποποιούνται τα νομίσματα που χρησιμοποιούνται σε ένα ενιαίο νόμισμα αναφοράς, ώστε να μπορούν εύκολα να συγκριθούν και να συγκεντρωθούν για αναφορά και ανάλυση.

Χρησιμοποιούμε Αμαζόν Αθηνά για την προσομοίωση ενός πίνακα με κατά προσέγγιση μετατροπές νομισμάτων που ενημερώνεται περιοδικά (εδώ υποθέτουμε ότι επεξεργαζόμαστε τις παραγγελίες αρκετά έγκαιρα ώστε η μετατροπή να είναι εύλογη αντιπροσωπευτική για λόγους σύγκρισης).

  1. Ανοίξτε την κονσόλα Athena στην ίδια περιοχή όπου χρησιμοποιείτε το AWS Glue.
  2. Εκτελέστε το ακόλουθο ερώτημα για να δημιουργήσετε τον πίνακα ορίζοντας μια θέση S3 όπου και οι ρόλοι σας Athena και AWS Glue μπορούν να διαβάζουν και να γράφουν. Επίσης, μπορεί να θέλετε να αποθηκεύσετε τον πίνακα σε διαφορετική βάση δεδομένων από αυτήν default (εάν το κάνετε αυτό, ενημερώστε το κατάλληλο όνομα πίνακα ανάλογα στα παραδείγματα που παρέχονται).
    CREATE EXTERNAL TABLE default.exchange_rates(currency string, exchange_rate double)
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ','
    STORED AS TEXTFILE
    LOCATION 's3://<enter some bucket>/exchange_rates/';

  3. Εισαγάγετε μερικά δείγματα μετατροπών στον πίνακα:
    INSERT INTO default.exchange_rates VALUES ('usd', 1.0), ('eur', 1.09), ('gbp', 1.24);
  4. Θα πρέπει τώρα να μπορείτε να προβάλετε τον πίνακα με το ακόλουθο ερώτημα:
    SELECT * FROM default.exchange_rates
  5. Επιστρέψτε στην οπτική εργασία AWS Glue, προσθέστε ένα Lookup κόμβος (ως παιδί του Drop Fields) και ονομάστε το Exchange rate.
  6. Εισαγάγετε το όνομα ποιότητας του πίνακα που μόλις δημιουργήσατε, χρησιμοποιώντας currency ως κλειδί και επιλέξτε το exchange_rate πεδίο για χρήση.
    Επειδή το πεδίο έχει το ίδιο όνομα τόσο στα δεδομένα όσο και στον πίνακα αναζήτησης, μπορούμε απλώς να εισαγάγουμε το όνομα currency και δεν χρειάζεται να ορίσετε μια αντιστοίχιση.Διαμόρφωση αναζήτησης
    Τη στιγμή της σύνταξης αυτού του κειμένου, ο μετασχηματισμός αναζήτησης δεν υποστηρίζεται στην προεπισκόπηση δεδομένων και θα εμφανίσει ένα σφάλμα ότι ο πίνακας δεν υπάρχει. Αυτό είναι μόνο για την προεπισκόπηση δεδομένων και δεν εμποδίζει τη σωστή εκτέλεση της εργασίας. Τα λίγα βήματα που απομένουν της ανάρτησης δεν απαιτούν από εσάς να ενημερώσετε το σχήμα. Εάν πρέπει να εκτελέσετε μια προεπισκόπηση δεδομένων σε άλλους κόμβους, μπορείτε να αφαιρέσετε προσωρινά τον κόμβο αναζήτησης και στη συνέχεια να τον επαναφέρετε.
  7. Προσθέστε μια Παράγωγη στήλη κόμβο και ονομάστε τον Total in usd.
  8. Ονομάστε τη στήλη που προκύπτει total_usd και χρησιμοποιήστε την ακόλουθη έκφραση SQL:
    round(contracts * price * exchange_rate, 2)
    Διαμόρφωση μετατροπής νομίσματος
  9. Προσθέστε μια Προσθήκη τρέχουσας χρονοσήμανσης κόμβο και ονομάστε τη στήλη ingest_date.
  10. Χρησιμοποιήστε τη μορφή %Y-%m-%d για τη χρονική σας σήμανση (για λόγους επίδειξης, χρησιμοποιούμε απλώς την ημερομηνία, μπορείτε να την κάνετε πιο ακριβή αν θέλετε).
    Διαμόρφωση χρονοσήμανσης

Αποθηκεύστε τον πίνακα ιστορικών παραγγελιών

Για να αποθηκεύσετε τον πίνακα παραγγελιών ιστορικού, ολοκληρώστε τα παρακάτω βήματα:

  1. Προσθέστε έναν κόμβο στόχο S3 και ονομάστε τον Orders table.
  2. Διαμορφώστε τη μορφή Parquet με γρήγορη συμπίεση και παρέχετε μια διαδρομή στόχου S3 κάτω από την οποία θα αποθηκεύονται τα αποτελέσματα (χωριστά από τη σύνοψη).
  3. Αγορά Δημιουργήστε έναν πίνακα στον Κατάλογο Δεδομένων και στις επόμενες εκτελέσεις, ενημερώστε το σχήμα και προσθέστε νέα διαμερίσματα.
  4. Εισαγάγετε μια βάση δεδομένων προορισμού και ένα όνομα για τον νέο πίνακα, για παράδειγμα: option_orders.
    Διαμόρφωση επιτραπέζιου νεροχύτη

Το τελευταίο μέρος του διαγράμματος θα πρέπει τώρα να μοιάζει με το παρακάτω, με δύο κλάδους για τις δύο ξεχωριστές εξόδους.
DAG

Αφού εκτελέσετε την εργασία με επιτυχία, μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως το Athena για να ελέγξετε τα δεδομένα που έχει δημιουργήσει η εργασία υποβάλλοντας ερώτημα στον νέο πίνακα. Μπορείτε να βρείτε τον πίνακα στη λίστα Athena και να επιλέξετε Πίνακας προεπισκόπησης ή απλώς εκτελέστε ένα ερώτημα SELECT (ενημερώνοντας το όνομα του πίνακα με το όνομα και τον κατάλογο που χρησιμοποιήσατε):

SELECT * FROM default.option_orders limit 10

Το περιεχόμενο του πίνακα σας θα πρέπει να μοιάζει με το παρακάτω στιγμιότυπο οθόνης.
Περιεχόμενο πίνακα

εκκαθάριση

Εάν δεν θέλετε να διατηρήσετε αυτό το παράδειγμα, διαγράψτε τις δύο εργασίες που δημιουργήσατε, τους δύο πίνακες στο Athena και τις διαδρομές S3 όπου ήταν αποθηκευμένα τα αρχεία εισόδου και εξόδου.

Συμπέρασμα

Σε αυτήν την ανάρτηση, δείξαμε πώς οι νέοι μετασχηματισμοί στο AWS Glue Studio μπορούν να σας βοηθήσουν να κάνετε πιο προηγμένους μετασχηματισμούς με ελάχιστη διαμόρφωση. Αυτό σημαίνει ότι μπορείτε να εφαρμόσετε περισσότερες περιπτώσεις χρήσης ETL χωρίς να χρειάζεται να γράψετε και να διατηρήσετε κώδικα. Οι νέοι μετασχηματισμοί είναι ήδη διαθέσιμοι στο AWS Glue Studio, ώστε να μπορείτε να χρησιμοποιήσετε τους νέους μετασχηματισμούς σήμερα στις οπτικές σας εργασίες.


Σχετικά με τον Συγγραφέα

Γκονσάλο Ερέρος είναι Senior Big Data Architect στην ομάδα AWS Glue.

Σφραγίδα ώρας:

Περισσότερα από Μεγάλα δεδομένα AWS