Äau Habr! PiedÄvÄju jÅ«su uzmanÄ«bai raksta tulkojumu
Dati, tÄpat kÄ mÅ«su pieredze, nepÄrtraukti uzkrÄjas un attÄ«stÄs. Lai neatpaliktu, mÅ«su garÄ«gajiem pasaules modeļiem ir jÄpielÄgojas jauniem datiem, no kuriem daži satur jaunas dimensijas ā jaunus veidus, kÄ novÄrot lietas, par kurÄm mums iepriekÅ” nebija ne jausmas. Å ie garÄ«gie modeļi daudz neatŔķiras no tabulu shÄmÄm, kas nosaka, kÄ mÄs klasificÄjam un apstrÄdÄjam jaunu informÄciju.
Tas mÅ«s noved pie shÄmas pÄrvaldÄ«bas jautÄjuma. Laika gaitÄ mainÄs biznesa izaicinÄjumi un prasÄ«bas, mainÄs arÄ« jÅ«su datu struktÅ«ra. Delta Lake ļauj viegli ieviest jaunus mÄrÄ«jumus, mainoties datiem. LietotÄjiem ir pieejama vienkÄrÅ”a semantika, lai pÄrvaldÄ«tu savas tabulu shÄmas. Å ie rÄ«ki ietver Schema Enforcement, kas pasargÄ lietotÄjus no nejauÅ”as tabulu piesÄrÅoÅ”anas ar kļūdÄm vai nevajadzÄ«giem datiem, un Schema Evolution, kas ļauj atbilstoÅ”ajÄm vietÄm automÄtiski pievienot jaunas vÄrtÄ«gu datu kolonnas. Å ajÄ rakstÄ mÄs iedziļinÄsimies Å”o rÄ«ku izmantoÅ”anÄ.
Izpratne par tabulu shÄmÄm
Katrs Apache Spark DataFrame satur shÄmu, kas nosaka datu formu, piemÄram, datu tipus, kolonnas un metadatus. Izmantojot Delta Lake, tabulas shÄma tiek saglabÄta JSON formÄtÄ darÄ«jumu žurnÄlÄ.
Kas ir shÄmas izpilde?
ShÄmas izpilde, kas pazÄ«stama arÄ« kÄ shÄmas validÄcija, ir Delta Lake droŔības mehÄnisms, kas nodroÅ”ina datu kvalitÄti, noraidot ierakstus, kas neatbilst tabulas shÄmai. TÄpat kÄ saimniece populÄrÄ restorÄna reÄ£istratÅ«rÄ, kurÄ ir tikai rezervÄcijas, viÅa pÄrbauda, āāvai katra tabulÄ ievadÄ«tÄ datu kolonna atrodas attiecÄ«gajÄ paredzamo kolonnu sarakstÄ (citiem vÄrdiem sakot, vai katrai no tÄm ir "rezervÄcija"). ). un noraida visus ierakstus ar kolonnÄm, kuras nav sarakstÄ.
KÄ darbojas shÄmas izpilde?
Delta Lake izmanto shÄmas rakstÄ«Å”anas pÄrbaudi, kas nozÄ«mÄ, ka visu jauno ierakstu tabulÄ tiek pÄrbaudÄ«ta saderÄ«ba ar mÄrÄ·a tabulas shÄmu rakstÄ«Å”anas laikÄ. Ja shÄma ir nekonsekventa, Delta Lake pilnÄ«bÄ pÄrtrauc darÄ«jumu (nav rakstÄ«ti dati) un rada izÅÄmumu, lai informÄtu lietotÄju par neatbilstÄ«bu.
Delta Lake izmanto Å”Ädus noteikumus, lai noteiktu, vai ieraksts ir saderÄ«gs ar tabulu. RakstÄms datu rÄmis:
- nevar saturÄt papildu kolonnas, kas nav mÄrÄ·a tabulas shÄmÄ. Un otrÄdi, viss ir kÄrtÄ«bÄ, ja ienÄkoÅ”ajos datos nav absolÅ«ti visas tabulas kolonnas - Ŕīm kolonnÄm vienkÄrÅ”i tiks pieŔķirtas nulles vÄrtÄ«bas.
- nevar bÅ«t kolonnu datu tipi, kas atŔķiras no mÄrÄ·a tabulas kolonnu datu tipiem. Ja mÄrÄ·a tabulas kolonnÄ ir ietverti StringType dati, bet attiecÄ«gajÄ DataFrame kolonnÄ ir IntegerType dati, shÄmas izpilde radÄ«s izÅÄmumu un neļaus veikt rakstÄ«Å”anas darbÄ«bu.
- nevar saturÄt kolonnu nosaukumus, kas atŔķiras tikai gadÄ«jumÄ. Tas nozÄ«mÄ, ka kolonnas ar nosaukumu "Foo" un "foo" nevar definÄt vienÄ tabulÄ. Lai gan Spark var izmantot reÄ£istrjutÄ«gÄ vai reÄ£istrjutÄ«gÄ (noklusÄjuma) režīmÄ, Delta Lake saglabÄ reÄ£istrjutÄ«gos, bet shÄmas krÄtuvÄ ir nejutÄ«ga. Parkets ir reÄ£istrjutÄ«gs, saglabÄjot un atgriežot kolonnu informÄciju. Lai izvairÄ«tos no iespÄjamÄm kļūdÄm, datu sabojÄÅ”anas vai datu zuduma (ko mÄs personÄ«gi piedzÄ«vojÄm Databricks), mÄs nolÄmÄm pievienot Å”o ierobežojumu.
Lai to ilustrÄtu, apskatÄ«sim, kas notiek tÄlÄk esoÅ”ajÄ kodÄ, mÄÄ£inot pievienot dažas tikko Ä£enerÄtas kolonnas Delta Lake tabulai, kas vÄl nav konfigurÄta, lai tÄs pieÅemtu.
# Š”Š³ŠµŠ½ŠµŃŠøŃŃŠµŠ¼ DataFrame ŃŃŃŠ“, ŠŗŠ¾ŃŠ¾ŃŃŠ¹ Š¼Ń Š“Š¾Š±Š°Š²ŠøŠ¼ Š² Š½Š°ŃŃ ŃŠ°Š±Š»ŠøŃŃ Delta Lake
loans = sql("""
SELECT addr_state, CAST(rand(10)*count as bigint) AS count,
CAST(rand(10) * 10000 * count AS double) AS amount
FROM loan_by_state_delta
""")
# ŠŃŠ²ŠµŃŃŠø ŠøŃŃ
Š¾Š“Š½ŃŃ ŃŃ
ŠµŠ¼Ń DataFrame
original_loans.printSchema()
root
|-- addr_state: string (nullable = true)
|-- count: integer (nullable = true)
# ŠŃŠ²ŠµŃŃŠø Š½Š¾Š²ŃŃ ŃŃ
ŠµŠ¼Ń DataFrame
loans.printSchema()
root
|-- addr_state: string (nullable = true)
|-- count: integer (nullable = true)
|-- amount: double (nullable = true) # new column
# ŠŠ¾ŠæŃŃŠŗŠ° Š“Š¾Š±Š°Š²ŠøŃŃ Š½Š¾Š²ŃŠ¹ DataFrame (Ń Š½Š¾Š²ŃŠ¼ ŃŃŠ¾Š»Š±ŃŠ¾Š¼) Š² ŃŃŃŠµŃŃŠ²ŃŃŃŃŃ ŃŠ°Š±Š»ŠøŃŃ
loans.write.format("delta")
.mode("append")
.save(DELTALAKE_PATH)
Returns:
A schema mismatch detected when writing to the Delta table.
To enable schema migration, please set:
'.option("mergeSchema", "true")'
Table schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
Data schema:
root
-- addr_state: string (nullable = true)
-- count: long (nullable = true)
-- amount: double (nullable = true)
If Table ACLs are enabled, these options will be ignored. Please use the ALTER TABLE command for changing the schema.
TÄ vietÄ, lai automÄtiski pievienotu jaunas kolonnas, Delta Lake uzliek shÄmu un pÄrtrauc rakstÄ«Å”anu. Lai palÄ«dzÄtu noteikt, kura kolonna (vai kolonnu kopa) izraisa neatbilstÄ«bu, Spark salÄ«dzinÄÅ”anai izvada abas shÄmas no steka izsekoÅ”anas.
KÄds ir shÄmas ievieÅ”anas ieguvums?
TÄ kÄ shÄmas izpilde ir diezgan stingra pÄrbaude, tas ir lielisks rÄ«ks, ko izmantot kÄ tÄ«ru, pilnÄ«bÄ pÄrveidotu datu kopu, kas ir gatava ražoÅ”anai vai patÄriÅam. Parasti tiek lietots tabulÄm, kas tieÅ”i baro datus:
- MaŔīnmÄcÄ«Å”anÄs algoritmi
- BI informÄcijas paneļi
- Datu analÄ«zes un vizualizÄcijas rÄ«ki
- Jebkura ražoÅ”anas sistÄma, kurai nepiecieÅ”amas augsti strukturÄtas, stingri tipizÄtas semantiskÄs shÄmas.
Lai sagatavotu savus datus Å”im pÄdÄjam ŔķÄrslim, daudzi lietotÄji izmanto vienkÄrÅ”u āvairÄku apļuā arhitektÅ«ru, kas savÄs tabulÄs pakÄpeniski ievieÅ” struktÅ«ru. Lai uzzinÄtu vairÄk par to, varat iepazÄ«ties ar rakstu
Protams, shÄmas izpildi var izmantot jebkur jÅ«su konveijerÄ, taÄu atcerieties, ka Å”ajÄ gadÄ«jumÄ straumÄÅ”ana uz tabulu var bÅ«t apgrÅ«tinoÅ”a, jo, piemÄram, esat aizmirsis, ka ienÄkoÅ”ajiem datiem pievienojÄt citu kolonnu.
Datu atŔķaidÄ«Å”anas novÄrÅ”ana
IespÄjams, tagad jums rodas jautÄjums, par ko ir tÄ satraukums? Galu galÄ dažreiz neparedzÄta "shÄmas neatbilstÄ«bas" kļūda var traucÄt jÅ«su darbplÅ«smai, it Ä«paÅ”i, ja esat iesÄcÄjs Delta Lake. KÄpÄc gan neļaut shÄmai mainÄ«ties pÄc vajadzÄ«bas, lai es varÄtu ierakstÄ«t savu DataFrame neatkarÄ«gi no tÄ?
KÄ saka vecais teiciens, āneviena unce profilakses ir mÄrciÅas vÄrta ÄrstÄÅ”anaiā. KÄdÄ brÄ«dÄ«, ja neparÅ«pÄsities par savas shÄmas ievieÅ”anu, datu tipu saderÄ«bas problÄmas radÄ«s neglÄ«tas galvas ā Ŕķietami viendabÄ«gos neapstrÄdÄtos datu avotos var bÅ«t malu gadÄ«jumi, bojÄtas kolonnas, nepareizi veidoti kartÄjumi vai citas biedÄjoÅ”as lietas, par kurÄm sapÅot. murgi. LabÄkÄ pieeja ir apturÄt Å”os ienaidniekus pie vÄrtiem ā ar shÄmas ievieÅ”anu ā un rÄ«koties ar tiem gaismÄ, nevis vÄlÄk, kad tie sÄk slÄpties jÅ«su ražoÅ”anas koda tumÅ”ajÄ dziļumÄ.
ShÄmas izpilde sniedz jums pÄrliecÄ«bu, ka tabulas shÄma nemainÄ«sies, ja vien neapstiprinÄsit izmaiÅas. Tas novÄrÅ” datu atŔķaidÄ«Å”anu, kas var rasties, ja jaunas kolonnas tiek pievienotas tik bieži, ka iepriekÅ” vÄrtÄ«gas, saspiestas tabulas zaudÄ savu nozÄ«mi un lietderÄ«bu datu pÄrpludinÄÅ”anas dÄļ. Mudinot jÅ«s bÅ«t apzinÄtam, noteikt augstus standartus un sagaidÄ«t augstu kvalitÄti, shÄmas izpilde dara tieÅ”i to, kam tÄ bija paredzÄta ā palÄ«dz jums palikt apzinÄ«gam un jÅ«su izklÄjlapas tÄ«ras.
Ja pÄc tÄlÄkas apsvÄrÅ”anas jÅ«s nolemjat, ka jÅ«s patieÅ”Äm nepiecieÅ”amÄ«ba pievienot jaunu kolonnu ā nekÄdu problÄmu, zemÄk ir vienas rindiÅas labojums. RisinÄjums ir Ä·Ädes evolÅ«cija!
Kas ir shÄmas evolÅ«cija?
ShÄmas evolÅ«cija ir lÄ«dzeklis, kas lietotÄjiem ļauj viegli mainÄ«t paÅ”reizÄjo tabulas shÄmu atbilstoÅ”i datiem, kas laika gaitÄ mainÄs. To visbiežÄk izmanto, veicot pievienoÅ”anas vai pÄrrakstÄ«Å”anas darbÄ«bu, lai automÄtiski pielÄgotu shÄmu, iekļaujot tajÄ vienu vai vairÄkas jaunas kolonnas.
KÄ darbojas shÄmas evolÅ«cija?
IevÄrojot iepriekÅ”ÄjÄs sadaļas piemÄru, izstrÄdÄtÄji var viegli izmantot shÄmas evolÅ«ciju, lai pievienotu jaunas kolonnas, kas iepriekÅ” tika noraidÄ«tas shÄmas nekonsekvences dÄļ. ĶÄdes evolÅ«cija tiek aktivizÄta, pievienojot .option('mergeSchema', 'true')
savai Spark komandai .write ŠøŠ»Šø .writeStream.
# ŠŠ¾Š±Š°Š²ŃŃŠµ ŠæŠ°ŃŠ°Š¼ŠµŃŃ mergeSchema
loans.write.format("delta")
.option("mergeSchema", "true")
.mode("append")
.save(DELTALAKE_SILVER_PATH)
Lai skatÄ«tu grafiku, palaidiet Å”Ädu Spark SQL vaicÄjumu
# Š”Š¾Š·Š“Š°Š¹ŃŠµ Š³ŃŠ°ŃŠøŠŗ Ń Š½Š¾Š²ŃŠ¼ ŃŃŠ¾Š»Š±ŃŠ¾Š¼, ŃŃŠ¾Š±Ń ŠæŠ¾Š“ŃŠ²ŠµŃŠ“ŠøŃŃ, ŃŃŠ¾ Š·Š°ŠæŠøŃŃ ŠæŃŠ¾ŃŠ»Š° ŃŃŠæŠµŃŠ½Š¾
%sql
SELECT addr_state, sum(`amount`) AS amount
FROM loan_by_state_delta
GROUP BY addr_state
ORDER BY sum(`amount`)
DESC LIMIT 10
Varat arī iestatīt Ŕo opciju visai Spark sesijai, pievienojot spark.databricks.delta.schema.autoMerge = True
uz Spark konfigurÄciju. TaÄu izmantojiet to piesardzÄ«gi, jo shÄmas izpilde vairs nebrÄ«dinÄs par netÄ«Å”Äm shÄmas neatbilstÄ«bÄm.
PieprasÄ«jumÄ iekļaujot parametru mergeSchema
, visas kolonnas, kas atrodas DataFrame, bet nav mÄrÄ·a tabulÄ, tiek automÄtiski pievienotas shÄmas beigÄm kÄ rakstÄ«Å”anas transakcijas daļa. Var pievienot arÄ« ligzdotos laukus, un tie tiks pievienoti arÄ« atbilstoÅ”Äs struktÅ«ras kolonnu beigÄs.
Datuma inženieri un datu zinÄtnieki var izmantot Å”o opciju, lai esoÅ”ajÄm maŔīnmÄcÄ«Å”anÄs ražoÅ”anas tabulÄm pievienotu jaunas slejas (iespÄjams, nesen izsekotu metriku vai Ŕī mÄneÅ”a pÄrdoÅ”anas veiktspÄjas sleju), nepÄrkÄpjot esoÅ”os modeļus, kuru pamatÄ ir vecÄs kolonnas.
ShÄmas evolÅ«cijas ietvaros tabulas pievienoÅ”anas vai pÄrrakstÄ«Å”anas laikÄ ir atļauts veikt tÄlÄk norÄdÄ«tos shÄmu izmaiÅu veidus.
- Jaunu kolonnu pievienoÅ”ana (Å”is ir visizplatÄ«tÄkais scenÄrijs)
- Datu tipu maiÅa no NullType -> jebkura cita veida vai veicinÄÅ”ana no ByteType -> ShortType -> IntegerType
Citas izmaiÅas, kas nav atļautas shÄmas evolÅ«cijÄ, prasa, lai shÄma un dati ir jÄpÄrraksta, pievienojot .option("overwriteSchema", "true")
. PiemÄram, ja kolonna "Foo" sÄkotnÄji bija vesels skaitlis un jaunÄ shÄma bija virknes datu tips, visi Parquet(data) faili bÅ«tu jÄpÄrraksta. Å Ädas izmaiÅas ietver:
- kolonnas dzÄÅ”ana
- esoÅ”Äs kolonnas datu veida maiÅa (uz vietas)
- pÄrdÄvÄjot kolonnas, kas atŔķiras tikai reÄ£istros (piemÄram, "Foo" un "foo")
Visbeidzot, ar nÄkamo Spark 3.0 izlaidumu tiks pilnÄ«bÄ atbalstÄ«ts precÄ«zs DDL (izmantojot ALTER TABLE), ļaujot lietotÄjiem veikt Å”Ädas darbÄ«bas ar tabulu shÄmÄm:
- pievienojot kolonnas
- mainot kolonnas komentÄrus
- tabulas rekvizÄ«tu iestatÄ«Å”ana, kas kontrolÄ tabulas darbÄ«bu, piemÄram, darÄ«jumu žurnÄla glabÄÅ”anas laika iestatÄ«Å”ana.
KÄds ir Ä·Ädes evolÅ«cijas ieguvums?
ShÄmas evolÅ«ciju var izmantot jebkurÄ laikÄ nodomÄt mainiet tabulas shÄmu (pretstatÄ tam, kad nejauÅ”i savam DataFrame pievienojÄt kolonnas, kurÄm tur nevajadzÄtu bÅ«t). Å is ir vienkÄrÅ”Äkais veids, kÄ migrÄt shÄmu, jo tas automÄtiski pievieno pareizos kolonnu nosaukumus un datu tipus, tos nedeklarÄjot tieÅ”i.
SecinÄjums
ShÄmas izpilde noraida visas jaunas kolonnas vai citas shÄmas izmaiÅas, kas nav saderÄ«gas ar jÅ«su tabulu. Nosakot un uzturot Å”os augstos standartus, analÄ«tiÄ·i un inženieri var paļauties, ka viÅu datiem ir visaugstÄkais integritÄtes lÄ«menis, paziÅojot tos skaidri un skaidri, ļaujot viÅiem pieÅemt labÄkus biznesa lÄmumus.
No otras puses, shÄmas evolÅ«cija papildina izpildi, vienkÄrÅ”ojot apgalvots automÄtiskas shÄmas izmaiÅas. Galu galÄ kolonnas pievienoÅ”anai nevajadzÄtu bÅ«t sarežģītai.
ShÄmas piespiedu pielietojums ir jaÅ, kur shÄmas evolÅ«cija ir iÅ. Lietojot kopÄ, Ŕīs funkcijas padara trokÅ”Åu slÄpÄÅ”anu un signÄla noregulÄÅ”anu vieglÄku nekÄ jebkad agrÄk.
MÄs arÄ« vÄlÄtos pateikties Mukul Murthy un Pranav Anand par viÅu ieguldÄ«jumu Å”ajÄ rakstÄ.
Citi raksti Å”ajÄ sÄrijÄ:
Saistītie raksti
Avots: www.habr.com