Nitsewa cikin Tekun Delta: Tilasta Tsari da Juyin Halitta

Hello, Habr! Ina gabatar muku da fassarar labarin " nutsewa cikin Tekun Delta: Tilasta Tsari & Juyin Halitta " Marubuta Burak Yavuz, Brenner Heintz da Denny Lee, wanda aka shirya da tsammanin fara karatun. Injiniya Data daga OTUS.

Nitsewa cikin Tekun Delta: Tilasta Tsari da Juyin Halitta

Bayanai, kamar kwarewarmu, koyaushe suna taruwa da haɓakawa. Don ci gaba, samfuran tunaninmu na duniya dole ne su dace da sabbin bayanai, wasu daga cikinsu sun ƙunshi sabbin abubuwa - sabbin hanyoyin lura da abubuwan da ba mu da masaniya a kansu a da. Waɗannan ƙirar tunani ba su da bambanci da tsarin tsarin tebur waɗanda ke ƙayyadad da yadda muke rarrabawa da sarrafa sabbin bayanai.

Wannan ya kawo mu ga batun sarrafa makirci. Kamar yadda ƙalubalen kasuwanci da buƙatun ke canzawa akan lokaci, haka ma tsarin bayanan ku ke canzawa. Kogin Delta yana sauƙaƙa gabatar da sabbin ma'auni yayin canje-canjen bayanai. Masu amfani suna da damar yin amfani da sauƙaƙan karatun tarukan don sarrafa tsarin tebur ɗin su. Waɗannan kayan aikin sun haɗa da Ƙarfafa Ƙarfafawa, wanda ke kare masu amfani daga ƙazantar da teburin su ba da gangan ba tare da kurakurai ko bayanan da ba dole ba, da kuma Juyin Halitta, wanda ke ba da damar ƙara sababbin ginshiƙan bayanai masu mahimmanci kai tsaye zuwa wuraren da suka dace. A cikin wannan labarin, za mu nutse cikin yin amfani da waɗannan kayan aikin.

Fahimtar Shirye-shiryen Tebur

Kowane DataFrame a cikin Apache Spark yana ƙunshe da tsari wanda ke bayyana nau'in bayanai, kamar nau'ikan bayanai, ginshiƙai, da metadata. Tare da tafkin Delta, ana adana tsarin tebur a tsarin JSON a cikin log ɗin ciniki.

Menene aiwatar da tsari?

Ƙaddamar da Ƙarfafawa, wanda kuma aka sani da Schema Validation, hanya ce ta tsaro a tafkin Delta wanda ke tabbatar da ingancin bayanai ta hanyar ƙin bayanan da ba su dace da tsarin tebur ba. Kamar mai masaukin baki a gaban tebur na shahararren gidan abinci na ajiyar wuri kawai, ta bincika ko kowane ginshiƙi na bayanan da aka shigar a cikin tebur yana cikin jerin ginshiƙan da ake tsammani daidai (wato, ko akwai “ajiyarwa” ga kowane ɗayansu). ), kuma ya ƙi duk wani rikodin tare da ginshiƙai waɗanda ba su cikin lissafin.

Ta yaya aiwatar da tsari ke aiki?

Kogin Delta yana amfani da duban tsari-kan-rubutu, wanda ke nufin cewa duk sabbin rubuce-rubuce a kan tebur ana duba su don dacewa da tsarin tebur ɗin da aka yi niyya a lokacin rubutawa. Idan tsarin bai dace ba, Delta Lake ya soke cinikin gaba ɗaya (ba a rubuta bayanai ba) kuma ya ɗaga keɓanta don sanar da mai amfani rashin daidaituwa.
Kogin Delta yana amfani da waɗannan dokoki don tantance ko rikodin ya dace da tebur. DataFrame Mai Rubutu:

  • ba zai iya ƙunsar ƙarin ginshiƙai waɗanda ba su cikin tsarin maƙasudin tebur. Sabanin haka, komai yana da kyau idan bayanan da ke shigowa ba su ƙunshe da cikakkiyar ginshiƙan tebur ba - waɗannan ginshiƙan za a sanya su kawai ƙima mara kyau.
  • ba zai iya samun nau'ikan bayanan ginshiƙi waɗanda suka bambanta da nau'ikan bayanan ginshiƙai a cikin tebur ɗin da aka yi niyya. Idan ginshiƙin tebur ɗin da aka yi niyya ya ƙunshi bayanan StringType, amma madaidaicin ginshiƙi a cikin DataFrame yana ƙunshe da bayanan IntegerType, aiwatar da tsari zai haifar da keɓantawa kuma ya hana aikin rubutawa daga faruwa.
  • ba zai iya ƙunsar sunayen ginshiƙi waɗanda suka bambanta kawai idan akwai. Wannan yana nufin cewa ba za ku iya samun ginshiƙai masu suna 'Foo' da 'foo' da aka ayyana su a cikin tebur ɗaya ba. Yayin da za'a iya amfani da Spark a yanayin da ba a sani ba ko yanayin rashin fahimta (tsohuwar), tafkin Delta yana kiyaye yanayin amma ba shi da hankali a cikin ma'ajin ƙira. Parquet yana da mahimmanci lokacin adanawa da dawo da bayanan shafi. Don guje wa yuwuwar kurakurai, lalata bayanai, ko asarar bayanai (wani abu da kanmu muka samu a Databrick), mun yanke shawarar ƙara wannan iyakance.

Don kwatanta wannan, bari mu kalli abin da ke faruwa a lambar da ke ƙasa lokacin da muka yi ƙoƙarin ƙara wasu sabbin ginshiƙai zuwa tebirin Delta wanda har yanzu ba a saita su don karɓe su ba.

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

Maimakon ƙara sabbin ginshiƙai ta atomatik, tafkin Delta yana sanya tsari kuma ya daina rubutu. Don taimakawa tantance ko wane ginshiƙi (ko saitin ginshiƙai) ke haifar da rashin daidaituwa, Spark yana fitar da tsare-tsare biyu daga ma'aunin tari don kwatantawa.

Menene fa'idar aiwatar da tsari?

Saboda aiwatar da tsari bincike ne mai tsauri, yana da kyakkyawan kayan aiki don amfani da shi azaman mai tsaron ƙofa zuwa tsaftataccen saitin bayanai da aka canza wanda ke shirye don samarwa ko amfani. Yawanci ana amfani da teburi masu ciyar da bayanai kai tsaye:

  • Algorithms na koyon inji
  • BI dashboards
  • Kayan aikin nazarin bayanai da hangen nesa
  • Duk wani tsarin samarwa da ke buƙatar tsari mai ƙarfi, ƙwaƙƙwaran tsarin ma'anar ma'ana.

Don shirya bayanan su don wannan matsala ta ƙarshe, masu amfani da yawa suna amfani da tsarin gine-ginen "multi-hop" mai sauƙi wanda a hankali ya gabatar da tsari a cikin teburin su. Don ƙarin koyo game da wannan, zaku iya duba labarin Koyon na'ura mai ƙima tare da tafkin Delta.

Tabbas, ana iya amfani da aiwatar da tsari a ko'ina cikin bututun ku, amma ku tuna cewa yawo zuwa tebur a wannan yanayin na iya zama takaici saboda, alal misali, kun manta cewa kun ƙara wani shafi zuwa bayanan mai shigowa.

Hana dilution data

Zuwa yanzu kuna iya yin mamaki, menene duk abin da ke faruwa? Bayan haka, wani lokacin kuskuren "madaidaicin tsari" wanda ba zato ba tsammani zai iya tayar da ku cikin aikin ku, musamman idan kun kasance sababbi zuwa tafkin Delta. Me yasa ba kawai bari tsarin ya canza kamar yadda ake buƙata don in iya rubuta DataFrame na ba komai?

Kamar yadda tsohuwar maganar ke cewa, "oza na rigakafin ya cancanci fam na magani." A wani lokaci, idan ba ku kula da aiwatar da tsarin ku ba, nau'in abubuwan da suka dace da bayanai za su haifar da kawunansu masu banƙyama - da alama tushen tushen tushen bayanai iri ɗaya na iya ƙunsar shari'o'in gefe, ɓarna ginshiƙai, taswira mara kyau, ko wasu abubuwa masu ban tsoro don yin mafarki game da su. mafarkin mafarki. Hanya mafi kyau ita ce dakatar da waɗannan maƙiyan a bakin kofa - tare da aiwatar da tsari - kuma a yi mu'amala da su a cikin haske, maimakon daga baya lokacin da suka fara fakewa cikin zurfin zurfin lambar samarwa ku.

Ƙaddamar da tsari yana ba ku tabbacin cewa tsarin teburin ku ba zai canza ba sai dai idan kun amince da canjin. Wannan yana hana dilution na bayanai, wanda zai iya faruwa lokacin da aka ƙara sababbin ginshiƙai akai-akai wanda a baya mahimmanci, tebur mai matsewa sun rasa ma'anarsu da amfani saboda shigar da bayanai. Ta hanyar ƙarfafa ku ku kasance da niyya, saita ƙa'idodi masu kyau, da tsammanin inganci mai kyau, aiwatar da tsari yana yin daidai abin da aka ƙera shi don yin—taimaka muku kasancewa da hankali da tsabtar maƙunsar bayanai.

Idan a kan ƙarin la'akari da ku yanke shawarar cewa ku da gaske buƙatar ƙara sabon shafi - babu matsala, a ƙasa akwai gyaran layi ɗaya. Maganin shine juyin halitta na kewaye!

Menene tsarin juyin halitta?

Juyin Halittar Tsari wani fasali ne wanda ke ba masu amfani damar canza tsarin tebur na yanzu gwargwadon bayanan da ke canzawa akan lokaci. Yawancin lokaci ana amfani da shi lokacin yin aikin ƙara ko sake rubutawa don daidaita tsarin ta atomatik don haɗa ɗaya ko fiye da sabbin ginshiƙai.

Ta yaya tsarin juyin halitta ke aiki?

Bin misalin daga sashin da ya gabata, masu haɓakawa zasu iya amfani da sauƙin ƙirƙira don ƙara sabbin ginshiƙai waɗanda a baya aka ƙi saboda rashin daidaiton tsari. Ana kunna juyin da'ira ta ƙara .option('mergeSchema', 'true') zuwa ga ƙungiyar Spark ku .write или .writeStream.

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

Don duba jadawalin, gudanar da tambayar Spark SQL mai zuwa

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

Nitsewa cikin Tekun Delta: Tilasta Tsari da Juyin Halitta
A madadin, zaku iya saita wannan zaɓi don duk zaman Spark ta ƙara spark.databricks.delta.schema.autoMerge = True zuwa tsarin Spark. Amma yi amfani da wannan tare da taka tsantsan, saboda aiwatar da tsari ba zai ƙara faɗakar da kai ga rashin daidaiton makircin da ba da niyya ba.

Ta haɗa da siga a cikin buƙatar mergeSchema, duk ginshiƙan da ke cikin DataFrame amma ba a cikin tebur ɗin da aka yi niyya ba ana ƙara su ta atomatik zuwa ƙarshen makirci a matsayin wani ɓangare na ma'amalar rubutu. Hakanan za'a iya ƙara filayen gida kuma waɗannan kuma za'a ƙara su zuwa ƙarshen ginshiƙan tsarin da suka dace.

Injiniyoyin kwanan wata da masana kimiyyar bayanai na iya amfani da wannan zaɓi don ƙara sabbin ginshiƙai (watakila ma'aunin awo da aka bibiya kwanan nan ko ginshiƙin aikin tallace-tallace na wannan watan) zuwa teburin samar da injin ɗin da suke da su ba tare da karya samfuran da ake da su ba bisa tsoffin ginshiƙai.

Ana ba da izinin ire-iren waɗannan canje-canjen ƙira a matsayin wani ɓangare na haɓakar ƙima yayin ƙari ko sake rubutawa:

  • Ƙara sababbin ginshiƙai (wannan shine yanayin da aka fi sani)
  • Canza nau'ikan bayanai daga NullType -> kowane nau'in ko haɓakawa daga ByteType -> ShortType -> IntegerType

Sauran canje-canjen da ba a yarda da su ba a cikin tsarin juyin halitta suna buƙatar sake rubuta tsarin da bayanai ta ƙara .option("overwriteSchema", "true"). Misali, a cikin yanayin inda ginshiƙin "Foo" asalin lamba ne kuma sabon tsari shine nau'in bayanan kirtani, to duk fayilolin Parquet(data) zasu buƙaci sake rubutawa. Irin waɗannan canje-canje sun haɗa da:

  • share shafi
  • canza nau'in bayanai na ginshiƙi na yanzu (a-wuri)
  • sake suna ginshiƙan da suka bambanta kawai a yanayin (misali, "Foo" da "foo")

A ƙarshe, tare da sakin Spark 3.0 na gaba, za a sami cikakken tallafi na DDL (ta amfani da ALTER TABLE), ba da damar masu amfani su aiwatar da ayyuka masu zuwa akan tsarin tebur:

  • ƙara ginshiƙai
  • canza sharhin shafi
  • saita kaddarorin tebur waɗanda ke sarrafa halayen tebur, kamar saita tsawon lokacin da aka adana log ɗin ciniki.

Menene fa'idar juyin halitta?

Za a iya amfani da juyin halittar tsari a duk lokacin da kuke nufi canza tsarin teburin ku (saɓanin lokacin da kuka ƙara ginshiƙai da gangan zuwa DataFrame ɗinku waɗanda bai kamata su kasance a wurin ba). Wannan ita ce hanya mafi sauƙi don ƙaura makircinku saboda yana ƙara daidaitattun sunaye da nau'ikan bayanai ta atomatik ba tare da bayyana su a sarari ba.

ƙarshe

Ƙaddamar da tsari ya ƙi duk wani sabon ginshiƙai ko wasu canje-canjen makirci waɗanda basu dace da teburin ku ba. Ta hanyar kafawa da kiyaye waɗannan manyan ma'auni, manazarta da injiniyoyi za su iya amincewa da cewa bayanansu suna da matsayi mafi girma na mutunci, suna sadarwa a fili kuma a sarari, suna ba su damar yanke shawarar kasuwanci mafi kyau.

A gefe guda, juyin halittar tsari yana cika aiwatarwa ta hanyar sauƙaƙawa zargin atomatik canje-canje. Bayan haka, bai kamata ya zama da wahala a ƙara shafi ba.

Aikace-aikacen tilastawa na makirci shine yang, inda juyin halitta na makirci shine yin. Idan aka yi amfani da su tare, waɗannan fasalulluka suna sa amo da daidaita sigina cikin sauƙi fiye da kowane lokaci.

Muna kuma gode wa Mukul Murthy da Pranav Anand bisa gudunmawar da suka bayar a wannan labarin.

Sauran labarai a cikin wannan jerin:

nutse cikin Tekun Delta: Cire fakitin Ma'amala

Labarai kan batun

Koyon na'ura mai ƙima tare da tafkin Delta

Menene tafkin bayanai?

Nemo ƙarin game da kwas

source: www.habr.com

Add a comment