Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Halaman ini menjelaskan bagaimana pemetaan kolom Delta Lake memungkinkan perubahan khusus metadata untuk menandai kolom sebagai dihapus atau diganti namanya tanpa menulis ulang file data.
Azure Databricks mendukung pemetaan kolom untuk tabel Delta Lake. Pemetaan kolom memungkinkan perubahan khusus metadata untuk menandai kolom sebagai dihapus atau diganti namanya tanpa menulis ulang file data. Pemetaan kolom juga memungkinkan Anda menggunakan karakter yang tidak diizinkan oleh Parquet dalam nama kolom, seperti spasi. Ini memungkinkan Anda untuk langsung menyerap data CSV atau JSON ke Delta tanpa mengganti nama kolom.
Prasyarat dan batasan
Sebelum mengaktifkan pemetaan kolom, pahami batasan berikut:
- Tabel dengan pemetaan kolom yang diaktifkan hanya dapat dibaca di Databricks Runtime 10.4 LTS ke atas
- Mengaktifkan pemetaan kolom dapat menyebabkan masalah:
- Beban kerja warisan yang mengandalkan nama direktori untuk membaca tabel Delta. Tabel yang dipartisi dengan pemetaan kolom menggunakan awalan acak alih-alih nama kolom untuk direktori partisi. Lihat Apakah Delta Lake dan Parquet berbagi strategi pemartisian?.
- Operasi hilir menggunakan umpan data perubahan Delta. Lihat Mengubah batasan umpan data untuk tabel dengan pemetaan kolom.
- Pembacaan streaming dari tabel Delta, termasuk dalam Alur Deklaratif Lakeflow Spark. Lihat Pemetaan kolom dan streaming.
Mengaktifkan pemetaan kolom
Gunakan perintah berikut untuk mengaktifkan pemetaan kolom dengan id mode pada tabel baru:
CREATE table <table-name> (
id INT,
name STRING
)
USING DELTA
TBLPROPERTIES (
'delta.columnMapping.mode' = 'id'
);
Gunakan perintah berikut untuk mengaktifkan pemetaan kolom dengan name mode pada tabel yang sudah ada:
ALTER TABLE <table-name> SET TBLPROPERTIES (
'delta.columnMapping.mode' = 'name'
)
Untuk detail tentang mode pemetaan kolom, lihat Mode pemetaan kolom.
Pemetaan kolom memerlukan protokol Delta berikut:
- Pembaca versi 2 atau lebih tinggi
- Versi Writer 5 atau lebih tinggi
Lihat Kompatibilitas dan protokol fitur Delta Lake.
Mengganti nama kolom
Catatan
Tersedia di Databricks Runtime 10.4 LTS ke atas.
Saat pemetaan kolom diaktifkan untuk tabel Delta, Anda dapat mengganti nama kolom:
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
Untuk contoh selengkapnya, lihat Memperbarui skema tabel.
Hapus kolom
Catatan
Tersedia di Databricks Runtime 11.3 LTS ke atas.
Saat pemetaan kolom diaktifkan untuk tabel Delta, Anda bisa menghilangkan satu atau beberapa kolom:
ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)
Untuk detail selengkapnya, lihat Memperbarui skema tabel.
Mode pemetaan kolom
delta.columnMapping.mode Kontrol properti tabel memungkinkan perubahan khusus metadata untuk menandai kolom sebagai dihapus atau diganti namanya tanpa menulis ulang file data. Mode berikut tersedia:
-
none(default): Pemetaan kolom tidak diaktifkan. Nama kolom tunduk pada batasan penamaan Parquet. -
name: Ini memungkinkan perubahan nama dan penghapusan kolom hanya dengan metadata, serta mengizinkan penggunaan karakter khusus dalam nama kolom.namemode dapat diatur pada tabel baru dan yang sudah ada. -
id: Ini memungkinkan penggantian nama dan penghapusan kolom yang hanya terkait metadata, serta penggunaan karakter khusus dalam nama kolom.idmode harus diatur pada pembuatan tabel dan tidak dapat diatur pada tabel yang ada.
Catatan
Databricks merekomendasikan mode id untuk sebagian besar kasus penggunaan untuk tujuan kompatibilitas. Namun, name mode secara otomatis diatur jika Anda tidak memberikan nilai untuk delta.columnMapping.mode dan Anda mengaktifkan fitur kompatibilitas Iceberg seperti UniForm.
Karakter yang didukung dalam nama kolom
Saat pemetaan kolom diaktifkan untuk tabel Delta, Anda dapat menyertakan spasi dan salah satu karakter ini dalam nama kolom: ,;{}()\n\t=.
Menghapus pemetaan kolom
Anda bisa menghapus pemetaan kolom dari tabel menggunakan perintah berikut:
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')
Peringatan
Menghapus pemetaan kolom menulis ulang semua file data untuk mengganti nama kolom fisik dengan nama logis. Operasi ini tidak mendukung resolusi konflik tingkat baris atau fisik.
Operasi tulis bersamaan akan menyebabkan ConcurrentModificationException. Sebelum menghapus pemetaan kolom:
- Jeda semua operasi tulis bersamaan, termasuk pekerjaan streaming dan alur ETL.
- Nonaktifkan pengoptimalan prediktif pada tabel.
- Untuk tabel besar, jadwalkan operasi ini selama periode aktivitas rendah.
Untuk pendekatan alternatif yang mendukung penurunan protokol tabel, lihat Menonaktifkan pemetaan kolom.
Menonaktifkan pemetaan kolom
Di Databricks Runtime 15.3 ke atas, Anda dapat menggunakan DROP FEATURE perintah untuk menghapus pemetaan kolom dan menurunkan tingkat protokol tabel. Gunakan pendekatan ini alih-alih menghapus pemetaan kolom jika Anda perlu menurunkan versi protokol untuk kompatibilitas dengan pembaca yang lebih lama.
Penting
Menghilangkan pemetaan kolom dari tabel tidak menghapus awalan acak yang digunakan dalam nama direktori untuk tabel yang dipartisi.
Lihat Menghilangkan fitur tabel Delta Lake dan menurunkan protokol tabel.
Pemetaan kolom dan streaming
Anda dapat menyediakan lokasi pelacakan skema untuk mengaktifkan streaming dari tabel Delta dengan pemetaan kolom yang diaktifkan. Ini mengatasi masalah di mana perubahan skema non-aditif dapat mengakibatkan aliran rusak.
Setiap pembacaan streaming terhadap sumber data harus memiliki schemaTrackingLocation yang ditentukan sendiri. Yang ditentukan schemaTrackingLocation harus berada di direktori yang ditentukan untuk checkpointLocation tabel target dalam penulisan streaming. Untuk beban kerja streaming yang menggabungkan data dari beberapa tabel Delta sumber, Anda harus menentukan direktori unik dalam checkpointLocation untuk setiap tabel sumber.
Mengaktifkan pemetaan kolom pada pekerjaan yang sedang berjalan
Penting
Untuk mengaktifkan pemetaan kolom pada pekerjaan streaming yang sedang berjalan:
- Hentikan pekerjaan
- Mengaktifkan pemetaan kolom pada tabel
- Mulai ulang pekerjaan (mulai ulang pertama - menginisialisasi pemetaan kolom)
- Mulai ulang pekerjaan lagi (mulai ulang kedua - mengaktifkan perubahan skema)
Setiap perubahan skema lebih lanjut (menambahkan atau menghilangkan kolom, mengubah jenis kolom) juga memerlukan memulai ulang pekerjaan.
Tentukan lokasi pelacakan skema
Contoh berikut menunjukkan cara menentukan schemaTrackingLocation untuk membaca aliran dari tabel Delta dengan pemetaan kolom.
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)