Ganti nama dan hapus kolom dengan pemetaan kolom Delta Lake

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. name mode 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. id mode 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:

  1. Jeda semua operasi tulis bersamaan, termasuk pekerjaan streaming dan alur ETL.
  2. Nonaktifkan pengoptimalan prediktif pada tabel.
  3. 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.
  • schemaTrackingLocation harus berada di direktori checkpointLocation dari target penulisan streaming.
  • Untuk beban kerja yang dibaca dari beberapa tabel sumber, tentukan subdirektori unik di dalamnya checkpointLocation untuk 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:

  1. Menghentikan aliran
  2. Mengaktifkan pemetaan kolom pada tabel
  3. Mulai ulang aliran (mulai ulang pertama - menginisialisasi pemetaan kolom)
  4. 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:

Sumber daya tambahan