Ienirstiet Deltas ezerā: shēmas ievieÅ”ana un attÄ«stÄ«ba

Čau Habr! Piedāvāju jÅ«su uzmanÄ«bai raksta tulkojumu "IenirÅ”ana Delta ezerā: shēmu ievieÅ”ana un evolÅ«cija" Buraka Javuza, Brennera Heinca un Denija LÄ« izstrādātais materiāls, kas tika sagatavots, gaidot kursa atklāŔanu. Datu inženieris no OTUS.

Ienirstiet Deltas ezerā: shēmas ievieÅ”ana un attÄ«stÄ«ba

Dati, tāpat kā mÅ«su pieredze, pastāvÄ«gi uzkrājas un attÄ«stās. Lai neatpaliktu, mÅ«su pasaules mentālajiem modeļiem ir jāpielāgojas jauniem datiem, no kuriem daži satur jaunas dimensijas — jaunus veidus, kā novērot lietas, par kurām iepriekÅ” mums nebija ne jausmas. Å ie mentālie modeļi neatŔķiras no shēmām izklājlapās, kas nosaka, kā mēs klasificējam un apstrādājam jaunu informāciju.

Tas mÅ«s noved pie shēmu pārvaldÄ«bas jautājuma. Laika gaitā, attÄ«stoties biznesa mērÄ·iem un prasÄ«bām, mainās arÄ« jÅ«su datu struktÅ«ra. Delta Lake atvieglo jaunu dimensiju ievieÅ”anu, mainoties datiem. Lietotājiem ir pieejama vienkārÅ”a semantika tabulu shēmu pārvaldÄ«bai. Å ie rÄ«ki ietver shēmu ievieÅ”anas rÄ«ku, kas aizsargā lietotājus no netīŔas tabulu pārblÄ«vēŔanas ar kļūdām vai nevajadzÄ«giem datiem, un shēmu evolÅ«cijas rÄ«ku, kas automātiski pievieno jaunas kolonnas, kas satur vērtÄ«gus datus atbilstoÅ”ajās vietās. Å ajā rakstā mēs sÄ«kāk aplÅ«kosim Å”o rÄ«ku lietoÅ”anu.

Tabulu shēmu izpratne

Katrs DataFrame Apache Spark satur shēmu, kas nosaka datu formu, piemēram, datu tipus, kolonnas un metadatus. Izmantojot Delta Lake, tabulas shēma tiek glabāta JSON formātā transakciju žurnālā.

Kas ir shēmas izpilde?

Shēmas ievieÅ”ana, kas pazÄ«stama arÄ« kā shēmas validācija, ir droŔības mehānisms Delta Lake sistēmā, kas nodroÅ”ina datu kvalitāti, noraidot ierakstus, kas neatbilst tabulas shēmai. LÄ«dzÄ«gi kā viesmÄ«le populārā restorānā, kas pieņem tikai rezervācijas, shēmas ievieÅ”ana pārbauda, ​​vai katra tabulā ievadÄ«tā datu kolonna ir atbilstoÅ”ajā paredzamo kolonnu sarakstā (citiem vārdiem sakot, vai katrai no tām ir "rezervācija"), un noraida visus ierakstus ar kolonnām, kas nav sarakstā.

Kā darbojas shēmas ievieÅ”ana?

Delta Lake izmanto shēmas pārbaudi rakstīŔanas laikā, kas nozÄ«mē, ka visi jaunie ieraksti tabulā rakstīŔanas laikā tiek pārbaudÄ«ti, lai pārliecinātos par saderÄ«bu ar mērÄ·a tabulas shēmu. Ja shēma nav saderÄ«ga, Delta Lake pilnÄ«bā pārtrauc darÄ«jumu (dati netiek ierakstÄ«ti) un izdod izņēmumu, lai informētu lietotāju par neatbilstÄ«bu.
Delta Lake izmanto Ŕādus noteikumus, lai noteiktu, vai ieraksts ir saderīgs ar tabulu. Tiek rakstīts DataFrame:

  • Tajā nevar bÅ«t papildu kolonnas, kas nav iekļautas mērÄ·a tabulas shēmā. Un otrādi, ir labi, ja ienākoÅ”ajos datos nav iekļautas visas tabulas kolonnas — Ŕīm kolonnām vienkārÅ”i tiks pieŔķirtas nulles vērtÄ«bas.
  • kolonnu datu tipi nevar atŔķirties no mērÄ·a tabulas kolonnu datu tipiem. Ja mērÄ·a tabulas kolonnā ir StringType dati, bet atbilstoÅ”ajā DataFrame kolonnā ir IntegerType dati, shēmas ievieÅ”ana radÄ«s izņēmumu un neļaus veikt rakstīŔanas darbÄ«bu.
  • nevar saturēt kolonnu nosaukumus, kas atŔķiras tikai pēc reÄ£istrā. Tas nozÄ«mē, ka vienā tabulā nevar bÅ«t definētas kolonnas ar nosaukumiem ā€œFooā€ un ā€œfooā€. Lai gan Spark var izmantot reÄ£istrjutÄ«gā vai nereÄ£istrjutÄ«gā režīmā (pēc noklusējuma), Delta Lake saglabā reÄ£istrjutÄ«gu, bet ir nereÄ£istrjutÄ«gs, saglabājot shēmu. Parquet ir reÄ£istrjutÄ«gs, saglabājot un izgÅ«stot kolonnu informāciju. Lai izvairÄ«tos no iespējamām kļūdām, datu bojājumiem vai datu zuduma (ko mēs personÄ«gi esam piedzÄ«vojuÅ”i Databricks), mēs nolēmām pievienot Å”o ierobežojumu.

Lai to ilustrētu, aplÅ«kosim, kas notiek tālāk redzamajā kodā, kad mēģinām pievienot dažas jaunizveidotas kolonnas Delta Lake tabulai, kas vēl nav konfigurēta to pieņemÅ”anai.

# Š”Š³ŠµŠ½ŠµŃ€ŠøŃ€ŃƒŠµŠ¼ 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 ievieÅ” shēmu un pārtrauc rakstīŔanu. Lai palÄ«dzētu noteikt, kura kolonna (vai kolonnu kopas) rada neatbilstÄ«bu, Spark salÄ«dzināŔanai parāda abas shēmas no steka izsekoÅ”anas.

Kāds ir shēmas ievieÅ”anas ieguvums?

Tā kā shēmas ievieÅ”ana ir diezgan stingra pārbaude, tas ir lielisks rÄ«ks, ko izmantot kā vārtu sargu tÄ«rai, pilnÄ«bā pārveidotai datu kopai, kas ir gatava ražoÅ”anai vai patēriņam. To parasti piemēro tabulām, kas tieÅ”i apkopo 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 stingri 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 apiņu" arhitektÅ«ru, kas pakāpeniski ievieÅ” struktÅ«ru tabulās. Lai iegÅ«tu plaŔāku informāciju, varat izlasÄ«t rakstu. RažoÅ”anas lÄ«meņa maŔīnmācīŔanās ar Delta Lake.

Protams, shēmas ievieÅ”anu var izmantot jebkur jÅ«su cauruļvadā, taču atcerieties, ka rakstīŔana tabulā Å”ajā gadÄ«jumā var bÅ«t nomācoÅ”a, piemēram, tāpēc, ka esat aizmirsis, ka ienākoÅ”ajiem datiem pievienojāt vēl vienu kolonnu.

Datu saŔķidrināŔanas novērÅ”ana

Å ajā brÄ«dÄ« jÅ«s, iespējams, domājat, par ko ir visa Ŕī jezga? Galu galā dažreiz negaidÄ«ta "shēmas neatbilstÄ«bas" kļūda var jÅ«s apturēt darbplÅ«smā, it Ä«paÅ”i, ja esat jauns Delta Lake lietotājs. Kāpēc gan neļaut shēmai mainÄ«ties pēc nepiecieÅ”amÄ«bas, lai es varētu rakstÄ«t savu DataFrame neatkarÄ«gi no apstākļiem?

Kā vēsta sens teiciens: "unce profilakses ir mārciņas ārstēŔanas vērta." Kādā brÄ«dÄ«, ja nerÅ«pēsities par shēmas ievieÅ”anu, parādÄ«sies datu tipu saderÄ«bas problēmas — Ŕķietami homogēni neapstrādāti datu avoti var saturēt robežgadÄ«jumus, bojātas kolonnas, nepareizi veidotus kartējumus vai citus murgus. Vislabākā pieeja ir apturēt Å”os ienaidniekus pie vārtiem — ar shēmas ievieÅ”anu — un cÄ«nÄ«ties ar tiem atklāti, nevis vēlāk, kad tie sāk slēpties jÅ«su ražoÅ”anas koda tumÅ”ajās dzÄ«lēs.

Shēmas ievieÅ”ana nodroÅ”ina, ka jÅ«su tabulas shēma nemainÄ«sies, ja vien jÅ«s nepārprotami neapstiprināsiet izmaiņas. Tas novērÅ” datu atŔķaidīŔanu, kas var notikt, ja jaunas kolonnas tiek pievienotas tik bieži, ka iepriekÅ” vērtÄ«gas, kompaktas tabulas datu pārpilnÄ«bas dēļ zaudē savu nozÄ«mi un lietderÄ«bu. Mudinot jÅ«s bÅ«t apzinātiem, noteikt augstus standartus un sagaidÄ«t augstu kvalitāti, shēmas ievieÅ”ana dara tieÅ”i to, ko tā bija paredzēta — palÄ«dz saglabāt integritāti un uzturēt tabulas sakārtotas.

Ja pēc turpmākas apsvērÅ”anas jÅ«s nolemjat, ka tieŔām tā ir. nepiecieÅ”amÄ«ba Jaunas kolonnas pievienoÅ”ana nav problēma; vienas rindiņas labojums ir sniegts zemāk. Risinājums ir shēmas evolÅ«cija!

Kas ir shēmas evolūcija?

Shēmas evolÅ«cija ir funkcija, kas ļauj lietotājiem viegli modificēt tabulas paÅ”reizējo shēmu, lai pielāgotos mainÄ«gajiem datiem laika gaitā. To visbiežāk izmanto ievietoÅ”anas vai pārrakstīŔanas darbÄ«bu laikā, lai automātiski pielāgotu shēmu, iekļaujot vienu vai vairākas jaunas kolonnas.

Kā darbojas shēmas evolūcija?

Sekojot iepriekŔējās sadaļas piemēram, izstrādātāji var viegli izmantot shēmas evolÅ«ciju, lai pievienotu jaunas kolonnas, kas iepriekÅ” tika noraidÄ«tas shēmas neatbilstÄ«bas dēļ. Shēmas evolÅ«cija tiek aktivizēta, pievienojot .option('mergeSchema', 'true') jÅ«su Spark komandai .write или .writeStream.

# Š”Š¾Š±Š°Š²ŃŒŃ‚Šµ параметр mergeSchema
loans.write.format("delta") 
           .option("mergeSchema", "true") 
           .mode("append") 
           .save(DELTALAKE_SILVER_PATH)

Lai skatītu grafiku, palaidiet Ŕo 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

Ienirstiet Deltas ezerā: shēmas ievieÅ”ana un attÄ«stÄ«ba
Varat arÄ« iestatÄ«t Å”o opciju visai Spark sesijai, pievienojot spark.databricks.delta.schema.autoMerge = True Spark konfigurācijā. Tomēr izmantojiet to piesardzÄ«gi, jo shēmas ievieÅ”ana vairs nebrÄ«dinās par netīŔām shēmas neatbilstÄ«bām.

Iekļaujot pieprasÄ«jumā parametru mergeSchemaVisas DataFrame esoŔās, bet mērÄ·a tabulā trÅ«kstoŔās kolonnas rakstīŔanas transakcijas laikā tiek automātiski pievienotas shēmai. Var pievienot arÄ« ligzdotus laukus, un tie tiks pievienoti arÄ« atbilstoÅ”ajām kolonnām struktÅ«rā.

Datu inženieri un zinātnieki var izmantot Å”o opciju, lai esoÅ”ajām maŔīnmācīŔanās ražoÅ”anas tabulām pievienotu jaunas kolonnas (piemēram, nesen izsekotu metriku vai Ŕī mēneÅ”a pārdoÅ”anas rādÄ«tāju kolonnu), nepārtraucot esoÅ”os modeļus, kuru pamatā ir vecās kolonnas.

Tabulas ievietoÅ”anas vai pārrakstīŔanas laikā shēmas evolÅ«cijas ietvaros ir atļautas Ŕāda veida shēmas izmaiņas:

  • Jaunu kolonnu pievienoÅ”ana (Å”is ir visizplatÄ«tākais scenārijs)
  • Datu tipu maiņa no NullType -> jebkurÅ” cits tips vai pāreja no ByteType -> ShortType -> IntegerType

Citas izmaiņas, kas shēmas evolÅ«cijas ietvaros nav atļautas, prasa shēmas un datu pārrakstīŔanu, pievienojot .option("overwriteSchema", "true")Piemēram, ja kolonna "Foo" sākotnēji bija vesels skaitlis un jaunā shēma bija virknes datu tips, tad visi Parquet (datu) faili bÅ«tu jāpārraksta. Šādas izmaiņas ietver:

  • kolonnas dzēŔana
  • mainot esoÅ”as kolonnas datu tipu (vietā)
  • pārdēvēt kolonnas, kas atŔķiras tikai ar reÄ£istru (piemēram, "Foo" un "foo")

Visbeidzot, ar nākamo laidienu, Spark 3.0, tiks pilnÄ«bā atbalstÄ«ta tieÅ”a DDL (izmantojot ALTER TABLE), kas ļaus lietotājiem veikt Ŕādas darbÄ«bas ar tabulu shēmām:

  • kolonnu pievienoÅ”ana
  • mainÄ«gie kolonnu komentāri
  • Tabulas rekvizÄ«tu iestatīŔana, kas nosaka tabulas darbÄ«bu, piemēram, darÄ«jumu žurnāla saglabāŔanas perioda iestatīŔana.

Kāda ir shēmas evolÅ«cijas priekÅ”rocÄ«ba?

Shēmas evolÅ«ciju var izmantot jebkurā laikā. plānoju Mainiet tabulas shēmu (nevis nejauÅ”i pievienojiet DataFrame kolonnas, kurām tur nevajadzētu bÅ«t). Å is ir vienkārŔākais veids, kā migrēt shēmu, jo tā automātiski pievieno pareizos kolonnu nosaukumus un datu tipus, tos skaidri nedeklarējot.

Secinājums

Shēmas ievieÅ”ana noraida visas jaunās kolonnas vai citas shēmas izmaiņas, kas nav saderÄ«gas ar jÅ«su tabulu. Nosakot un ievērojot Å”os augstos standartus, analÄ«tiÄ·i un inženieri var bÅ«t pārliecināti, ka viņu datiem ir visaugstākais integritātes lÄ«menis, tie tiek skaidri un kodolÄ«gi argumentēti, ļaujot viņiem pieņemt efektÄ«vākus biznesa lēmumus.

No otras puses, shēmas attÄ«stÄ«ba papildina izpildes nodroÅ”ināŔanu, vienkārÅ”ojot apgalvots Automātiskas shēmas izmaiņas. Galu galā kolonnas pievienoÅ”anai nevajadzētu bÅ«t tik sarežģītai.

Ķēdes pastiprināŔana ir ķēdes evolÅ«cijas iņ jaņ. Kopā Ŕīs funkcijas padara trokŔņu slāpēŔanu un signāla regulēŔanu vienkārŔāku nekā jebkad agrāk.

Mēs vēlētos pateikties arÄ« Mukulam Murtijam un Pranavam Anandam par viņu ieguldÄ«jumu Å”ajā rakstā.

Citi raksti Å”ajā sērijā:

IedziļināŔanās Delta ezerā: darījumu žurnāla izpakoŔana

Play video

Saistītie raksti

RažoÅ”anas lÄ«meņa maŔīnmācīŔanās ar Delta Lake

Kas ir datu ezers?

Uzziniet vairāk par kursu

Avots: www.habr.com

Pievieno komentāru