Delta Lake Dive: Pagpatuman ug Ebolusyon sa Scheme

Hoy Habr! Gipresentar ko sa imong pagtagad ang hubad sa artikulo "Pagsalom sa Delta Lake: Pagpatuman sa Schema ug Ebolusyon" mga awtor nga si Burak Yavuz, Brenner Heintz ug Denny Lee, nga giandam sa pagpaabut sa pagsugod sa kurso Data Engineer gikan sa OTUS.

Delta Lake Dive: Pagpatuman ug Ebolusyon sa Scheme

Ang datos, sama sa among kasinatian, kanunay nga natipon ug nag-uswag. Aron makapadayon, ang atong mental nga mga modelo sa kalibutan kinahanglang mopahiangay sa bag-ong datos, nga ang uban niini adunay bag-ong mga dimensyonβ€”bag-ong mga paagi sa pag-obserbar sa mga butang nga wala nato mahibaloi kaniadto. Kini nga mga modelo sa pangisip dili kaayo lahi sa mga laraw sa lamesa nga nagtino kung giunsa naton pagkategorya ug pagproseso ang bag-ong impormasyon.

Kini nagdala kanato ngadto sa isyu sa schema management. Samtang ang mga hagit sa negosyo ug mga kinahanglanon mausab sa paglabay sa panahon, mao usab ang istruktura sa imong datos. Gipasayon ​​sa Delta Lake ang pagpaila sa bag-ong mga sukod samtang nagbag-o ang datos. Ang mga tiggamit adunay access sa yano nga mga semantiko aron madumala ang ilang mga laraw sa lamesa. Kini nga mga himan naglakip sa Schema Enforcement, nga nanalipod sa mga tiggamit gikan sa dili tinuyo nga paghugaw sa ilang mga lamesa nga adunay mga sayup o wala kinahanglana nga datos, ug Schema Evolution, nga nagtugot sa mga bag-ong kolum sa bililhon nga datos nga awtomatiko nga idugang sa angay nga mga lokasyon. Sa niini nga artikulo, kita mosalom sa mas lawom sa paggamit niini nga mga himan.

Pagsabot sa Table Schemas

Ang matag DataFrame sa Apache Spark adunay usa ka schema nga naghubit sa porma sa datos, sama sa mga tipo sa datos, mga kolum, ug metadata. Uban sa Delta Lake, ang eskema sa lamesa gitipigan sa format nga JSON sulod sa log sa transaksyon.

Unsa ang pagpatuman sa scheme?

Ang Schema Enforcement, nailhan usab nga Schema Validation, usa ka mekanismo sa seguridad sa Delta Lake nga nagsiguro sa kalidad sa datos pinaagi sa pagsalikway sa mga rekord nga dili mohaum sa schema sa lamesa. Sama sa hostess sa front desk sa usa ka sikat nga reservation-only nga restawran, iyang gisusi kung ang matag kolum sa datos nga gisulod sa lamesa naa sa katugbang nga lista sa gipaabut nga mga kolum (sa ato pa, kung adunay "pagpareserba" alang sa matag usa kanila. ), ug gisalikway ang bisan unsang mga rekord nga adunay mga kolum nga wala sa lista.

Giunsa pagtrabaho ang pagpatuman sa schema?

Ang Delta Lake naggamit sa schema-on-write checking, nga nagpasabot nga ang tanang bag-ong mga sinulat sa lamesa gisusi alang sa pagkaangay sa schema sa target nga lamesa sa oras sa pagsulat. Kung ang schema dili managsama, ang Delta Lake hingpit nga gi-abort ang transaksyon (walay datos nga gisulat) ug nagpataas sa usa ka eksepsiyon aron mapahibalo ang tiggamit sa pagkasukwahi.
Gigamit sa Delta Lake ang mosunod nga mga lagda aron mahibal-an kung ang usa ka rekord nahiuyon sa usa ka lamesa. Masulat nga DataFrame:

  • dili maglangkob og dugang nga mga kolum nga wala sa schema sa target nga lamesa. Sa kasukwahi, maayo ang tanan kung ang umaabot nga datos wala maglangkob sa tanan nga mga kolum gikan sa lamesa - kini nga mga kolum hatagan ra nga mga null nga kantidad.
  • dili mahimong adunay mga tipo sa datos sa kolum nga lahi sa mga tipo sa datos sa mga kolum sa target nga lamesa. Kung ang kolum sa target nga lamesa adunay StringType data, apan ang katugbang nga kolum sa DataFrame adunay sulud nga IntegerType data, ang pagpatuman sa schema magbutang usa ka eksepsiyon ug mapugngan ang operasyon sa pagsulat nga mahitabo.
  • dili mahimong maglangkob sa mga ngalan sa kolum nga magkalainlain sa kaso. Kini nagpasabot nga dili ka adunay mga kolum nga ginganlan og 'Foo' ug 'foo' nga gihubit sa samang lamesa. Samtang ang Spark mahimong gamiton sa case-sensitive o case-insensitive (default) nga mode, ang Delta Lake kay case-preserve pero insensitive sulod sa schema storage. Ang parquet sensitibo sa kaso kung magtipig ug magbalik sa impormasyon sa kolum. Aron malikayan ang posibleng mga sayop, korapsyon sa datos, o pagkawala sa datos (usa ka butang nga personal namong nasinati sa Databricks), nakahukom kami nga idugang kini nga limitasyon.

Sa pag-ilustrar niini, atong tan-awon kon unsa ang mahitabo sa code sa ubos sa dihang kita mosulay sa pagdugang sa pipila ka bag-ong namugna nga mga kolum ngadto sa usa ka lamesa sa Delta Lake nga wala pa ma-configure sa pagdawat niini.

# Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ 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.

Imbis nga awtomatiko nga pagdugang bag-ong mga kolum, ang Delta Lake nagpahamtang usa ka laraw ug gihunong ang pagsulat. Aron makatabang sa pagtino kung unsang kolum (o hugpong sa mga kolum) ang hinungdan sa kalainan, ang Spark nagpagawas sa duha ka mga eskema gikan sa stack trace alang sa pagtandi.

Unsa ang kaayohan sa pagpatuman sa usa ka schema?

Tungod kay ang pagpatuman sa schema usa ka higpit nga pagsusi, kini usa ka maayo kaayo nga himan nga gamiton ingon usa ka magbalantay sa ganghaan sa usa ka limpyo, hingpit nga nabag-o nga set sa datos nga andam alang sa produksiyon o pagkonsumo. Kasagaran nga gigamit sa mga lamesa nga direktang nagpakaon sa datos:

  • Mga algorithm sa pagkat-on sa makina
  • Mga dashboard sa BI
  • Data analytics ug visualization tools
  • Ang bisan unsang sistema sa produksiyon nga nanginahanglan labi ka istruktura, kusgan nga gi-type nga mga laraw sa semantiko.

Aron maandam ang ilang datos alang niining katapusang babag, daghang tiggamit ang naggamit sa usa ka yano nga "multi-hop" nga arkitektura nga anam-anam nga nagpaila sa istruktura sa ilang mga lamesa. Aron mahibal-an ang dugang bahin niini, mahimo nimong susihon ang artikulo Ang pagkat-on sa makina nga grado sa produksiyon uban sa Delta Lake.

Siyempre, ang pagpatuman sa schema mahimong magamit bisan asa sa imong pipeline, apan hinumdomi nga ang pag-stream sa usa ka lamesa sa kini nga kaso mahimong makapahigawad tungod kay, pananglitan, nakalimot ka nga nagdugang ka usa ka kolum sa umaabot nga datos.

Pagpugong sa data dilution

Sa pagkakaron tingali naghunahuna ka, unsa ang tanan nga kaguliyang? Human sa tanan, usahay ang usa ka wala damha nga "schema mismatch" nga sayup mahimong makabalda kanimo sa imong workflow, labi na kung bag-o ka sa Delta Lake. Ngano nga dili na lang pabay-an ang schema nga magbag-o kung gikinahanglan aron ako makasulat sa akong DataFrame bisan unsa pa?

Sama sa giingon sa karaan nga panultihon, "usa ka onsa sa paglikay ang bili sa usa ka libra nga tambal." Sa pila ka punto, kung dili ka mag-amping sa pagpatuman sa imong schema, ang mga isyu sa pagkaangay sa tipo sa data mosangko sa ilang dili maayo nga mga ulo - ang daw homogenous nga hilaw nga mga tinubdan sa datos mahimong adunay sulud nga mga kaso, dunot nga mga kolum, dili maayo nga mga mapping, o uban pang makahadlok nga mga butang nga madamgo. mga damgo. Ang labing kaayo nga pamaagi mao ang pagpahunong sa kini nga mga kaaway sa ganghaan - nga adunay pagpatuman sa schema - ug atubangon sila sa kahayag, imbes sa ulahi kung magsugod sila pagtago sa ngitngit nga kahiladman sa imong code sa produksiyon.

Ang pagpatuman sa usa ka schema naghatag kanimo ug kasiguruhan nga ang laraw sa imong lamesa dili mausab gawas kung imong aprobahan ang pagbag-o. Kini magpugong sa data dilution, nga mahimong mahitabo sa diha nga ang bag-ong mga kolum idugang kanunay nga ang kaniadto bililhon, compressed tables mawad-an sa ilang kahulogan ug kapuslanan tungod sa data inundation. Pinaagi sa pag-awhag kanimo nga mahimong tinuyo, magbutang ug taas nga mga sumbanan, ug magdahum nga taas ang kalidad, ang pagpatuman sa schema mobuhat sa eksakto kung unsa ang gidesinyo nga buhatonβ€”makatabang kanimo nga magpabilin nga matinud-anon ug limpyo ang imong mga spreadsheet.

Kung sa dugang nga konsiderasyon nakahukom ka nga ikaw gyud kinahanglan nga pagdugang og bag-ong kolum - walay problema, sa ubos usa ka linya nga ayuhon. Ang solusyon mao ang ebolusyon sa sirkito!

Unsa ang ebolusyon sa schema?

Ang ebolusyon sa schema usa ka bahin nga nagtugot sa mga tiggamit sa dali nga pagbag-o sa karon nga laraw sa lamesa sumala sa datos nga nagbag-o sa paglabay sa panahon. Kini kasagarang gigamit sa dihang nagpahigayon ug append o rewrite nga operasyon aron awtomatik nga ipahiangay ang schema aron maapil ang usa o daghang bag-ong column.

Giunsa paglihok ang ebolusyon sa schema?

Pagsunod sa panig-ingnan gikan sa miaging seksyon, ang mga developer dali nga makagamit sa ebolusyon sa schema aron makadugang mga bag-ong mga kolum nga kaniadto gisalikway tungod sa pagkadili makanunayon sa schema. Ang ebolusyon sa circuit gi-aktibo pinaagi sa pagdugang .option('mergeSchema', 'true') sa imong Spark team .write ΠΈΠ»ΠΈ .writeStream.

# Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ mergeSchema
loans.write.format("delta") 
           .option("mergeSchema", "true") 
           .mode("append") 
           .save(DELTALAKE_SILVER_PATH)

Aron matan-aw ang graph, padagana ang mosunod nga pangutana sa Spark SQL

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊ с Π½ΠΎΠ²Ρ‹ΠΌ столбцом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ запись ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ
%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: Pagpatuman ug Ebolusyon sa Scheme
Sa laing paagi, mahimo nimong itakda kini nga opsyon alang sa tibuok nga sesyon sa Spark pinaagi sa pagdugang spark.databricks.delta.schema.autoMerge = True ngadto sa Spark configuration. Apan gamita kini uban ang pag-amping, tungod kay ang pagpatuman sa schema dili na magpaalerto kanimo sa wala tuyoa nga mga inconsistency sa schema.

Pinaagi sa paglakip sa parameter sa hangyo mergeSchema, ang tanan nga mga kolum nga anaa sa DataFrame apan wala sa target nga lamesa awtomatik nga idugang sa katapusan sa schema isip kabahin sa usa ka transaksyon sa pagsulat. Ang mga nested field mahimo usab nga idugang ug kini idugang usab sa katapusan sa katugbang nga mga column sa istruktura.

Ang mga inhenyero sa datos ug mga data scientist mahimong mogamit niini nga opsyon aron makadugang ug bag-ong mga kolum (tingali bag-o lang gisubay nga metric o kolum sa performance sa pagpamaligya karong bulana) sa ilang kasamtangan nga mga lamesa sa produksyon sa pagkat-on sa makina nga walay paglapas sa kasamtangan nga mga modelo base sa daan nga mga kolum.

Gitugotan ang mosunod nga mga matang sa mga kausaban sa schema isip kabahin sa ebolusyon sa schema atol sa pagdugang o pagsulat pag-usab sa lamesa:

  • Pagdugang ug bag-ong mga kolum (kini ang kasagarang senaryo)
  • Pag-usab sa mga tipo sa datos gikan sa NullType -> bisan unsang lain nga tipo o pagpasiugda gikan sa ByteType -> ShortType -> IntegerType

Ang ubang mga pagbag-o nga dili gitugotan sulod sa ebolusyon sa schema nanginahanglan nga ang eskema ug datos isulat pag-usab pinaagi sa pagdugang .option("overwriteSchema", "true"). Pananglitan, sa kaso diin ang kolum nga "Foo" orihinal nga integer ug ang bag-ong schema usa ka string data type, nan ang tanan nga Parquet(data) nga mga file kinahanglan nga isulat pag-usab. Ang maong mga kausaban naglakip sa:

  • pagtangtang sa usa ka kolum
  • pagbag-o sa tipo sa datos sa usa ka kasamtangan nga kolum (in-place)
  • pag-usab sa ngalan sa mga kolum nga magkalahi lamang sa kaso (pananglitan, "Foo" ug "foo")

Sa katapusan, sa sunod nga pagpagawas sa Spark 3.0, ang klaro nga DDL hingpit nga suportahan (gamit ang ALTER TABLE), nga gitugotan ang mga tiggamit sa paghimo sa mga musunud nga aksyon sa mga laraw sa lamesa:

  • pagdugang mga kolum
  • pagbag-o sa mga komento sa kolum
  • paghimo sa mga kabtangan sa lamesa nga nagkontrol sa pamatasan sa lamesa, sama sa pagtakda sa gidugayon sa oras nga gitipigan ang usa ka log sa transaksyon.

Unsa ang kaayohan sa ebolusyon sa sirkito?

Ang ebolusyon sa schema mahimong magamit bisan kanus-a nimo tuyo usba ang schema sa imong lamesa (sukwahi sa kung wala ka aksidente nga nakadugang mga kolum sa imong DataFrame nga wala kinahanglana didto). Kini ang pinakasayon ​​nga paagi sa pag-migrate sa imong schema tungod kay awtomatiko kini nga nagdugang sa husto nga mga ngalan sa kolum ug mga tipo sa datos nga dili kinahanglan nga klaro nga ipahayag kini.

konklusyon

Gisalikway sa pagpatuman sa schema ang bisan unsang bag-ong mga kolum o uban pang mga pagbag-o sa schema nga dili tugma sa imong lamesa. Pinaagi sa pagpahimutang ug pagmentinar niining taas nga mga sumbanan, ang mga analista ug mga inhenyero makasalig nga ang ilang mga datos adunay labing taas nga lebel sa integridad, tin-aw ug tin-aw nga pagpakigsulti niini, nga nagtugot kanila sa paghimo og mas maayo nga mga desisyon sa negosyo.

Sa laing bahin, ang ebolusyon sa schema nagdugtong sa pagpatuman pinaagi sa pagpayano giingong awtomatikong pagbag-o sa schema. Human sa tanan, kini kinahanglan nga dili lisud sa pagdugang sa usa ka kolum.

Ang pinugos nga aplikasyon sa laraw mao ang yang, diin ang ebolusyon sa laraw mao ang yin. Kung gigamit nga dungan, kini nga mga bahin naghimo sa pagpugong sa kasaba ug pag-tune sa signal nga labi ka dali kaysa kaniadto.

Gusto usab namon nga pasalamatan si Mukul Murthy ug Pranav Anand sa ilang mga kontribusyon sa kini nga artikulo.

Ang ubang mga artikulo niini nga serye:

Pag-dive sa Delta Lake: Pag-unpack sa Log sa Transaksyon

May Kalabutan nga mga Artikulo

Ang pagkat-on sa makina nga grado sa produksiyon uban sa Delta Lake

Unsa ang usa ka data lake?

Hibal-i ang dugang bahin sa kurso

Source: www.habr.com

Idugang sa usa ka comment