Kümme uut visuaalset muudatust AWS Glue Studios

Kümme uut visuaalset muudatust AWS Glue Studios

Allikasõlm: 2641422

AWS liimistuudio on graafiline liides, mille abil on lihtne luua, käitada ja jälgida ekstrakti, teisendamist ja laadimist (ETL) töid. AWS liim. See võimaldab teil visuaalselt koostada andmete teisendamise töövooge, kasutades erinevaid andmetöötlusetappe esindavaid sõlme, mis hiljem teisendatakse automaatselt käitamiseks kasutatavaks koodiks.

AWS liimistuudio hiljuti vabastatud Veel 10 visuaalset teisendust, mis võimaldavad luua keerukamaid töid visuaalselt ilma kodeerimisoskusteta. Selles postituses käsitleme võimalikke kasutusjuhtumeid, mis kajastavad ühiseid ETL-i vajadusi.

Uued teisendused, mida selles postituses näidatakse, on järgmised: liitmine, poolitatud string, massiiv veergudesse, praeguse ajatempli lisamine, veergude liigendridade, veergude liigendamist ridadesse, otsing, massiivi lõhkendamine või veergudeks vastendamine, tuletatud veeru ja automaatse tasakaalustamise töötlemine. .

Lahenduse ülevaade

Sel juhul on meil mõned JSON-failid aktsiaoptsioonitoimingutega. Soovime enne andmete salvestamist teha mõningaid teisendusi, et neid oleks lihtsam analüüsida, ning samuti tahame koostada eraldi andmekogumi kokkuvõtte.

Selles andmekogumis tähistab iga rida optsioonilepingute tehingut. Optsioonid on finantsinstrumendid, mis annavad õiguse, kuid mitte kohustuse, osta või müüa aktsiaaktsiaid fikseeritud hinnaga (nn.  streigi hind) enne kindlaksmääratud aegumiskuupäeva.

Sisendandmed

Andmed järgivad järgmist skeemi:

  • Tellimuse ID - kordumatu ID
  • sümbol – Kood, mis põhineb tavaliselt mõnel tähel, et tuvastada alusaktsiaid emiteeriv ettevõte
  • instrument – nimi, mis identifitseerib konkreetse ostetava või müüdava optsiooni
  • raha – ISO valuutakood, milles hind on väljendatud
  • hind – Summa, mis maksti iga optsioonilepingu ostmise eest (enamikul börsidel võimaldab üks leping osta või müüa 100 aktsiat)
  • vahetamine – Börsikeskuse või koha kood, kus optsiooniga kaubeldakse
  • müüdud – Loetelu lepingute arvust, mis on määratud müügitellimuse täitmiseks, kui tegemist on müügitehinguga
  • ostnud – Ostutellimuse täitmiseks eraldatud lepingute arvu loend, kui tegemist on ostutehinguga

Järgmine on selle postituse jaoks loodud sünteetiliste andmete näidis:

{"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 nõuded

Nendel andmetel on mitmeid unikaalseid omadusi, mida sageli leidub vanemates süsteemides, mis muudavad andmete kasutamise raskemaks.

ETL-i nõuded on järgmised:

  • Instrumendi nimes on väärtuslikku teavet, mis on mõeldud inimestele mõistmiseks; tahame selle analüüsi hõlbustamiseks normaliseerida eraldi veergudeks.
  • Atribuudid bought ja sold on üksteist välistavad; saame need koondada ühte veergu koos lepingunumbritega ja saada teise veeru, mis näitab, kas lepinguid osteti või müüdi selles järjekorras.
  • Soovime säilitada teavet üksikute lepingute jaotuste kohta, kuid üksikute ridadena, selle asemel, et sundida kasutajaid käsitlema arvude massiivi. Võiksime numbreid liita, kuid kaotaksime teabe tellimuse täitmise kohta (mis näitab turu likviidsust). Selle asemel otsustame tabeli denormaliseerida, nii et igal real on üks arv lepinguid, jagades mitme numbriga tellimused eraldi ridadeks. Tihendatud veeruvormingus on selle korduse lisamaht tihendamise rakendamisel sageli väike, seega on vastuvõetav andmestiku päringute esitamise hõlbustamine.
  • Soovime koostada iga aktsia kohta iga optsioonitüübi (call and put) mahu kokkuvõtliku tabeli. See annab ülevaate turu sentimendist iga aktsia ja turu kohta üldiselt (ahnus vs hirm).
  • Üldiste kaubanduskokkuvõtete võimaldamiseks tahame esitada iga toimingu jaoks üldsumma ja standardida valuuta USA dollarites, kasutades ligikaudset konversiooniviidet.
  • Soovime lisada kuupäeva, millal need muudatused toimusid. See võib olla kasulik näiteks viite saamiseks selle kohta, millal valuuta konverteeriti.

Nende nõuete alusel annab töö kaks väljundit:

  • CSV-fail iga sümboli ja tüübi lepingute arvu kokkuvõttega
  • Kataloogitabel tellimuse ajaloo säilitamiseks pärast näidatud teisenduste tegemist
    Andmeskeem

Eeldused

Selle kasutusjuhtumi jaoks on teil vaja oma S3 ämbrit. Uue ämbri loomiseks vaadake Ämbri loomine.

Looge sünteetilisi andmeid

Selle postituse jätkamiseks (või seda tüüpi andmetega iseseisvalt katsetamiseks) saate selle andmekogumi sünteetiliselt genereerida. Järgmist Pythoni skripti saab käivitada Pythoni keskkonnas, kuhu on installitud Boto3 ja millele on juurdepääs Amazoni lihtne salvestusteenus (Amazon S3).

Andmete genereerimiseks toimige järgmiselt.

  1. Looge AWS Glue Studios valikuga uus töö Pythoni shelliskriptiredaktor.
  2. Andke tööle nimi ja peal Töö üksikasjad valige a sobiv roll ja Pythoni skripti nimi.
  3. aasta Töö üksikasjad jaotis, laiendage Täiustatud omadused ja kerige alla Töö parameetrid.
  4. Sisestage parameeter nimega --bucket ja määrake väärtuseks ämbri nimi, mida soovite näidisandmete salvestamiseks kasutada.
  5. Sisestage AWS Glue kestaredaktorisse järgmine skript:
    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. Käivitage töö ja oodake, kuni see kuvatakse vahekaardil Runs edukalt lõpetatuna (see peaks võtma vaid mõne sekundi).

Iga käitamine loob JSON-faili 1,000 reaga määratud ämbri ja eesliite all transformsblog/inputdata/. Kui soovite testida rohkemate sisendfailidega, saate seda tööd mitu korda käivitada.
Sünteetiliste andmete iga rida on andmerida, mis esindab JSON-objekti, nagu järgmine:

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

Looge AWS-liimi visuaalne töö

AWS-liimi visuaalse töö loomiseks toimige järgmiselt.

  1. Avage AWS Glue Studio ja looge töö, kasutades valikut Visuaal tühja lõuendiga.
  2. Edit Untitled job et anda sellele nimi ja määrata AWS Glue'ile sobiv roll kohta Töö üksikasjad Tab.
  3. Lisage S3 andmeallikas (saate sellele nime anda JSON files source) ja sisestage S3 URL, mille alla failid on salvestatud (näiteks s3://<your bucket name>/transformsblog/inputdata/), seejärel valige JSON andmevorminguna.
  4. valima Järelda skeem seega määrab see andmete põhjal väljundskeemi.

Sellest lähtesõlmest jätkate teisenduste aheldamist. Iga teisenduse lisamisel veenduge, et valitud sõlm oleks viimati lisatud, nii et see määratakse vanemaks, kui juhistes pole teisiti märgitud.

Kui te ei valinud õiget vanemat, saate vanemat alati muuta, valides selle ja valides konfiguratsioonipaanil teise vanema.

Sõlme vanema konfiguratsioon

Igale lisatud sõlmele annate sellele konkreetse nime (nii et sõlme eesmärk kuvatakse graafikul) ja konfiguratsiooni Muutma Tab.

Iga kord, kui teisendus muudab skeemi (näiteks lisab uue veeru), tuleb väljundskeemi värskendada, et see oleks nähtav allavoolu teisendustele. Saate väljundskeemi käsitsi redigeerida, kuid praktilisem ja turvalisem on seda teha andmete eelvaate abil.
Lisaks saate sel viisil kontrollida, kas teisendus töötab ootuspäraselt. Selleks avage Andmete eelvaade vahekaarti, kus teisendus on valitud, ja alustage eelvaate seanssi. Kui olete veendunud, et teisendatud andmed näevad välja ootuspärased, minge lehele Väljundskeem ja valige Kasutage andmete eelvaate skeemi skeemi automaatseks värskendamiseks.

Kui lisate uut tüüpi teisendusi, võib eelvaade kuvada sõnumi puuduva sõltuvuse kohta. Kui see juhtub, valige Lõpeta seanss ja alustage uut, nii et eelvaade valib uut tüüpi sõlme.

Instrumendi teabe väljavõte

Alustame instrumendi nime puudutava teabega, et normaliseerida see veergudeks, millele on tulemuseks olevas väljundtabelis hõlpsamini juurdepääsetav.

  1. Lisa Lõigatud string sõlm ja nimeta see Split instrument, mis märgistab instrumendi veeru tühiku regexi abil: s+ (sel juhul sobiks üks ruum, kuid nii on paindlikum ja visuaalselt selgem).
  2. Soovime säilitada algse instrumendi teabe sellisena, nagu see on, seega sisestage jagatud massiivi jaoks uus veeru nimi: instrument_arr.
    Jagatud konfiguratsioon
  3. Lisage üks Massiiv veergudeks sõlm ja nimeta see Instrument columns äsja loodud massiivi veeru teisendamiseks uuteks väljadeks, välja arvatud symbol, mille jaoks meil on juba veerg.
  4. Valige veerg instrument_arr, jätke esimene märk vahele ja paluge tal väljundi veerud ekstraktida month, day, year, strike_price, type indekseid kasutades 2, 3, 4, 5, 6 (tühikud pärast koma on loetavuse huvides, need ei mõjuta konfiguratsiooni).
    Massiivi konfiguratsioon

Väljavõtte aasta on väljendatud ainult kahekohalise numbriga; teeme vahe ja eeldame, et see on sellel sajandil, kui nad kasutavad ainult kahte numbrit.

  1. Lisa Tuletatud veerg sõlm ja nimeta see Four digits year.
  2. sisene year tuletatud veeruna, nii et see alistab selle, ja sisestage järgmine SQL-avaldis:
    CASE WHEN length(year) = 2 THEN ('20' || year) ELSE year END
    Aasta tuletatud veeru konfiguratsioon

Mugavuse huvides ehitame an expiration_date väljal, mis kasutajal võib olla viitena viimase võimaluse kasutamise kuupäevale.

  1. Lisa Ühendage veerud sõlm ja nimeta see Build expiration date.
  2. Nimetage uus veerg expiration_date, valige veerud year, monthja day (selles järjekorras) ja vahemärgina sidekriips.
    Ühendatud kuupäeva konfiguratsioon

Senine diagramm peaks välja nägema nagu järgmine näide.

DAG

Senine uute veergude andmete eelvaade peaks välja nägema nagu järgmine ekraanipilt.

Andmete eelvaade

Normaliseerige lepingute arv

Andmete igal real on märgitud iga optsiooni ostetud või müüdud lepingute arv ja partiid, mille alusel tellimusi täideti. Kaotamata teavet üksikute partiide kohta, soovime, et iga summa oleks üksikul real ühe summa väärtusega, samas kui ülejäänud teave kopeeritakse igal toodetud real.

Esiteks liidame summad ühte veergu.

  1. Lisage üks Eemaldage veerud ridadeks sõlm ja nimeta see Unpivot actions.
  2. Valige veerud bought ja sold pöörde tühistamiseks ja nimede ja väärtuste salvestamiseks veergudesse name action ja contracts, Vastavalt.
    Unpivot konfiguratsioon
    Pange tähele eelvaates, et uus veerg contracts on pärast seda teisendust endiselt arvude massiiv.
  1. Lisage üks Plahvata massiiv või kaardista ridadeks rida nimega Explode contracts.
  2. Vali contracts veergu ja sisestage contracts uue veeruna, et see alistada (me ei pea algset massiivi alles hoidma).

Eelvaade näitab nüüd, et igal real on üks contracts summa ja ülejäänud väljad on samad.

See tähendab ka seda order_id ei ole enam unikaalne võti. Oma kasutusjuhtudel peate otsustama, kuidas oma andmeid modelleerida ja kas soovite denormaliseerida või mitte.
Explode konfiguratsioon

Järgmine ekraanipilt on näide sellest, kuidas näevad uued veerud pärast senist muudatust välja.
Andmete eelvaade

Koostage kokkuvõtlik tabel

Nüüd loote kokkuvõtliku tabeli iga tüübi ja iga aktsia sümboli kohta kaubeldavate lepingute arvuga.

Oletame illustreerimiseks, et töödeldud failid kuuluvad ühele päevale, nii et käesolev kokkuvõte annab ärikasutajatele teavet selle kohta, milline on turu huvi ja meeleolu sellel päeval.

  1. Lisa Valige Väljad sõlm ja valige kokkuvõtte jaoks säilitamiseks järgmised veerud: symbol, typeja contracts.
    Valitud väljad
  2. Lisa Liigutage ridu veergudeks sõlm ja nimeta see Pivot summary.
  3. Agregaat kohta contracts veergu kasutades sum ja valige teisendada type kolonni.
    Pivot konfiguratsioon

Tavaliselt salvestate selle viitamiseks mõnda välisesse andmebaasi või faili; selles näites salvestame selle Amazon S3 CSV-failina.

  1. Lisage üks Automaatse tasakaalu töötlemine sõlm ja nimeta see Single output file.
  2. Kuigi seda teisendustüüpi kasutatakse tavaliselt paralleelsuse optimeerimiseks, kasutame seda siin väljundi vähendamiseks üheks failiks. Seetõttu sisestage 1 partitsioonide arvu konfiguratsioonis.
    Automaatse tasakaalu konfiguratsioon
  3. Lisage S3 sihtmärk ja nimetage see CSV Contract summary.
  4. Valige andmevorminguks CSV ja sisestage S3 tee, kuhu töörollil on lubatud faile salvestada.

Töö viimane osa peaks nüüd välja nägema nagu järgmine näide.
DAG

  1. Salvestage ja käivitage töö. Kasuta Jookseb vahekaarti, et kontrollida, kas see on edukalt lõppenud.
    Selle tee alt leiate faili, mis on CSV-fail, kuigi sellel laiendit pole. Tõenäoliselt peate selle avamiseks lisama laienduse pärast selle allalaadimist.
    Tööriistas, mis suudab lugeda CSV-d, peaks kokkuvõte välja nägema umbes nagu järgmine näide.
    Arvutustabel

Puhastage ajutised veerud

Tellimuste ajaloolisesse tabelisse salvestamiseks tulevaseks analüüsiks valmistudes puhastame mõned teel tekkinud ajutised veerud.

  1. Lisa Drop Fields sõlm koos Explode contracts sõlm on valitud selle vanemaks (eraldi väljundi genereerimiseks hargneme andmekonveieri).
  2. Valige väljad, millest loobute: instrument_arr, month, dayja year.
    Ülejäänud tahame alles jätta, et need salvestataks ajaloolises tabelis, mille me hiljem loome.
    Drop väljad

Valuuta standardimine

Need sünteetilised andmed sisaldavad väljamõeldud tehteid kahe valuutaga, kuid reaalses süsteemis võite saada valuutasid turgudelt üle kogu maailma. Kasulik on ühtlustada käsitletavad valuutad üheks võrdlusvaluutaks, et neid saaks aruandluse ja analüüsi jaoks hõlpsasti võrrelda ja koondada.

Me kasutame Amazonase Athena et simuleerida ligikaudsete valuutakonversioonide tabelit, mida perioodiliselt värskendatakse (siin eeldame, et töötleme tellimusi piisavalt õigeaegselt, et konversioon oleks võrdluse jaoks mõistlik).

  1. Avage Athena konsool samas piirkonnas, kus kasutate AWS-liimi.
  2. Käivitage tabeli loomiseks järgmine päring, määrates S3 asukoha, kus nii teie Athena kui ka AWS Glue'i rollid saavad lugeda ja kirjutada. Samuti võite soovida tabeli salvestada muusse andmebaasi kui default (kui teete seda, värskendage tabeli kvalifitseeritud nime vastavalt esitatud näidetes).
    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. Sisestage tabelisse mõned näidiskonversioonid:
    INSERT INTO default.exchange_rates VALUES ('usd', 1.0), ('eur', 1.09), ('gbp', 1.24);
  4. Nüüd peaksite saama vaadata tabelit järgmise päringuga:
    SELECT * FROM default.exchange_rates
  5. Tagasi AWS Glue'i visuaalse töö juurde, lisage a Otsing sõlm (lapsena Drop Fields) ja nimetage see Exchange rate.
  6. Sisestage äsja loodud tabeli kvaliteetnimi, kasutades currency klahvina ja valige exchange_rate kasutada.
    Kuna väljal on nii andmetes kui ka otsingutabelis sama nimi, võime lihtsalt nime sisestada currency ja ei pea kaardistamist määratlema.Otsi konfiguratsiooni
    Selle kirjutamise ajal ei toetata andmete eelvaates otsinguteisendust ja kuvatakse tõrge, et tabelit pole olemas. See on mõeldud ainult andmete eelvaate jaoks ja ei takista töö korrektset käitamist. Postituse mõned ülejäänud sammud ei nõua skeemi värskendamist. Kui teil on vaja käitada andmete eelvaadet teistes sõlmedes, saate otsingusõlme ajutiselt eemaldada ja seejärel tagasi panna.
  7. Lisa Tuletatud veerg sõlm ja nimeta see Total in usd.
  8. Nimetage tuletatud veerg total_usd ja kasutage järgmist SQL-avaldist:
    round(contracts * price * exchange_rate, 2)
    Valuuta konverteerimise konfiguratsioon
  9. Lisa Lisage praegune ajatempel sõlm ja nimeta veeru ingest_date.
  10. Kasutage vormingut %Y-%m-%d ajatempli jaoks (esitlemise eesmärgil kasutame lihtsalt kuupäeva; soovi korral saate seda täpsustada).
    Ajatempli konfiguratsioon

Salvestage ajalooliste tellimuste tabel

Ajalooliste tellimuste tabeli salvestamiseks toimige järgmiselt.

  1. Lisage S3 sihtsõlm ja nimetage see Orders table.
  2. Konfigureerige Parketi vorming kiire tihendamisega ja määrake S3 sihttee, mille alla tulemused salvestatakse (kokkuvõttest eraldi).
  3. valima Looge andmekataloogis ja järgmistel käitamistel tabel, värskendage skeemi ja lisage uued partitsioonid.
  4. Sisestage sihtandmebaas ja uue tabeli nimi, näiteks: option_orders.
    Laua valamu konfiguratsioon

Diagrammi viimane osa peaks nüüd välja nägema sarnane järgmisega, kahe haruga kahe eraldi väljundi jaoks.
DAG

Pärast töö edukat käivitamist saate uue tabeli päringute tegemisel töö loodud andmete ülevaatamiseks kasutada sellist tööriista nagu Athena. Leiate tabeli Athena loendist ja saate valida Tabeli eelvaade või lihtsalt käivitage SELECT päring (värskendades tabeli nime kasutatud nimele ja kataloogile):

SELECT * FROM default.option_orders limit 10

Teie tabeli sisu peaks välja nägema sarnane järgmisele ekraanipildile.
Tabeli sisu

Koristage

Kui te ei soovi seda näidet säilitada, kustutage kaks loodud tööd, kaks Athena tabelit ja S3-teed, kuhu sisend- ja väljundfailid salvestati.

Järeldus

Selles postituses näitasime, kuidas AWS Glue Studio uued teisendused aitavad teil minimaalse konfiguratsiooniga teha täpsemaid teisendusi. See tähendab, et saate rakendada rohkem ETL-i kasutusjuhtumeid, ilma et peaksite koodi kirjutama ja hooldama. Uued teisendused on AWS Glue Studios juba saadaval, nii et saate uusi teisendusi juba täna oma visuaalsetes töödes kasutada.


Andmeid autor

Gonzalo Herreros on AWS Glue meeskonna vanem suurandmete arhitekt.

Ajatempel:

Veel alates AWSi suured andmed