Delta Lake Dive: Cur an gnìomh agus mean-fhàs sgeama

Hi Habr! Bidh mi a’ toirt d’ aire eadar-theangachadh an artaigil "Dàibheadh ​​​​a-steach do Delta Lake: Co-èigneachadh Sgeama & Evolution" ùghdaran Burak Yavuz, Brenner Heintz agus Denny Lee, a chaidh ullachadh le dùil ri toiseach a’ chùrsa Einnseanair dàta bho OTUS.

Delta Lake Dive: Cur an gnìomh agus mean-fhàs sgeama

Tha dàta, mar ar n-eòlas, an-còmhnaidh a’ cruinneachadh agus ag atharrachadh. Gus cumail suas, feumaidh na modalan inntinneil againn den t-saoghal atharrachadh gu dàta ùr, cuid dhiubh anns a bheil tomhasan ùra - dòighean ùra air rudan fhaicinn nach robh fios againn roimhe. Chan eil na modalan inntinneil sin mòran eadar-dhealaichte bho na sgeamaichean bùird a tha a’ dearbhadh mar a bhios sinn a’ seòrsachadh agus a’ làimhseachadh fiosrachadh ùr.

Bheir seo sinn gu cùis riaghladh sgeamaichean. Mar a bhios dùbhlain agus riatanasan gnìomhachais ag atharrachadh thar ùine, mar sin bidh structar an dàta agad. Tha Delta Lake ga dhèanamh furasta tomhasan ùra a thoirt a-steach mar a bhios dàta ag atharrachadh. Tha cothrom aig luchd-cleachdaidh air semantics sìmplidh gus na sgeamaichean bùird aca a riaghladh. Tha na h-innealan sin a’ toirt a-steach Schema Enforcement, a tha a’ dìon luchd-cleachdaidh bho bhith a’ truailleadh na bùird aca le mearachdan no dàta neo-riatanach, agus Schema Evolution, a leigeas le colbhan ùra de dhàta luachmhor a bhith air an cur gu fèin-ghluasadach gu na h-àiteachan iomchaidh. San artaigil seo, nì sinn dàibheadh ​​​​nas doimhne air na h-innealan sin a chleachdadh.

A' tuigsinn sgeamaichean Clàr

Anns gach DataFrame ann an Apache Spark tha sgeama a tha a’ mìneachadh cruth an dàta, leithid seòrsaichean dàta, colbhan, agus meata-dàta. Le Delta Lake, tha sgeama a’ bhùird air a stòradh ann an cruth JSON taobh a-staigh an loga malairt.

Dè a th' ann an cur an gnìomh sgeama?

Tha Schema Enforcement, ris an canar cuideachd Schema Validation, na inneal tèarainteachd ann an Delta Lake a nì cinnteach à càileachd dàta le bhith a’ diùltadh clàran nach eil a rèir sgeama a’ bhùird. Coltach ris an neach-aoigheachd aig deasg aghaidh taigh-bìdh mòr-chòrdte a-mhàin, bidh i a’ sgrùdadh a bheil gach colbh dàta a chaidh a chuir a-steach don chlàr anns an liosta fhreagarrach de cholbhan ris a bheil dùil (ann am faclan eile, a bheil “glèidheadh” ann airson gach fear dhiubh ), agus a’ diùltadh clàran sam bith le colbhan nach eil air an liosta.

Ciamar a tha cur an gnìomh sgeama ag obair?

Bidh Delta Lake a’ cleachdadh sgrùdadh sgeama-air-sgrìobhaidh, a tha a’ ciallachadh gum bi a h-uile sgrìobhadh ùr chun bhòrd air a sgrùdadh airson co-chòrdalachd le sgeama a’ chlàr targaid aig àm sgrìobhaidh. Ma tha an sgeama neo-chunbhalach, bidh Delta Lake a’ cur stad air a’ ghnothach gu tur (chan eil dàta air a sgrìobhadh) agus a’ togail eisgeachd gus innse don neach-cleachdaidh mun neo-chunbhalachd.
Bidh Delta Lake a’ cleachdadh nan riaghailtean a leanas gus faighinn a-mach a bheil clàr co-chosmhail ri clàr. Frèam dàta a ghabhas sgrìobhadh:

  • chan urrainn dha colbhan a bharrachd a bhith ann nach eil ann an sgeama a’ chlàr targaid. Air an làimh eile, tha a h-uile dad ceart gu leòr mura h-eil na colbhan uile bhon chlàr anns an dàta a thig a-steach - cha tèid ach luachan null a thoirt do na colbhan sin.
  • chan urrainn seòrsaichean dàta colbh a bhith ann a tha eadar-dhealaichte bho na seòrsaichean dàta anns na colbhan sa chlàr targaid. Ma tha dàta StringType anns a’ cholbh clàr targaid, ach gu bheil dàta IntegerType anns a’ cholbh fhreagarrach san DataFrame, tilgidh cur an gnìomh sgeama eisgeachd agus cuiridh e casg air an obair sgrìobhaidh.
  • chan urrainn ainmean colbh a bhith ann a tha eadar-dhealaichte a-mhàin gun fhios. Tha seo a’ ciallachadh nach urrainn dhut colbhan leis an ainm ‘Foo’ agus ‘foo’ a bhith air am mìneachadh san aon chlàr. Ged a ghabhas Spark a chleachdadh ann am modh cùis-mhothachail no cùis-mhothachail (bunaiteach), tha Delta Lake a’ gleidheadh ​​​​cùisean ach tha e neo-mhothachail taobh a-staigh stòradh an sgeama. Tha parquet mothachail air cùis nuair a thathar a’ stòradh agus a’ tilleadh fiosrachadh colbh. Gus mearachdan a dh’ fhaodadh a bhith ann, coirbeachd dàta, no call dàta (rudeigin a dh’ fhiosraich sinn gu pearsanta aig Databricks), chuir sinn romhainn an cuingealachadh seo a chuir ris.

Gus seo a nochdadh, leig dhuinn sùil a thoirt air na thachras sa chòd gu h-ìosal nuair a dh'fheuchas sinn ri colbhan ùra a chur ri clàr Delta Lake nach eil fhathast air an rèiteachadh gus gabhail riutha.

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

An àite colbhan ùra a chuir ris gu fèin-ghluasadach, bidh Delta Lake a’ cur sgeama an sàs agus a’ stad sgrìobhadh. Gus cuideachadh le faighinn a-mach dè an colbh (no seata de cholbhan) a tha ag adhbhrachadh an eadar-dhealachaidh, bidh Spark a’ toirt a-mach an dà sgeama bho lorg na stac airson coimeas.

Dè a’ bhuannachd a tha ann a bhith a’ cur an gnìomh sgeama?

Leis gur e sgrùdadh gu math teann a th’ ann an cur an gnìomh sgeama, tha e na inneal sàr-mhath airson a chleachdadh mar gheata gu seata dàta glan, làn-chruth-atharraichte a tha deiseil airson cinneasachadh no caitheamh. Mar as trice air a chur an sàs ann an clàran a bhios a 'biathadh dàta gu dìreach:

  • Algorithms ionnsachadh innealan
  • clàran BI
  • Innealan anailis dàta agus lèirsinn
  • Siostam cinneasachaidh sam bith a dh’ fheumas sgeamaichean semantach làn structarail, air an clò-sgrìobhadh gu làidir.

Gus an dàta aca ullachadh airson a’ chnap-starra mu dheireadh seo, bidh mòran de luchd-cleachdaidh a’ cleachdadh ailtireachd “ioma-hop” sìmplidh a bheir structar a-steach do na bùird aca mean air mhean. Gus barrachd ionnsachadh mu dheidhinn seo, faodaidh tu sùil a thoirt air an artaigil Ionnsachadh inneal ìre cinneasachaidh le Delta Lake.

Gu dearbh, faodar cur an gnìomh sgeamaichean a chleachdadh an àite sam bith san loidhne-phìoban agad, ach cuimhnich gum faod sruthadh gu bòrd sa chùis seo a bhith duilich oir, mar eisimpleir, dhìochuimhnich thu gun do chuir thu colbh eile ris an dàta a thàinig a-steach.

A 'cur casg air lagachadh dàta

Mun àm seo is dòcha gu bheil thu a’ faighneachd, dè a th’ ann mu dheidhinn? Às deidh na h-uile, uaireannan faodaidh mearachd “schema mismatch” ris nach robh dùil do chuairteachadh anns an t-sruth-obrach agad, gu sònraichte ma tha thu ùr do Delta Lake. Carson nach leig thu leis an sgeama atharrachadh mar a dh ’fheumar gus an urrainn dhomh mo DataFrame a sgrìobhadh ge bith dè?

Mar a tha an seann abairt ag ràdh, “is fhiach punnd de leigheas punnd casg. Aig àm air choreigin, mura dèan thu faiceallach an sgeama agad a chuir an gnìomh, togaidh cùisean co-chòrdalachd seòrsa dàta an cinn grànda - dh’ fhaodadh gum bi cèisean iomaill, colbhan coirbte, mapaichean mì-chruthaichte no rudan eagallach eile ann an stòran dàta amh a tha coltach ri aon-ghnèitheach. trom-laighe. Is e an dòigh-obrach as fheàrr stad a chuir air na nàimhdean sin aig a ’gheata - le cur an gnìomh sgeama - agus dèiligeadh riutha san t-solas, seach nas fhaide air adhart nuair a thòisicheas iad a’ falach ann an doimhneachd dorcha a ’chòd riochdachaidh agad.

Le bhith a’ cur sgeama an gnìomh bheir sin dearbhadh dhut nach atharraich sgeama a’ bhùird agad mura gabh thu ris an atharrachadh. Bidh seo a’ cur casg air lagachadh dàta, a dh’ fhaodadh tachairt nuair a thèid colbhan ùra a chur ris cho tric is gu bheil clàran teann a bha luachmhor roimhe seo a’ call am brìgh agus cho feumail ‘s a tha iad ri linn uisgeachadh dàta. Le bhith gad bhrosnachadh gu bhith a dh’aona ghnothach, suidhich ìrean àrda, agus bi an dùil càileachd àrd, bidh cur an gnìomh sgeama a’ dèanamh dìreach mar a chaidh a dhealbhadh gus a dhèanamh - do chuideachadh le bhith a’ fuireach dìcheallach agus na duilleagan-clèithe agad glan.

Ma tha thu air co-dhùnadh gu bheil thu dha-rìribh air beachdachadh air tuilleadh feum cuir colbh ùr ris - gun duilgheadas sam bith, gu h-ìosal tha fuasgladh aon-loidhne. Is e am fuasgladh mean-fhàs a’ chuairt!

Dè a th’ ann an mean-fhàs sgeama?

Tha mean-fhàs sgeama na fheart a leigeas le luchd-cleachdaidh an sgeama clàr gnàthach atharrachadh gu furasta a rèir dàta a bhios ag atharrachadh thar ùine. Tha e air a chleachdadh gu tric nuair a bhios tu a’ dèanamh ath-sgrìobhadh no obair ath-sgrìobhaidh gus an sgeama atharrachadh gu fèin-ghluasadach gus a bhith a’ toirt a-steach aon cholbh ùr no barrachd.

Ciamar a tha mean-fhàs sgeama ag obair?

A’ leantainn na h-eisimpleir bhon roinn roimhe, is urrainn do luchd-leasachaidh mean-fhàs sgeamaichean a chleachdadh gu furasta gus colbhan ùra a chaidh a dhiùltadh roimhe a chur ris air sgàth neo-chunbhalachd sgeama. Tha mean-fhàs cuairteachaidh air a chuir an gnìomh le bhith a’ cur ris .option('mergeSchema', 'true') don sgioba Spark agad .write или .writeStream.

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

Gus an graf fhaicinn, ruith a’ cheist Spark SQL a leanas

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

Delta Lake Dive: Cur an gnìomh agus mean-fhàs sgeama
Air neo, faodaidh tu an roghainn seo a shuidheachadh airson an t-seisean Spark gu lèir le bhith a’ cur ris spark.databricks.delta.schema.autoMerge = True gu rèiteachadh Spark. Ach cleachd seo gu faiceallach, oir cha bhith cur an gnìomh sgeamaichean a’ toirt rabhadh dhut tuilleadh mu neo-chunbhalachd sgeama gun dùil.

Le bhith a 'toirt a-steach am paramadair san iarrtas mergeSchema, thèid a h-uile colbh a tha an làthair anns an DataFrame ach nach eil sa chlàr targaid a chuir gu fèin-ghluasadach gu deireadh an sgeama mar phàirt de ghnìomhachd sgrìobhaidh. Faodar raointean neadachaidh a chur ris cuideachd agus thèid iad sin a chur ri deireadh nan colbhan structar co-fhreagarrach.

Faodaidh innleadairean cinn-latha agus luchd-saidheans dàta an roghainn seo a chleachdadh gus colbhan ùra a chur ris (is dòcha meatrach a chaidh a leantainn o chionn ghoirid no colbh coileanadh reic na mìos seo) ris na clàran toraidh ionnsachaidh inneal aca gun a bhith a’ briseadh mhodalan a tha ann mar-thà stèidhichte air seann cholbhan.

Tha na seòrsaichean atharrachaidhean sgeamaichean a leanas ceadaichte mar phàirt de mean-fhàs sgeamaichean aig àm cur-ris no ath-sgrìobhadh clàr:

  • A’ cur colbhan ùra ris (is e seo an suidheachadh as cumanta)
  • Ag atharrachadh seòrsaichean dàta bho NullType -> seòrsa sam bith eile no adhartachadh bho ByteType -> ShortType -> IntegerType

Tha atharrachaidhean eile nach eil ceadaichte taobh a-staigh mean-fhàs sgeama ag iarraidh gun tèid an sgeama agus an dàta ath-sgrìobhadh le bhith a’ cur ris .option("overwriteSchema", "true"). Mar eisimpleir, anns a’ chùis far an robh an colbh “Foo” na shlàn-chunntas an toiseach agus gur e seòrsa dàta sreang a bh’ anns an sgeama ùr, dh’ fheumadh a h-uile faidhle Parquet (data) a bhith air ath-sgrìobhadh. Am measg nan atharrachaidhean sin tha:

  • a' sguabadh às colbh
  • ag atharrachadh an seòrsa dàta de cholbh gnàthaichte (na àite)
  • ag ath-ainmeachadh cholbhan a tha eadar-dhealaichte a-mhàin ann an cùis (mar eisimpleir, "Foo" agus "foo")

Mu dheireadh, leis an ath fhoillseachadh de Spark 3.0, bidh làn thaic aig DDL (a’ cleachdadh ALTER TABLE), a’ leigeil le luchd-cleachdaidh na gnìomhan a leanas a dhèanamh air sgeamaichean bùird:

  • a’ cur colbhan ris
  • ag atharrachadh beachdan colbh
  • a 'suidheachadh feartan clàr a tha a' cumail smachd air giùlan a 'bhùird, mar a bhith a' suidheachadh an ùine a tha log malairt air a stòradh.

Dè a’ bhuannachd a th’ ann an mean-fhàs cuairteachaidh?

Faodar mean-fhàs sgeama a chleachdadh uair sam bith a nì thu an dùil atharraich sgeama a’ bhùird agad (an taca ri nuair a chuir thu colbhan ris an DataFrame agad gun fhiosta nach bu chòir a bhith ann). Is e seo an dòigh as fhasa air an sgeama agad a ghluasad oir bidh e gu fèin-ghluasadach a’ cur ainmean nan colbhan agus na seòrsaichean dàta ceart gun a bhith gan cur an cèill gu soilleir.

co-dhùnadh

Bidh cur an gnìomh sgeamaichean a’ diùltadh colbhan ùra no atharrachaidhean sgeamaichean eile nach eil co-chòrdail ris a’ bhòrd agad. Le bhith a’ suidheachadh agus a’ cumail suas nan inbhean àrda sin, faodaidh luchd-anailis agus innleadairean earbsa a bhith ann gu bheil an ìre as àirde de ionracas aig an dàta aca, ga chonaltradh gu soilleir agus gu soilleir, a’ leigeil leotha co-dhùnaidhean gnìomhachais nas fheàrr a dhèanamh.

Air an làimh eile, tha mean-fhàs sgeama a’ cur ri cur an gnìomh le bhith a’ sìmpleachadh air a chasaid atharrachadh sgeamaichean fèin-ghluasadach. Às deidh na h-uile, cha bu chòir dha a bhith duilich colbh a chuir ris.

Is e yang an cleachdadh èiginneach den sgeama, far a bheil mean-fhàs an sgeama yin. Nuair a thèid an cleachdadh còmhla, bidh na feartan sin a’ dèanamh casg fuaim agus gleusadh chomharran nas fhasa na bha e a-riamh.

Bu mhath leinn cuideachd taing a thoirt do Mukul Murthy agus Pranav Anand airson na chuir iad ris an artaigil seo.

Artaigilean eile san t-sreath seo:

Dàibheadh ​​​​a-steach do Delta Lake: A’ dì-phapadh an Log Gnìomh

Artaigilean co-cheangailte

Ionnsachadh inneal ìre cinneasachaidh le Delta Lake

Dè a th’ ann an loch dàta?

Faigh a-mach tuilleadh mun chùrsa

Source: www.habr.com

Cuir beachd ann