Għaddas f'Delta Lake: Infurzar u Evoluzzjoni tal-Iskema

Ħej Habr! Nippreżenta għall-attenzjoni tiegħek it-traduzzjoni tal-artiklu "Għass fid-Delta Lake: Infurzar u Evoluzzjoni tal-Iskema" awturi Burak Yavuz, Brenner Heintz u Denny Lee, li kien ippreparat b'antiċipazzjoni tal-bidu tal-kors Inġinier tad-Data minn OTUS.

Għaddas f'Delta Lake: Infurzar u Evoluzzjoni tal-Iskema

Id-dejta, bħall-esperjenza tagħna, qed takkumula u tevolvi kontinwament. Biex ilaħħqu, il-mudelli mentali tagħna tad-dinja jridu jadattaw għal dejta ġdida, li xi wħud minnhom fihom dimensjonijiet ġodda—modi ġodda taʼ kif nosservaw affarijiet li qabel ma kellniex idea dwarhom. Dawn il-mudelli mentali mhumiex ħafna differenti mill-iskemi tat-tabella li jiddeterminaw kif nikkategorizzaw u nipproċessaw informazzjoni ġdida.

Dan iwassalna għall-kwistjoni tal-ġestjoni tal-skema. Hekk kif l-isfidi u r-rekwiżiti tan-negozju jinbidlu maż-żmien, l-istruttura tad-dejta tiegħek ukoll qed tinbidel. Delta Lake jagħmilha faċli li tintroduċi kejl ġdid hekk kif tinbidel id-dejta. L-utenti għandhom aċċess għal semantika sempliċi biex jimmaniġġjaw l-iskemi tat-tabella tagħhom. Dawn l-għodod jinkludu l-Infurzar tal-Iskema, li tipproteġi lill-utenti milli jniġġsu t-tabelli tagħhom b'mod mhux intenzjonat bi żbalji jew dejta mhux meħtieġa, u Evoluzzjoni tal-Iskema, li tippermetti li kolonni ġodda ta 'dejta siewja jiġu miżjuda awtomatikament mal-postijiet xierqa. F'dan l-artikolu, aħna ser ngħaddu aktar fil-fond fl-użu ta 'dawn l-għodod.

Fehim ta' Skemi ta' Tabella

Kull DataFrame f'Apache Spark fih skema li tiddefinixxi l-forma tad-dejta, bħal tipi ta' dejta, kolonni u metadejta. B'Delta Lake, l-iskema tat-tabella hija maħżuna fil-format JSON ġewwa r-reġistru tat-tranżazzjonijiet.

X'inhu l-infurzar tal-iskema?

L-Infurzar tal-Iskema, magħruf ukoll bħala Validazzjoni tal-Iskema, huwa mekkaniżmu ta' sigurtà f'Delta Lake li jiżgura l-kwalità tad-dejta billi jirrifjuta r-rekords li ma jaqblux mal-iskema tat-tabella. Bħall-hostess fuq il-front desk ta’ ristorant popolari ta’ riservazzjoni biss, hija tiċċekkja jekk kull kolonna ta’ dejta mdaħħla fit-tabella hijiex fil-lista korrispondenti ta’ kolonni mistennija (fi kliem ieħor, jekk hemmx "riservazzjoni" għal kull waħda minnhom ). u tirrifjuta kwalunkwe rekord b'kolonni li mhumiex fil-lista.

Kif jaħdem l-infurzar tal-iskema?

Delta Lake juża l-iċċekkjar tal-skema fuq il-kitba, li jfisser li l-kitbiet ġodda kollha fuq it-tabella jiġu ċċekkjati għall-kompatibbiltà mal-iskema tat-tabella fil-mira fil-ħin tal-kitba. Jekk l-iskema hija inkonsistenti, Delta Lake twaqqaf it-tranżazzjoni għal kollox (l-ebda dejta mhi miktuba) u tqajjem eċċezzjoni biex tinnotifika lill-utent bl-inkonsistenza.
Delta Lake tuża r-regoli li ġejjin biex tiddetermina jekk rekord huwiex kompatibbli ma 'tabella. DataFrame li jista' jinkiteb:

  • ma jistax ikun fih kolonni addizzjonali li mhumiex fl-iskema tat-tabella fil-mira. Bil-maqlub, kollox huwa tajjeb jekk id-dejta li tidħol ma jkunx fiha assolutament il-kolonni kollha mit-tabella - dawn il-kolonni sempliċement jiġu assenjati valuri nulli.
  • ma jistax ikollu tipi ta' dejta ta' kolonni li huma differenti mit-tipi ta' dejta tal-kolonni fit-tabella fil-mira. Jekk il-kolonna tat-tabella fil-mira fiha dejta StringType, iżda l-kolonna korrispondenti fid-DataFrame fiha dejta IntegerType, l-infurzar tal-iskema se jarmi eċċezzjoni u jipprevjeni milli sseħħ l-operazzjoni tal-kitba.
  • ma jistax ikun fih ismijiet ta' kolonni li jvarjaw biss fil-każ. Dan ifisser li ma jistax ikollok kolonni bl-isem 'Foo' u 'foo' definiti fl-istess tabella. Filwaqt li Spark jista 'jintuża f'modalità sensittiva għall-każi jew insensittiva għall-każi (default), Delta Lake jippreserva l-każi iżda mhuwiex sensittiv fil-ħażna tal-iskema. Parquet huwa sensittiv għall-każi meta jaħżen u jirritorna l-informazzjoni tal-kolonna. Biex nevitaw żbalji possibbli, korruzzjoni tad-dejta, jew telf tad-dejta (xi ħaġa li esperjenzajna personalment f'Databricks), iddeċidejna li nżidu din il-limitazzjoni.

Biex nispjegaw dan, ejja nagħtu ħarsa lejn x'jiġri fil-kodiċi hawn taħt meta nippruvaw inżidu xi kolonni iġġenerati ġodda għal tabella Delta Lake li għadha mhix ikkonfigurata biex taċċettahom.

# Сгенерируем 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.

Minflok awtomatikament iżżid kolonni ġodda, Delta Lake timponi skema u tieqaf tikteb. Biex tgħin tiddetermina liema kolonna (jew sett ta 'kolonni) qed tikkawża d-diskrepanza, Spark joħroġ iż-żewġ skemi mit-traċċa tal-munzell għal tqabbil.

X'inhu l-benefiċċju tal-infurzar ta' schema?

Minħabba li l-infurzar ta 'skema huwa kontroll pjuttost strett, huwa għodda eċċellenti biex tintuża bħala gatekeeper għal sett ta' dejta nadif u kompletament trasformat li huwa lest għall-produzzjoni jew għall-konsum. Tipikament applikat għal tabelli li jalimentaw id-dejta direttament:

  • Algoritmi ta' tagħlim bil-magni
  • Dashboards tal-BI
  • Analitika tad-dejta u għodod ta' viżwalizzazzjoni
  • Kwalunkwe sistema ta' produzzjoni li teħtieġ skemi semantiċi strutturati ħafna, ittajpjati b'mod qawwi.

Biex jippreparaw id-dejta tagħhom għal dan l-ostaklu finali, ħafna utenti jużaw arkitettura sempliċi "multi-hop" li gradwalment tintroduċi struttura fit-tabelli tagħhom. Biex titgħallem aktar dwar dan, tista 'tiċċekkja l-artiklu Tagħlim tal-magni tal-grad tal-produzzjoni b'Delta Lake.

Naturalment, l-infurzar ta 'skema jista' jintuża kullimkien fil-pipeline tiegħek, imma ftakar li l-istriming għal tabella f'dan il-każ jista 'jkun frustranti għaliex, pereżempju, insejt li żidt kolonna oħra mad-dejta deħlin.

Prevenzjoni tad-dilwizzjoni tad-data

Sa issa inti tista 'tistaqsi, x'inhu l-fuss dwar? Wara kollox, xi drabi żball mhux mistenni ta' "nuqqas ta' qbil ta' skema" jista' jxekkel fil-fluss tax-xogħol tiegħek, speċjalment jekk int ġdid f'Delta Lake. Għaliex ma tħallix l-iskema tinbidel kif meħtieġ sabiex inkun nista' nikteb id-DataFrame tiegħi x'ikun?

Kif jgħid il-qawl il-qadim, “uqija ta’ prevenzjoni tiswa lira ta’ kura.” F'xi punt, jekk ma tieħux ħsieb li tinforza l-iskema tiegħek, kwistjonijiet ta' kompatibilità tat-tip ta' dejta se jqajmu rashom ikrah - sorsi ta' dejta mhux ipproċessati apparentement omoġenji jista' jkun fihom każijiet tat-tarf, kolonni korrotti, mappings iffurmati ħażin, jew affarijiet oħra tal-biża' li joħolmu fihom. inkubi. L-aħjar approċċ huwa li twaqqaf dawn l-għedewwa fil-bieb - bl-infurzar ta 'skema - u jittrattawhom fid-dawl, aktar milli aktar tard meta jibdew lurking fil-fond mudlam tal-kodiċi tal-produzzjoni tiegħek.

L-infurzar ta' skema jagħtik l-assigurazzjoni li l-iskema tat-tabella tiegħek mhix se tinbidel sakemm ma tapprovax il-bidla. Dan jipprevjeni d-dilwizzjoni tad-data, li tista 'sseħħ meta kolonni ġodda huma miżjuda tant ta' spiss li tabelli preċedentement ta 'valur u kkompressati jitilfu t-tifsira u l-utilità tagħhom minħabba l-għargħar tad-data. Billi jħeġġiġek tkun intenzjonat, tistabbilixxi standards għoljin, u tistenna kwalità għolja, l-infurzar tal-skema jagħmel eżattament dak li kien iddisinjat biex jagħmel—jgħinek tibqa’ kuxjenzjuż u l-ispreadsheets tiegħek nodfa.

Jekk wara konsiderazzjoni ulterjuri inti tiddeċiedi li int verament li żid kolonna ġdida - l-ebda problema, hawn taħt hemm tiffissa b'linja waħda. Is-soluzzjoni hija l-evoluzzjoni taċ-ċirkwit!

X'inhi l-evoluzzjoni tal-iskema?

L-evoluzzjoni tal-iskema hija karatteristika li tippermetti lill-utenti jibdlu faċilment l-iskema tal-mejda attwali skont id-dejta li tinbidel maż-żmien. Huwa l-aktar spiss użat meta twettaq operazzjoni ta 'append jew kitba mill-ġdid biex tadatta awtomatikament l-iskema biex tinkludi kolonna waħda jew aktar ġodda.

Kif taħdem l-evoluzzjoni tal-iskema?

Wara l-eżempju mit-taqsima preċedenti, l-iżviluppaturi jistgħu faċilment jużaw l-evoluzzjoni tal-iskema biex iżidu kolonni ġodda li qabel kienu miċħuda minħabba inkonsistenza tal-iskema. L-evoluzzjoni taċ-ċirkwit tiġi attivata billi żżid .option('mergeSchema', 'true') lit-tim Spark tiegħek .write или .writeStream.

# Добавьте параметр mergeSchema
loans.write.format("delta") 
           .option("mergeSchema", "true") 
           .mode("append") 
           .save(DELTALAKE_SILVER_PATH)

Biex tara l-graff, mexxi l-mistoqsija Spark SQL li ġejja

# Создайте график с новым столбцом, чтобы подтвердить, что запись прошла успешно
%sql
SELECT addr_state, sum(`amount`) AS amount
FROM loan_by_state_delta
GROUP BY addr_state
ORDER BY sum(`amount`)
DESC LIMIT 10

Għaddas f'Delta Lake: Infurzar u Evoluzzjoni tal-Iskema
Inkella, tista 'tissettja din l-għażla għas-sessjoni Spark kollha billi żżid spark.databricks.delta.schema.autoMerge = True għall-konfigurazzjoni Spark. Imma uża dan b'kawtela, peress li l-infurzar ta' l-iskema ma jibqax javżak għal inkonsistenzi ta' schema mhux intenzjonati.

Billi tinkludi l-parametru fit-talba mergeSchema, il-kolonni kollha li huma preżenti fid-DataFrame iżda mhux fit-tabella fil-mira huma miżjuda awtomatikament fl-aħħar tal-iskema bħala parti minn transazzjoni ta' kitba. Jistgħu jiġu miżjuda wkoll oqsma mdaħħla u dawn se jiżdiedu wkoll fit-tarf tal-kolonni tal-istruttura korrispondenti.

L-inġiniera tad-dejta u x-xjenzati tad-dejta jistgħu jużaw din l-għażla biex iżidu kolonni ġodda (forsi metrika reċentement rintraċċata jew kolonna tal-prestazzjoni tal-bejgħ ta 'dan ix-xahar) mat-tabelli eżistenti tal-produzzjoni tat-tagħlim tal-magni tagħhom mingħajr ma jiksru mudelli eżistenti bbażati fuq kolonni qodma.

It-tipi li ġejjin ta’ bidliet fl-iskema huma permessi bħala parti mill-evoluzzjoni tal-iskema waqt żieda jew kitba mill-ġdid ta’ tabella:

  • Żieda ta' kolonni ġodda (dan huwa l-aktar xenarju komuni)
  • Nibdlu t-tipi tad-dejta minn NullType -> kwalunkwe tip ieħor jew promozzjoni minn ByteType -> ShortType -> IntegerType

Bidliet oħra mhux permessi fi ħdan l-evoluzzjoni tal-iskema jeħtieġu li l-iskema u d-dejta jinkitbu mill-ġdid billi jiżdiedu .option("overwriteSchema", "true"). Pereżempju, fil-każ fejn il-kolonna "Foo" kienet oriġinarjament numru sħiħ u l-iskema l-ġdida kienet tip ta 'data ta' string, allura l-fajls kollha tal-Parquet(data) ikun jeħtieġ li jinkitbu mill-ġdid. Bidliet bħal dawn jinkludu:

  • tħassar kolonna
  • it-tibdil tat-tip ta' dejta ta' kolonna eżistenti (fil-post)
  • tibdil tal-isem ta' kolonni li jvarjaw biss fil-każ (per eżempju, "Foo" u "foo")

Fl-aħħarnett, bir-rilaxx li jmiss ta 'Spark 3.0, DDL espliċitu se jkun appoġġjat bis-sħiħ (bl-użu ALTER TABLE), li jippermetti lill-utenti jwettqu l-azzjonijiet li ġejjin fuq skemi ta' tabella:

  • iżżid kolonni
  • kummenti fil-kolonna li jinbidlu
  • l-issettjar tal-proprjetajiet tal-mejda li jikkontrollaw l-imġieba tat-tabella, bħall-issettjar tat-tul ta 'żmien li reġistru tat-tranżazzjonijiet huwa maħżun.

X'inhu l-benefiċċju tal-evoluzzjoni taċ-ċirkwit?

Evoluzzjoni ta 'skema tista' tintuża kull meta inti intenzjoni ibdel l-iskema tat-tabella tiegħek (kuntrarju għal meta aċċidentalment żidt kolonni mad-DataFrame tiegħek li m'għandhomx ikunu hemm). Dan huwa l-eħfef mod biex temigra l-iskema tiegħek għaliex awtomatikament iżid l-ismijiet tal-kolonni korretti u t-tipi tad-dejta mingħajr ma jkollok għalfejn tiddikjarahom b’mod espliċitu.

Konklużjoni

L-infurzar tal-iskema jirrifjuta kwalunkwe kolonni ġodda jew bidliet oħra fl-iskema li mhumiex kompatibbli mat-tabella tiegħek. Billi jistabbilixxu u jżommu dawn l-istandards għoljin, l-analisti u l-inġiniera jistgħu jafdaw li d-dejta tagħhom għandha l-ogħla livell ta 'integrità, u jikkomunikawha b'mod ċar u ċar, li jippermettilhom jieħdu deċiżjonijiet kummerċjali aħjar.

Min-naħa l-oħra, l-evoluzzjoni tal-iskema tikkumplimenta l-infurzar billi tissimplifika allegat bidliet awtomatiċi fl-iskema. Wara kollox, m'għandux ikun diffiċli li żżid kolonna.

L-applikazzjoni sfurzata tal-iskema hija yang, fejn l-evoluzzjoni tal-iskema hija yin. Meta jintużaw flimkien, dawn il-karatteristiċi jagħmlu s-soppressjoni tal-istorbju u l-irfinar tas-sinjali aktar faċli minn qatt qabel.

Nixtiequ wkoll nirringrazzjaw lil Mukul Murthy u Pranav Anand għall-kontributi tagħhom għal dan l-artikolu.

Artikli oħra f'din is-serje:

Għaddas f'Delta Lake: Tneħħi l-ippakkjar tar-Reġistru tat-Tranżazzjonijiet

Artikoli Relatati

Tagħlim tal-magni tal-grad tal-produzzjoni b'Delta Lake

X'inhu data lake?

Sir af aktar dwar il-kors

Sors: www.habr.com

Żid kumment