Ganti nama dan letakkan kolom dengan pemetaan kolom Delta Lake

Penting

Fitur ini ada di Pratinjau Publik.

Azure Databricks mendukung pemetaan kolom untuk tabel Delta Lake, yang memungkinkan perubahan khusus metadata untuk menandai kolom sebagai dihapus atau diganti namanya tanpa menulis ulang file data. Ini juga memungkinkan pengguna untuk memberi nama kolom tabel Delta menggunakan karakter yang tidak diizinkan oleh Parquet, seperti spasi, sehingga pengguna dapat langsung menyerap data CSV atau JSON ke Delta tanpa perlu mengganti nama kolom karena batasan karakter sebelumnya.

Penting

Mengaktifkan pemetaan kolom juga memungkinkan awalan file acak, yang menghapus kemampuan untuk menjelajahi data menggunakan partisi gaya Apache Hive. Lihat Apakah Delta Lake dan Parquet berbagi strategi pemartisian?.

Mengaktifkan pemetaan kolom pada tabel mungkin memecah operasi hilir yang mengandalkan umpan data perubahan Delta. Lihat Mengubah batasan umpan data untuk tabel dengan pemetaan kolom diaktifkan.

Mengaktifkan pemetaan kolom pada tabel mungkin merusak streaming yang dibaca dari tabel Delta sebagai sumber, termasuk di Tabel Langsung Delta. Untuk detailnya, lihat Streaming dengan pemetaan kolom dan perubahan skema.

Cara mengaktifkan pemetaan kolom Delta Lake

Penting

Mengaktifkan pemetaan kolom untuk tabel meningkatkan versi tabel Delta. Peningkatan protokol ini tidak dapat diubah. Tabel dengan pemetaan kolom yang diaktifkan hanya dapat dibaca di Databricks Runtime 10.4 LTS ke atas.

Pemetaan kolom memerlukan protokol Delta berikut:

  • Pembaca versi 2 atau lebih tinggi.
  • Penulis versi 5 atau lebih tinggi.

Untuk tabel Delta dengan versi protokol yang diperlukan, Anda dapat mengaktifkan pemetaan kolom dengan mengatur delta.columnMapping.mode ke name.

Anda dapat menggunakan perintah berikut untuk meningkatkan versi tabel dan mengaktifkan pemetaan kolom:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '2',
    'delta.minWriterVersion' = '5',
    'delta.columnMapping.mode' = 'name'
  )

Catatan

Anda tidak dapat menonaktifkan pemetaan kolom setelah mengaktifkannya. Jika Anda mencoba mengatur 'delta.columnMapping.mode' = 'none', Anda akan mendapatkan kesalahan.

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 Delta Lake.

Hilangkan 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 Delta Lake.

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 tabel: ,;{}()\n\t=.

Streaming dengan pemetaan kolom dan perubahan skema

Penting

Fitur ini ada di Pratinjau Umum di Databricks Runtime 13.3 LTS ke atas.

Anda dapat menyediakan lokasi pelacakan skema untuk mengaktifkan streaming dari tabel Delta dengan pemetaan kolom diaktifkan. Ini mengatasi masalah di mana perubahan skema non-aditif dapat mengakibatkan aliran rusak.

Setiap streaming yang dibaca terhadap sumber data harus memiliki yang ditentukan sendiri schemaTrackingLocation . Yang ditentukan schemaTrackingLocation harus dimuat dalam direktori yang ditentukan untuk checkpointLocation tabel target untuk penulisan streaming.

Catatan

Untuk beban kerja streaming yang menggabungkan data dari beberapa tabel Delta sumber, Anda perlu menentukan direktori unik dalam checkpointLocation untuk setiap tabel sumber.

Opsi schemaTrackingLocation ini digunakan untuk menentukan jalur untuk pelacakan skema, seperti yang ditunjukkan dalam contoh kode berikut:

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)