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.
Pemetaan kolom Delta Lake memungkinkan perubahan khusus metadata untuk mengganti nama atau menghilangkan kolom tanpa menulis ulang file data. Pemetaan kolom juga memungkinkan karakter yang tidak didukung oleh Parquet dalam nama kolom, seperti spasi, sehingga Anda dapat langsung menyerap data CSV atau JSON ke Delta Lake tanpa mengganti nama kolom.
Prasyarat
Sebelum mengaktifkan pemetaan kolom, tinjau Batasan.
Pemetaan kolom memerlukan hal berikut:
- Protokol delta: pembaca versi 2 atau lebih tinggi, dan penulis versi 5 atau lebih tinggi. Lihat Kompatibilitas dan protokol fitur Delta Lake.
- Membaca tabel dengan pemetaan kolom diaktifkan memerlukan Databricks Runtime 10.4 LTS ke atas
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.
Mengganti nama kolom
Saat pemetaan kolom diaktifkan untuk tabel Delta Lake, Anda bisa mengganti nama kolom:
ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name
Untuk contoh selengkapnya, lihat Memperbarui skema tabel dengan evolusi skema.
Hapus kolom
Saat pemetaan kolom diaktifkan untuk tabel Delta Lake, 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 dengan evolusi skema.
Mode pemetaan kolom
Properti delta.columnMapping.mode 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 perubahan nama dan penghapusan kolom hanya dengan metadata, serta mengizinkan 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 Lake, Anda dapat menyertakan spasi dan salah satu karakter ini dalam nama kolom: ,;{}()\n\t=.
Menghapus pemetaan kolom
Warning
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.
Anda bisa menghapus pemetaan kolom dari tabel menggunakan perintah berikut:
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')
Untuk menghapus pemetaan kolom dan menurunkan tingkat protokol tabel, lihat Mempertahankan kompatibilitas.
Pertahankan kompatibilitas
Di Databricks Runtime 15.4 LTS ke atas, Anda dapat menggunakan DROP FEATURE perintah untuk menghapus pemetaan kolom dan menurunkan tingkat protokol tabel, mempertahankan kompatibilitas dengan pembaca menggunakan Databricks Runtime 10.3 ke bawah.
Important
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
Perubahan skema non-aditif, seperti penggantian nama atau penghapusan kolom, dapat menyebabkan pembacaan streaming terganggu.
schemaTrackingLocation Gunakan untuk memungkinkan Delta Lake melacak perubahan skema dan mencegah kegagalan aliran.
Configuration
Saat mengonfigurasi schemaTrackingLocation:
- Setiap streaming yang dibaca dari tabel sumber harus memiliki
schemaTrackingLocation. -
schemaTrackingLocationharus berada di direktoricheckpointLocationdari target penulisan streaming. - Untuk beban kerja yang dibaca dari beberapa tabel sumber, tentukan subdirektori unik di dalamnya
checkpointLocationuntuk setiap sumber.
Untuk daftar lengkap opsi streaming Delta Lake, lihat Delta Lake.
Mengaktifkan pemetaan kolom pada aliran aktif
Untuk mengaktifkan pemetaan kolom pada pekerjaan streaming aktif:
- Menghentikan aliran
- Mengaktifkan pemetaan kolom pada tabel
- Mulai ulang aliran (mulai ulang pertama - menginisialisasi pemetaan kolom)
- Mulai ulang aliran lagi (mulai ulang kedua - mengaktifkan perubahan skema)
Setiap perubahan skema lebih lanjut (menambahkan atau menghilangkan kolom, atau mengubah jenis kolom) mengharuskan Anda untuk memulai ulang aliran.
Contoh
Untuk menentukan schemaTrackingLocation untuk pembacaan streaming dari tabel Delta Lake dengan pemetaan kolom, gunakan contoh berikut:
checkpoint_path = "/path/to/checkpointLocation"
(spark.readStream
.option("schemaTrackingLocation", checkpoint_path)
.table("delta_source_table")
.writeStream
.option("checkpointLocation", checkpoint_path)
.toTable("output_table")
)
Keterbatasan
Mengaktifkan pemetaan kolom mungkin merusak hal berikut:
- Beban kerja lama yang mengandalkan nama direktori untuk membaca tabel Delta Lake. Tabel yang dipartisi dengan pemetaan kolom menggunakan awalan acak alih-alih nama kolom untuk direktori partisi. Lihat Kompatibilitas pemartisian Delta Lake dan Parquet.
- Operasi hilir menggunakan umpan perubahan data. Lihat Tabel dengan pemetaan kolom.
- Streaming membaca dari tabel Delta Lake, termasuk di alur Lakeflow. Lihat Pemetaan kolom dan streaming.