U qul-qulaya harada Delta: Dhaqangelinta iyo Horumarinta Qorshaha

Hello, Habr! Waxaan dareenkaaga ku soo bandhigayaa tarjumaad maqaalka "Ku quusidda harada Delta: Hirgelinta Qorshaha & Kobcinta" Waxaa qoray Burak Yavuz, Brenner Heintz iyo Denny Lee, kuwaas oo loo diyaariyey fidinta koorsada Injineerka Xogta ka OTUS.

U qul-qulaya harada Delta: Dhaqangelinta iyo Horumarinta Qorshaha

Xogta, sida waayo-aragnimadeena, ayaa si joogto ah u ururisa oo horumarisa. Si aan u sii wadno, moodooyinka maskaxeed ee adduunku waa in ay la qabsadaan xogta cusub, kuwaas oo qaar ka mid ah ay ka kooban yihiin cabbiro cusub - siyaabo cusub oo loo ilaaliyo waxyaabo aynaan hore wax fikrad ah u lahayn. Moodooyinkan maskaxeed kama duwana schemas-ka xaashida faafinta ee go'aaminaya sida aan u kala saarno oo u habaynno macluumaadka cusub.

Tani waxay ina keenaysaa arrinta maaraynta schema. Sida yoolalka ganacsigu iyo shuruudaha ay u kobcayaan waqti ka dib, sidoo kale qaab dhismeedka xogtaada waa sidaas. Lake Delta waxa ay sahlaysaa in la soo bandhigo cabbirro cusub marka xogtu is beddesho. Isticmaalayaashu waxay marin u heli karaan semantics fudud si ay u maareeyaan qorshayaasha miiska. Qalabkan waxaa ka mid ah Hirgelinta Schema, kaas oo ka ilaaliya dadka isticmaala inay si ula kac ah ugu dhejiyaan miisaska khaladaadka ama xogta aan loo baahnayn, iyo Schema Evolution, kaas oo si toos ah ugu daraya tiirar cusub oo ka kooban xog qiimo leh meelaha ku habboon. Maqaalkan, waxaan si qoto dheer ugu dhex milmi doonaa adeegsiga agabkan.

Fahamka jadwalka miiska

DataFrame kasta ee Apache Spark waxa uu ka kooban yahay qorshe qeexaya qaabka xogta, sida noocyada xogta, tiirarka, iyo xogta badan. Halka Delta Lake, shaxda miiska waxa lagu kaydiyaa qaabka JSON gudaha diiwaanka wax kala iibsiga.

Waa maxay fulinta nidaamku?

Dhaqangelinta Schema, oo sidoo kale loo yaqaan Xaqiijinta Schema, waa hannaan ammaan oo ku yaal Delta Lake kaasoo hubiya tayada xogta iyadoo la diidayo diiwaannada aan waafaqsanayn qorshaha miiska. Sida martigeliyaha makhaayadda caanka ah ee aqbala boos celinta, Xoojinta Schema waxay hubisaa in tiir kasta oo xogta la geliyo miiska uu ku jiro liiska u dhigma ee tiirarka la filayo (si kale haddii loo dhigo, haddii ay jirto "boos" mid kasta) oo diidaya diiwaan kasta oo leh tiirar aan ku jirin liiska.

Sidee fulinta schema u shaqeysaa?

Delta Lake waxay isticmaashaa hubinta schema-on-write, taasoo la micno ah in dhammaan qoraalada cusub ee miiska lagu soo qoro la hubiyay inay la jaanqaadi karaan shaxda bartilmaameedka wakhtiga qorista. Haddi qorshahu aanu isqaban karin, Delta Lake waxa ay meesha ka saaraysaa wax kala iibsiga gabi ahaanba (xog ma qorna) oo waxa ay kor u qaadaa ka reebis si loo ogeysiiyo isticmaalaha iswaafaq la'aanta.
Delta Lake waxay isticmaashaa xeerarkan soo socda si ay u go'aamiso in diiwaanku la jaanqaadi karo miiska iyo in kale. DataFrame ayaa la qorayaa:

  • Kuma koobna tiirar dheeraad ah oo aan ku jirin shaxda bartilmaameedka. Taa beddelkeeda, way fiican tahay haddii xogta soo socota aysan ku jirin tiir kasta oo miiska ka soo baxa - tiirarkaas ayaa si fudud loogu meelayn doonaa qiimayaal aan waxba ahayn.
  • ma yeelan karaan noocyada xogta tiirarka ka duwan noocyada xogta tiirarka ee shaxda bartilmaameedka. Haddii tiirka shaxda bartilmaameedku ka kooban yahay xogta StringType, laakiin tiirka u dhigma ee DataFrame ka kooban yahay xogta IntegerType, fulinta schema waxay tuuraysaa wax ka reeban oo waxay ka ilaalin doontaa in hawlgalka qorista uu dhaco.
  • kuma koobnaan karo magacyo safafka ah oo ku kala duwan haddii ay dhacdo. Tani waxay ka dhigan tahay inaadan lahaan karin tiirar lagu magacaabo 'Foo' iyo 'foo' oo lagu qeexay isku jaad. Iyadoo Spark loo isticmaali karo kiis xasaasi ah ama kiis-aan dareen lahayn (caadi ahaan), Delta Lake waxay ilaalisaa kiis laakiin kiis-la'aan marka la kaydinayo qorshaha. Parquet waa kiis xasaasi ah marka la kaydinayo oo la soo celinayo macluumaadka tiirka. Si aan uga fogaano khaladaadka iman kara, musuqmaasuqa xogta, ama luminta xogta (taasoo aanu shakhsi ahaan kala kulanay Databricks), waxaanu go'aansanay inaanu ku darno xayiraadan.

Si taas loo caddeeyo, aan eegno waxa ka dhacaya koodka hoose markaan isku dayno inaan ku darno tiirar cusub oo la soo saaray miiska Delta Lake oo aan weli loo habayn inuu aqbalo.

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

Halkii si toos ah loogu dari lahaa tiirar cusub, Delta Lake waxay dhaqangelisaa qorshaha oo joojisaa qorista. Si loo go'aamiyo tiirka (ama tiirarka tiirarka) ee keenaya ismaan-dhaafka, Spark waxay soo bandhigaysaa labadaba jaangooyooyin ka soo uruurinta isbarbardhigga.

Waa maxay faa'iidada ku jirta hirgelinta nidaamka?

Sababtoo ah fulinta schema waa hubin adag oo cadaalad ah, waa qalab aad u fiican oo loo isticmaalo irid-ilaaliye ahaan si loo helo xog nadiif ah oo si buuxda u beddeshay oo diyaar u ah wax soo saarka ama isticmaalka. Caadi ahaan waxa lagu dabaqaa jaantusyada sida tooska ah u quudiya xogta:

  • Algorithms barashada mashiinka
  • BI dashboards
  • Qalabka falanqaynta xogta iyo aragga
  • Nidaam kasta oo wax-soo-saar oo u baahan qaab-dhismeed adag, qaab-dhismeed adag oo qeexan.

Si loo diyaariyo xogtooda caqabadan kama dambaysta ah, isticmaaleyaal badan ayaa shaqeeya qaab dhismeedka "multi-hop" fudud oo si tartiib tartiib ah u soo bandhigaya qaab-dhismeedka miisaskooda. Wixii macluumaad dheeraad ah, waxaad akhrin kartaa maqaalka Barashada mashiinka heerka-soosaarka leh ee Delta Lake.

Dabcan, waxaad isticmaali kartaa hirgelinta schema meel kasta oo ka mid ah dhuumahaaga, laakiin xusuusnow in qorista miiska kiiskan ay noqon karto mid niyadjab leh, tusaale ahaan, sababtoo ah waxaad illowday inaad ku dartay tiir kale xogta soo socota.

Ka hortagga dareeraha xogta

Halkaa marka ay marayso, waxa laga yaabaa in aad is waydiiso waxa buuqa oo dhami ku saabsan yahay? Dhammaan ka dib, marmarka qaarkood qalad "schema mismatch" oo lama filaan ah ayaa kugu kicin kara socodka shaqadaada, gaar ahaan haddii aad ku cusub tahay Delta Lake. Waa maxay sababta aan kaliya ugu oggolaan in qorshaha isbeddelo marka loo baahdo si aan u qori karo DataFrame-kayga dhib kasta ha ahaatee?

Maahmaahdii hore ayaa tidhaahda, " wiqiyadood oo ka-hortag ah waxay u qalantaa rodol dawo ah." Mar marka qaarkood, haddii aadan ka taxaddarin inaad dhaqangeliso qorshahaaga, arrimaha ku habboon nooca xogta ayaa dib u soo celin doona madaxooda foosha xun - ilaha xogta ceeriin ee u muuqda isku mid ayaa laga yaabaa inay ku jiraan kiisaska cirifka ah, tiirar kharriban, khariidado khaldan, ama riyooyin kale. Habka ugu fiican ayaa ah in la joojiyo cadaawayaashan albaabka - iyada oo la fulinayo qorshaha - oo lagula macaamilo meel bannaan, halkii ay ka dib, marka ay bilaabaan inay ku dhuuntaan mugdiga mugdiga ah ee code-kaaga.

Dhaqangelinta qorshaha waxay hubisaa in qorshaha miiskaagu aanu is beddeli doonin ilaa aad si cad u oggolaato isbeddelka. Tani waxay ka hortagtaa milanka xogta, taas oo dhici karta marka tiirar cusub lagu daro si isdaba joog ah taas oo markii hore qiimaha lahayd, miisaska is haysta ay lumiyaan macnahooda iyo faa'iidada daadka xogta. Adigoo kugu dhiirigelinaya inaad si ula kac ah u sameyso, dejiso heerar sare, oo aad filayso tayada sare, fulinta schema waxay si sax ah u qabataa wixii loogu talagalay in la sameeyo - waxay kaa caawineysaa inaad ilaaliso daacadnimada oo aad nadiifiso miisaskaaga.

Haddii tixgelin dheeraad ah aad go'aansato inaad dhab ahaantii sameyso u baahan tahay Ku darista tiir cusub dhib malaha; hagaajin hal-line ah ayaa hoos lagu bixiyaa. Xalku waa schema evolution!

Waa maxay horumarinta schema?

Horumarka Schema waa muuqaal u oggolaanaya isticmaaleyaasha inay si fudud wax uga beddelaan shaxda hadda jirta si ay u habeeyaan beddelka xogta waqti ka dib. Inta badan waxaa la adeegsadaa marka la geliyo ama dib loo qoro hawlgallada si si toos ah loogu habeeyo qorshaha si loogu daro hal ama dhowr tiir oo cusub.

Sidee buu u shaqeeyaa horumarinta schema?

Iyadoo la raacayo tusaalaha qaybta hore, horumariyayaashu waxay si fudud u isticmaali karaan kobcinta schema si ay ugu daraan tiirar cusub kuwaas oo markii hore loo diiday qorshaha la'aanta. Horumarka Schema waxa lagu hawlgeliyaa in lagu daro .option('mergeSchema', 'true') kooxdaada Spark .write или .writeStream.

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

Si aad u aragto garaafka, socodsii su'aalaha Spark SQL ee soo socda

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

U qul-qulaya harada Delta: Dhaqangelinta iyo Horumarinta Qorshaha
Haddii kale, waxaad dejin kartaa doorashadan dhammaan fadhiga Spark adiga oo ku daraya spark.databricks.delta.schema.autoMerge = True galay qaabeynta Spark. Si kastaba ha ahaatee, si taxadir leh u isticmaal tan, maadaama fulinta schema aysan mar dambe kaaga digayn iswaafaqla'aanta schema ee aan ula kac ahayn.

Adigoo ku daraya halbeeg codsiga mergeSchemaDhammaan tiirarka ku jira DataFrame laakiin ka maqan miiska bartilmaameedka ayaa si toos ah loogu dhejiyaa qorshaha inta lagu jiro wax kala iibsiga. Goobaha buulka leh ayaa sidoo kale lagu dari karaa, waxaana sidoo kale lagu dhejin doonaa tiirarka u dhigma ee dhismaha.

Injineerada xogta iyo saynisyahannadu waxay isticmaali karaan ikhtiyaarkan si ay ugu daraan tiirar cusub (laga yaabee metrik dhawaan la raadiyay ama tiir ka mid ah tirooyinka iibka ee bishan) miisaska wax soo saarka ee ay ku baranayaan mashiinka hadda jira iyaga oo aan jebin moodooyinka jira ee ku saleysan tiirarkii hore.

Noocyada soo socda ee isbeddellada schema waa la oggol yahay iyada oo qayb ka ah horumarinta schema inta lagu jiro gelinta miiska ama dib-u-qorista:

  • Ku darida tiirar cusub (tani waa dhacdada ugu caansan)
  • Beddelida noocyada xogta ee NullType -> nooc kasta oo kale ama ka xayeysiinta ByteType -> ShortType -> IntegerType

Isbeddellada kale ee aan lagu oggolayn kobcinta schema waxay u baahan yihiin in qorshaha iyo xogta lagu beddelo iyadoo lagu darayo .option("overwriteSchema", "true")Tusaale ahaan, haddii tiirka "Foo" uu asal ahaan ahaa isugeyn, oo qorshaha cusub uu ahaa nooca xogta xargaha, markaa dhammaan faylasha Parquet (xogta) waxay u baahan doonaan in dib loo qoro. Isbedelada noocaan ah waxaa ka mid ah:

  • Tirtir tiirka
  • bedelida nooca xogta ee tiirka jira (meesha)
  • Magacaabida tiirarka ka duwan kiis keliya ( tusaale "Foo" iyo "foo")

Ugu dambeyntii, marka la sii daayo soo socota, Spark 3.0, DDL cad (adoo isticmaalaya ALTER TABLE) si buuxda ayaa loo taageeri doonaa, taasoo u oggolaanaysa isticmaalayaasha inay ku sameeyaan tallaabooyinka soo socda ee shaxda miiska:

  • ku darida tiirarka
  • beddelka faallooyinka tiirka
  • Dejinta guryaha miiska ee go'aaminaya sida shaxda u dhaqmo, sida dejinta muddada haynta log-ga wax kala iibsiga.

Waa maxay faa'iidada horumarinta schema?

Horumarka Schema waxa la isticmaali karaa mar kasta oo aad damacsan tahay Beddel qorshaha miiskaaga (oo ka duwan inaad si lama filaan ah ugu darto tiirar DataFrame kaaga ah oo aan ahayn inay halkaas joogaan). Tani waa habka ugu fudud ee loo haajiro qorshahaaga sababtoo ah waxay si toos ah ugu daraa magacyada tiirka saxda ah iyo noocyada xogta iyada oo aan si cad loo sheegin.

gunaanad

Hirgelinta Schema waxay diidaysaa tiirar kasta oo cusub ama isbeddellada kale ee qorshaha ee aan ku habboonayn miiskaaga. Dejinta iyo ilaalinta heerarkan sare, falanqeeyayaasha iyo injineerada waxay ku kalsoonaan karaan in xogtoodu ay leedahay heerka ugu sarreeya ee daacadnimada, iyaga oo u sababeynaya si cad oo kooban, iyaga oo awood u siinaya inay gaaraan go'aamo ganacsi oo waxtar leh.

Dhanka kale, kobcinta nidaamku waxay dhamaystiraysaa fulinta iyadoo la fududeynayo lagu eedeeyay Isbeddel toos ah oo schema Ka dib oo dhan, ku darista tiir maaha inay noqoto mid adag.

Hirgelinta wareegga waa yang to circuit evolution's yin. Si wada jir ah loo isticmaalo, sifooyinkan ayaa ka dhigaya xakamaynta dhawaaqa iyo hagaajinta calaamadaha si ka sahlan sidii hore.

Waxaan sidoo kale u mahadcelineynaa Mukul Murthy iyo Pranav Anand gacantii ay ka geysteen maqaalkan.

Maqaallada kale ee taxanahan:

U qul-qulaya harada Delta: Furitaanka Diiwaanka Ganacsiga

Cayaar fiidiyow

Maqaallada la xiriira

Barashada mashiinka heerka-soosaarka leh ee Delta Lake

Waa maxay harada xogtu?

Wax badan ka ogow koorsada

Source: www.habr.com

Add a comment