Nyilem menyang Delta Lake: Penegakan Skema lan Evolusi

Hey Habr! Aku menehi perhatian marang terjemahan artikel kasebut "Nyilem menyang Delta Lake: Penegakan Skema & Evolusi" penulis Burak Yavuz, Brenner Heintz lan Denny Lee, sing disiapake kanggo nunggu wiwitan kursus Data Engineer saka OTUS.

Nyilem menyang Delta Lake: Penegakan Skema lan Evolusi

Data, kaya pengalaman kita, terus-terusan akumulasi lan berkembang. Supaya tetep munggah, model mental kita ing donya kudu adaptasi karo data anyar, sawetara sing ngemot dimensi anyar - cara anyar kanggo ngamati samubarang sing durung dingerteni sadurunge. Model mental iki ora beda banget karo skema tabel sing nemtokake cara kita nggolongake lan ngolah informasi anyar.

Iki nggawa kita menyang masalah manajemen skema. Minangka tantangan lan syarat bisnis ganti wektu, uga struktur data sampeyan. Delta Lake nggampangake ngenalake pangukuran anyar nalika owah-owahan data. Pangguna duwe akses menyang semantik prasaja kanggo ngatur skema tabel. Piranti kasebut kalebu Penegakan Skema, sing nglindhungi pangguna supaya ora ngrusak tabel kanthi ora sengaja kanthi kesalahan utawa data sing ora perlu, lan Skema Evolusi, sing ngidini kolom data penting anyar ditambahake kanthi otomatis menyang lokasi sing cocog. Ing artikel iki, kita bakal nyilem luwih jero babagan nggunakake alat kasebut.

Ngerteni Skema Tabel

Saben DataFrame ing Apache Spark ngemot skema sing nemtokake wangun data, kayata jinis data, kolom, lan metadata. Kanthi Delta Lake, skema tabel disimpen ing format JSON ing log transaksi.

Apa implementasine skema?

Penegakan Skema, uga dikenal minangka Validasi Skema, minangka mekanisme keamanan ing Delta Lake sing njamin kualitas data kanthi nolak cathetan sing ora cocog karo skema tabel. Kaya nyonya rumah ing meja ngarep restoran mung-reservasi sing populer, dheweke mriksa manawa saben kolom data sing dilebokake ing tabel kasebut ana ing dhaptar kolom sing dikarepake (kanthi tembung liya, apa ana "reservasi" kanggo saben wong. ), lan nolak cathetan kanthi kolom sing ora ana ing dhaptar.

Kepiye cara implementasine skema?

Delta Lake nggunakake schema-on-write checking, sing tegese kabeh nulis anyar ing meja dicenthang kompatibilitas karo skema tabel target nalika nulis. Yen skema ora konsisten, Delta Lake mbatalake transaksi kabeh (ora ana data sing ditulis) lan ngunggahake pangecualian kanggo menehi kabar marang pangguna babagan inkonsistensi kasebut.
Delta Lake nggunakake aturan ing ngisor iki kanggo nemtokake manawa rekaman kompatibel karo tabel. DataFrame sing bisa ditulis:

  • ora bisa ngemot kolom tambahan sing ora ana ing skema tabel target. Kosok baline, kabeh apik yen data sing mlebu ora ngemot kabeh kolom saka tabel - kolom kasebut mung bakal diwenehi nilai null.
  • ora bisa duwe jinis data kolom sing beda karo jinis data kolom ing tabel target. Yen kolom tabel target ngemot data StringType, nanging kolom sing cocog ing DataFrame ngemot data IntegerType, penegakan skema bakal mbuwang pengecualian lan nyegah operasi nulis.
  • ora bisa ngemot jeneng kolom sing beda-beda mung ing kasus. Iki tegese sampeyan ora bisa nemtokake kolom sing dijenengi 'Foo' lan 'foo' ing tabel sing padha. Nalika Spark bisa digunakake ing mode cilik-sensitif utawa cilik-sensitif (standar), Delta Lake nyimpen cilik nanging ora sensitif ing panyimpenan skema. Parket sensitif huruf cilik nalika nyimpen lan ngasilake informasi kolom. Kanggo ngindhari kesalahan, korupsi data, utawa mundhut data (soko sing kita alami ing Databricks), kita mutusake kanggo nambah watesan iki.

Kanggo ilustrasi iki, ayo kang njupuk dipikir ing apa mengkono ing kode ing ngisor iki nalika kita nyoba kanggo nambah sawetara kolom mentas kui menyang Tabel Delta Lake sing durung diatur kanggo nampa.

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

Tinimbang kanthi otomatis nambah kolom anyar, Delta Lake nemtokke skema lan mandheg nulis. Kanggo nemtokake kolom (utawa set kolom) sing nyebabake bedo, Spark ngasilake skema saka tumpukan tumpukan kanggo mbandhingake.

Apa gunane ngetrapake skema?

Amarga penegakan skema minangka pamriksan sing cukup kenceng, alat iki minangka alat sing apik banget kanggo digunakake minangka penjaga gerbang menyang set data sing resik lan diowahi kanthi lengkap sing siap kanggo produksi utawa konsumsi. Biasane ditrapake kanggo tabel sing langsung feed data:

  • Algoritma pembelajaran mesin
  • dasbor BI
  • Alat analisis data lan visualisasi
  • Sistem produksi apa wae sing mbutuhake skema semantik sing terstruktur lan diketik kanthi kuat.

Kanggo nyiapake data kanggo rintangan pungkasan iki, akeh pangguna nggunakake arsitektur "multi-hop" prasaja sing mboko sithik ngenalake struktur menyang tabel. Kanggo sinau luwih lengkap babagan iki, sampeyan bisa mriksa artikel kasebut Pembelajaran mesin kelas produksi karo Delta Lake.

Mesthine, penegakan skema bisa digunakake ing ngendi wae ing pipa sampeyan, nanging elinga yen streaming menyang tabel ing kasus iki bisa dadi frustasi amarga, contone, sampeyan lali yen sampeyan nambahake kolom liyane menyang data sing mlebu.

Nyegah data dilution

Saiki sampeyan bisa uga mikir, apa sing dadi ribut? Sawise kabeh, kadhangkala kesalahan "skema mismatch" sing ora dikarepke bisa nyebabake alur kerja sampeyan, utamane yen sampeyan anyar ing Delta Lake. Yagene ora mung ngganti skema kaya sing dibutuhake supaya aku bisa nulis DataFrame apa wae?

Minangka pepatah lawas, "satunggal ons pencegahan worth a pound of cure." Ing sawetara titik, yen sampeyan ora ngati-ati kanggo ngetrapake skema sampeyan, masalah kompatibilitas jinis data bakal nyebabake sirah sing ala - sumber data mentah sing katon homogen bisa uga ngemot kasus pinggir, kolom sing rusak, pemetaan sing salah, utawa perkara sing medeni liyane kanggo ngimpi. ngipi elek. Pendekatan sing paling apik yaiku kanggo mungkasi mungsuh-mungsuh kasebut ing gapura - kanthi penegakan skema - lan ngatasi kanthi terang, tinimbang mengko nalika dheweke mulai ngintip ing jero kode produksi sampeyan.

Ngleksanakake skema menehi jaminan manawa skema tabel sampeyan ora bakal owah kajaba sampeyan nyetujoni owah-owahan kasebut. Iki nyegah pengenceran data, sing bisa kedadeyan nalika kolom anyar ditambahake kanthi kerep, saengga tabel sing dikompres sing sadurunge larang regane ilang makna lan gunane amarga kebanjiran data. Kanthi nyengkuyung sampeyan supaya disengaja, nyetel standar sing dhuwur, lan ngarepake kualitas sing dhuwur, penegakan skema nindakake persis apa sing dirancang kanggo nindakake-mbantu sampeyan tetep sregep lan spreadsheet sampeyan resik.

Yen ing wawasan luwih sampeyan arep sing tenan perlu nambah kolom anyar - ora masalah, ing ngisor iki fix siji-line. Solusi kasebut yaiku evolusi sirkuit!

Apa evolusi skema?

Γ‰volusi skema minangka fitur sing ngidini pangguna ngganti skema tabel saiki kanthi gampang miturut data sing owah saka wektu. Paling asring digunakake nalika nindakake operasi append utawa nulis ulang kanggo ngganti skema kanthi otomatis kanggo nyakup siji utawa luwih kolom anyar.

Kepiye cara evolusi skema?

Sawise conto saka bagean sadurunge, pangembang bisa kanthi gampang nggunakake evolusi skema kanggo nambah kolom anyar sing sadurunge ditolak amarga skema inkonsistensi. Γ‰volusi sirkuit diaktifake kanthi nambah .option('mergeSchema', 'true') menyang tim Spark Panjenengan .write ΠΈΠ»ΠΈ .writeStream.

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

Kanggo ndeleng grafik, bukak pitakon Spark SQL ing ngisor iki

# Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊ с Π½ΠΎΠ²Ρ‹ΠΌ столбцом, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ запись ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ
%sql
SELECT addr_state, sum(`amount`) AS amount
FROM loan_by_state_delta
GROUP BY addr_state
ORDER BY sum(`amount`)
DESC LIMIT 10

Nyilem menyang Delta Lake: Penegakan Skema lan Evolusi
Utawa, sampeyan bisa nyetel pilihan iki kanggo kabeh sesi Spark kanthi nambah spark.databricks.delta.schema.autoMerge = True menyang konfigurasi Spark. Nanging gunakake iki kanthi ati-ati, amarga penegakan skema ora bakal menehi tandha maneh babagan inkonsistensi skema sing ora disengaja.

Kanthi kalebu parameter ing panyuwunan mergeSchema, kabeh kolom sing ana ing DataFrame nanging ora ana ing tabel target ditambahake kanthi otomatis ing pungkasan skema minangka bagΓ©an saka transaksi nulis. Kolom bersarang uga bisa ditambahake lan iki uga bakal ditambahake ing pungkasan kolom struktur sing cocog.

Insinyur tanggal lan ilmuwan data bisa nggunakake pilihan iki kanggo nambah kolom anyar (mbok menawa metrik sing mentas dilacak utawa kolom kinerja dodolan sasi iki) menyang tabel produksi machine learning sing wis ana tanpa ngilangi model sing ana adhedhasar kolom lawas.

Jinis-jinis owah-owahan skema ing ngisor iki diijini minangka bagΓ©an saka evolusi skema sajrone nambah utawa nulis ulang tabel:

  • Nambahake kolom anyar (iki minangka skenario sing paling umum)
  • Ngganti jinis data saka NullType -> jinis liyane utawa promosi saka ByteType -> ShortType -> IntegerType

Owah-owahan liyane sing ora diidini sajrone evolusi skema mbutuhake skema lan data ditulis maneh kanthi nambah .option("overwriteSchema", "true"). Contone, ing kasus ing ngendi kolom "Foo" wiwitane minangka integer lan skema anyar minangka jinis data senar, mula kabeh file Parquet(data) kudu ditulis maneh. Owah-owahan kasebut kalebu:

  • mbusak kolom
  • ngganti jinis data saka kolom sing ana (ing panggonan)
  • ngganti jeneng kolom sing mung beda-beda (contone, "Foo" lan "foo")

Pungkasan, kanthi rilis Spark 3.0 sabanjure, DDL eksplisit bakal didhukung kanthi lengkap (nggunakake ALTER TABLE), ngidini pangguna nindakake tumindak ing ngisor iki ing skema tabel:

  • nambah kolom
  • ngganti komentar kolom
  • nyetel sifat tabel sing ngontrol prilaku meja, kayata nyetel dawa wektu log transaksi disimpen.

Apa keuntungan saka evolusi sirkuit?

Evolusi skema bisa digunakake kapan wae sampeyan niat ngganti skema tabel sampeyan (minangka lawan nalika sampeyan ora sengaja nambah kolom menyang DataFrame sing ora kudu ana). Iki minangka cara paling gampang kanggo migrasi skema amarga kanthi otomatis nambah jeneng kolom lan jinis data sing bener tanpa kudu ngumumake kanthi jelas.

kesimpulan

Penegakan skema nolak kolom anyar utawa owah-owahan skema liyane sing ora kompatibel karo tabel sampeyan. Kanthi nyetel lan njaga standar sing dhuwur iki, analis lan insinyur bisa dipercaya manawa data kasebut nduweni integritas sing paling dhuwur, komunikasi kanthi jelas lan jelas, supaya bisa nggawe keputusan bisnis sing luwih apik.

Ing sisih liya, evolusi skema nglengkapi penegakan kanthi nyederhanakake miturut omongane uwong owah-owahan skema otomatis. Sawise kabeh, mesthine ora angel nambah kolom.

Aplikasi paksa skema kasebut yaiku yang, ing ngendi evolusi skema kasebut yaiku yin. Yen digunakake bebarengan, fitur-fitur kasebut nggawe nyuda swara lan nyetel sinyal luwih gampang tinimbang sadurunge.

Kita uga pengin matur nuwun marang Mukul Murthy lan Pranav Anand kanggo kontribusi kanggo artikel iki.

Artikel liyane ing seri iki:

Nyilem menyang Delta Lake: Unpacking Log Transaksi

Artikel sing gegandhengan

Pembelajaran mesin kelas produksi karo Delta Lake

Apa iku data lake?

Sinau luwih lengkap babagan kursus kasebut

Source: www.habr.com

Add a comment