Penyelaman Danau Delta: Penegakan Skema dan Evolusi

Hei Habr! Untuk perhatian Anda, saya persembahkan terjemahan artikel tersebut "Menyelam ke Danau Delta: Penegakan Skema & Evolusi" oleh Burak Yavuz, Brenner Heintz dan Denny Lee, yang disiapkan untuk mengantisipasi peluncuran kursus Insinyur Data dari OTUS.

Penyelaman Danau Delta: Penegakan Skema dan Evolusi

Data, seperti pengalaman kita, terus terakumulasi dan berkembang. Agar dapat mengimbanginya, model mental kita tentang dunia harus beradaptasi dengan data baru, yang beberapa di antaranya mengandung dimensi baru—cara baru dalam mengamati hal-hal yang sebelumnya tidak kita ketahui. Model mental ini serupa dengan skema dalam spreadsheet yang menentukan cara kita mengklasifikasikan dan memproses informasi baru.

Hal ini membawa kita pada isu manajemen skema. Seiring berkembangnya tujuan dan persyaratan bisnis seiring waktu, struktur data Anda pun ikut berkembang. Delta Lake memudahkan pengenalan dimensi baru seiring perubahan data. Pengguna memiliki akses ke semantik sederhana untuk mengelola skema tabel mereka. Alat-alat ini mencakup Schema Enforcement, yang melindungi pengguna agar tabel mereka tidak berantakan secara tidak sengaja dengan kesalahan atau data yang tidak perlu, dan Schema Evolution, yang secara otomatis menambahkan kolom baru berisi data penting di lokasi yang tepat. Dalam artikel ini, kita akan membahas lebih lanjut tentang penggunaan alat-alat ini.

Memahami skema tabel

Setiap DataFrame di Apache Spark berisi skema yang mendefinisikan bentuk data, seperti tipe data, kolom, dan metadata. Dengan Delta Lake, skema tabel disimpan dalam format JSON di dalam log transaksi.

Apa itu penegakan skema?

Schema Enforcement, juga dikenal sebagai Schema Validation, adalah mekanisme keamanan di Delta Lake yang memastikan kualitas data dengan menolak rekaman yang tidak sesuai dengan skema tabel. Layaknya seorang pramusaji di restoran populer yang hanya menerima reservasi, Schema Enforcement memeriksa apakah setiap kolom data yang dimasukkan ke dalam tabel berada dalam daftar kolom yang diharapkan (dengan kata lain, apakah ada "reservasi" untuk setiap kolom) dan menolak rekaman apa pun dengan kolom yang tidak ada dalam daftar.

Bagaimana cara kerja penegakan skema?

Delta Lake menggunakan pemeriksaan skema saat penulisan, yang berarti semua penulisan baru ke tabel diperiksa kompatibilitasnya dengan skema tabel target pada saat penulisan. Jika skema tidak kompatibel, Delta Lake akan membatalkan transaksi sepenuhnya (tidak ada data yang ditulis) dan memunculkan pengecualian untuk memberi tahu pengguna tentang ketidakkonsistenan tersebut.
Delta Lake menggunakan aturan berikut untuk menentukan apakah suatu record kompatibel dengan suatu tabel. DataFrame yang sedang ditulis:

  • Tabel tersebut tidak boleh berisi kolom tambahan yang tidak ada dalam skema tabel target. Sebaliknya, tidak masalah jika data yang masuk tidak berisi semua kolom dari tabel—kolom-kolom tersebut hanya akan diberi nilai null.
  • Tipe data kolom tidak boleh berbeda dengan tipe data kolom di tabel target. Jika kolom di tabel target berisi data StringType, tetapi kolom terkait di DataFrame berisi data IntegerType, penerapan skema akan memunculkan pengecualian dan mencegah operasi tulis terjadi.
  • Nama kolom tidak boleh berisi nama yang hanya berbeda huruf besar/kecil. Ini berarti Anda tidak dapat mendefinisikan kolom bernama 'Foo' dan 'foo' dalam tabel yang sama. Meskipun Spark dapat digunakan dalam pengaturan peka huruf besar/kecil atau tidak peka huruf besar/kecil (secara default), Delta Lake mempertahankan huruf besar/kecil tetapi tidak peka huruf besar/kecil saat menyimpan skema. Parquet peka huruf besar/kecil saat menyimpan dan mengambil informasi kolom. Untuk menghindari potensi kesalahan, kerusakan data, atau kehilangan data (yang pernah kami alami sendiri di Databricks), kami memutuskan untuk menambahkan batasan ini.

Untuk mengilustrasikan hal ini, mari kita lihat apa yang terjadi pada kode di bawah saat kita mencoba menambahkan beberapa kolom yang baru dibuat ke tabel Delta Lake yang belum dikonfigurasi untuk menerimanya.

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

Alih-alih menambahkan kolom baru secara otomatis, Delta Lake menerapkan skema dan berhenti menulis. Untuk membantu menentukan kolom (atau kumpulan kolom) mana yang menyebabkan perbedaan, Spark menampilkan kedua skema dari jejak tumpukan untuk perbandingan.

Apa manfaat menegakkan skema tersebut?

Karena penegakan skema merupakan pemeriksaan yang cukup ketat, ini merupakan alat yang sangat baik untuk digunakan sebagai penjaga gerbang menuju kumpulan data yang bersih dan telah ditransformasi sepenuhnya, siap untuk produksi atau konsumsi. Ini biasanya diterapkan pada tabel yang secara langsung memasukkan data:

  • Algoritma pembelajaran mesin
  • Dasbor BI
  • Alat analisis data dan visualisasi
  • Sistem produksi apa pun yang memerlukan skema semantik yang terstruktur dan diketik secara ketat.

Untuk mempersiapkan data mereka menghadapi rintangan terakhir ini, banyak pengguna menggunakan arsitektur "multi-hop" sederhana yang secara bertahap memperkenalkan struktur ke dalam tabel mereka. Untuk informasi selengkapnya, Anda dapat membaca artikel Pembelajaran mesin tingkat produksi dengan Delta Lake.

Tentu saja, Anda dapat menggunakan penegakan skema di mana saja dalam alur kerja Anda, tetapi ingatlah bahwa menulis ke tabel dalam kasus ini dapat membuat frustrasi, misalnya, karena Anda lupa bahwa Anda menambahkan kolom lain ke data yang masuk.

Mencegah pencairan data

Pada titik ini, Anda mungkin bertanya-tanya apa sebenarnya keributan ini? Lagipula, terkadang kesalahan "ketidakcocokan skema" yang tidak terduga dapat mengacaukan alur kerja Anda, terutama jika Anda baru menggunakan Delta Lake. Mengapa tidak membiarkan skema berubah sesuai kebutuhan agar saya dapat menulis DataFrame saya apa pun yang terjadi?

Seperti kata pepatah lama, "mencegah lebih baik daripada mengobati." Pada titik tertentu, jika Anda tidak berhati-hati dalam menegakkan skema, masalah kompatibilitas tipe data akan muncul—sumber data mentah yang tampak homogen mungkin berisi kasus-kasus khusus, kolom yang rusak, pemetaan yang salah bentuk, atau masalah serius lainnya. Pendekatan terbaik adalah menghentikan musuh-musuh ini sejak awal—dengan penegakan skema—dan menanganinya secara terbuka, alih-alih nanti, ketika mereka mulai mengintai di kedalaman kode produksi Anda yang gelap.

Penerapan skema memastikan bahwa skema tabel Anda tidak akan berubah kecuali Anda secara eksplisit menyetujui perubahan tersebut. Hal ini mencegah pengenceran data, yang dapat terjadi ketika kolom baru ditambahkan begitu sering sehingga tabel yang sebelumnya berharga dan ringkas kehilangan makna dan kegunaannya karena banjir data. Dengan mendorong Anda untuk bertindak secara sengaja, menetapkan standar yang tinggi, dan mengharapkan kualitas yang tinggi, penerapan skema melakukan persis seperti yang seharusnya—membantu Anda menjaga integritas dan menjaga tabel Anda tetap bersih.

Jika setelah pertimbangan lebih lanjut Anda memutuskan bahwa Anda benar-benar melakukannya untuk Menambahkan kolom baru bukan masalah; solusi satu baris disediakan di bawah ini. Solusinya adalah evolusi skema!

Apa itu evolusi skema?

Evolusi skema adalah fitur yang memungkinkan pengguna untuk dengan mudah memodifikasi skema tabel saat ini agar sesuai dengan perubahan data seiring waktu. Fitur ini paling umum digunakan selama operasi penyisipan atau penulisan ulang untuk secara otomatis menyesuaikan skema agar mencakup satu atau beberapa kolom baru.

Bagaimana evolusi skema bekerja?

Mengikuti contoh dari bagian sebelumnya, pengembang dapat dengan mudah menggunakan evolusi skema untuk menambahkan kolom baru yang sebelumnya ditolak karena ketidakpatuhan skema. Evolusi skema diaktifkan dengan menambahkan .option('mergeSchema', 'true') ke tim Spark Anda .write или .writeStream.

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

Untuk melihat grafik, jalankan kueri Spark SQL berikut

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

Penyelaman Danau Delta: Penegakan Skema dan Evolusi
Atau, Anda dapat mengatur opsi ini untuk seluruh sesi Spark dengan menambahkan spark.databricks.delta.schema.autoMerge = True ke dalam konfigurasi Spark. Namun, gunakan ini dengan hati-hati, karena penerapan skema tidak akan lagi memperingatkan Anda tentang inkonsistensi skema yang tidak disengaja.

Dengan memasukkan parameter dalam permintaan mergeSchemaSemua kolom yang ada di DataFrame tetapi hilang dari tabel target akan otomatis ditambahkan ke skema selama transaksi penulisan. Kolom bersarang juga dapat ditambahkan, dan kolom tersebut juga akan ditambahkan ke kolom terkait dalam struktur.

Insinyur data dan ilmuwan dapat menggunakan opsi ini untuk menambahkan kolom baru (mungkin metrik yang baru dilacak atau kolom angka penjualan untuk bulan ini) ke tabel produksi pembelajaran mesin yang ada tanpa merusak model yang ada berdasarkan kolom lama.

Jenis perubahan skema berikut diizinkan sebagai bagian dari evolusi skema selama penyisipan atau penulisan ulang tabel:

  • Menambahkan kolom baru (ini adalah skenario yang paling umum)
  • Mengubah tipe data dari NullType -> tipe lain atau mempromosikan dari ByteType -> ShortType -> IntegerType

Perubahan lain yang tidak diperbolehkan dalam evolusi skema memerlukan skema dan data untuk ditimpa dengan menambahkan .option("overwriteSchema", "true")Misalnya, jika kolom "Foo" awalnya berupa integer, dan skema baru bertipe string, maka semua berkas Parquet (data) perlu ditulis ulang. Perubahan tersebut meliputi:

  • menghapus kolom
  • mengubah tipe data kolom yang ada (di tempat)
  • mengganti nama kolom yang hanya berbeda dalam huruf besar/kecil (misalnya "Foo" dan "foo")

Akhirnya, dengan rilis berikutnya, Spark 3.0, DDL eksplisit (menggunakan ALTER TABLE) akan didukung sepenuhnya, yang memungkinkan pengguna untuk melakukan tindakan berikut pada skema tabel:

  • menambahkan kolom
  • mengubah komentar kolom
  • Menetapkan properti tabel yang menentukan bagaimana tabel berperilaku, seperti menetapkan periode penyimpanan log transaksi.

Apa manfaat evolusi skema?

Evolusi skema dapat digunakan kapan saja Anda bermaksud untuk Ubah skema tabel Anda (bukan menambahkan kolom yang seharusnya tidak ada ke DataFrame secara tidak sengaja). Ini adalah cara termudah untuk memigrasikan skema Anda karena secara otomatis menambahkan nama kolom dan tipe data yang tepat tanpa perlu mendeklarasikannya secara eksplisit.

Kesimpulan

Penerapan skema menolak kolom baru atau perubahan skema lain yang tidak kompatibel dengan tabel Anda. Dengan menetapkan dan mempertahankan standar tinggi ini, analis dan teknisi dapat yakin bahwa data mereka memiliki tingkat integritas tertinggi, menganalisisnya secara jelas dan ringkas, sehingga memungkinkan mereka membuat keputusan bisnis yang lebih efektif.

Di sisi lain, evolusi skema ini melengkapi penegakan hukum dengan menyederhanakan diduga Perubahan skema otomatis. Lagipula, menambahkan kolom seharusnya tidak sesulit itu.

Penegakan sirkuit adalah yin dari evolusi sirkuit. Jika digabungkan, fitur-fitur ini membuat peredaman derau dan penyetelan sinyal lebih mudah dari sebelumnya.

Kami juga ingin mengucapkan terima kasih kepada Mukul Murthy dan Pranav Anand atas kontribusinya pada artikel ini.

Artikel lain dalam seri ini:

Menyelami Delta Lake: Membongkar Log Transaksi

Putar video

Artikel Terkait

Pembelajaran mesin tingkat produksi dengan Delta Lake

Apa itu danau data?

Pelajari lebih lanjut tentang kursus ini

Sumber: www.habr.com

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster