Delta Lake sütun eşlemesi ile sütunları yeniden adlandırma ve silme

Bu sayfada Delta Lake sütun eşlemenin, veri dosyalarını yeniden yazmadan sütunları silinmiş veya yeniden adlandırılmış olarak işaretlemek için yalnızca meta veri değişikliklerini nasıl etkinleştirdiği açıklanmaktadır.

Azure Databricks, Delta Lake tabloları için sütun eşlemeyi destekler. Sütun eşlemesi, veri dosyalarını yeniden yazmadan sütunları silinmiş veya yeniden adlandırılmış olarak işaretlemek için yalnızca meta veri değişikliklerini etkinleştirir. Sütun eşlemesi, boşluk gibi sütun adlarında Parquet tarafından izin verilmeyen karakterleri kullanmanıza da olanak tanır. Bu, sütunları yeniden adlandırmadan CSV veya JSON verilerini doğrudan Delta'ya almanıza olanak tanır.

Önkoşullar ve sınırlamalar

Sütun eşlemeyi etkinleştirmeden önce aşağıdaki sınırlamaları anlayın:

Sütun eşlemesini etkinleştir

Yeni bir tabloda modla id sütun eşlemeyi etkinleştirmek için aşağıdaki komutu kullanın:

CREATE table <table-name> (
  id INT,
  name STRING
)
USING DELTA
TBLPROPERTIES (
  'delta.columnMapping.mode' = 'id'
);

Mevcut bir tabloda modla name sütun eşlemeyi etkinleştirmek için aşağıdaki komutu kullanın:

ALTER TABLE <table-name> SET TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name'
)

Sütun eşleme modları hakkında ayrıntılı bilgi için bkz. Sütun eşleme modları.

Sütun eşlemesi için aşağıdaki Delta protokolleri gerekir:

  • Okuyucu sürüm 2 veya üzeri
  • Yazıcı sürüm 5 veya üzeri

Bkz . Delta Lake özellik uyumluluğu ve protokolleri.

Sütunu yeniden adlandırma

Not

Databricks Runtime 10.4 LTS ve üzerinde kullanılabilir.

Delta tablosu için sütun eşleme etkinleştirildiğinde sütunu yeniden adlandırabilirsiniz:

ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

Daha fazla örnek için bkz. Tablo şemasını güncelleştirme.

Sütunları bırak

Not

Databricks Runtime 11.3 LTS ve üzerinde kullanılabilir.

Delta tablosu için sütun eşleme etkinleştirildiğinde, bir veya daha fazla sütun bırakabilirsiniz:

ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

Diğer ayrıntılar için bkz. Tablo şemasını güncelleştirme.

Sütun eşleme modları

delta.columnMapping.mode Tablo özelliği denetimleri, veri dosyalarını yeniden yazmadan sütunları silinmiş veya yeniden adlandırılmış olarak işaretlemek için yalnızca meta veri değişikliklerini etkinleştirir. Aşağıdaki modlar kullanılabilir:

  • none (varsayılan): Sütun eşleme etkin değil. Sütun adları Parquet adlandırma kısıtlamalarına tabidir.
  • name: Bu, yalnızca meta veri sütunlarının yeniden adlandırılmasını ve bırakılmasını sağlar ve sütun adlarında özel karakterlere izin verir. name modu yeni ve mevcut tablolarda ayarlanabilir.
  • id: Bu, yalnızca meta veri sütunlarının yeniden adlandırılmasını ve bırakılmasını sağlar ve sütun adlarında özel karakterlere izin verir. id modu tablo oluşturmada ayarlanmalıdır ve mevcut tablolarda ayarlanamaz.

Not

Databricks, uyumluluk amacıyla çoğu kullanım örneğinde modu önerir id . Ancak, name için bir değer delta.columnMapping.mode sağlamazsanız ve UniForm gibi Iceberg uyumluluk özelliklerini etkinleştirirseniz mod otomatik olarak ayarlanır.

Sütun adlarında desteklenen karakterler

Delta tablosu için sütun eşleme etkinleştirildiğinde, sütun adlarında boşluklar ve şu karakterlerden herhangi birini ekleyebilirsiniz: ,;{}()\n\t=.

Sütun eşlemesini kaldırma

Aşağıdaki komutu kullanarak tablodan sütun eşlemesini kaldırabilirsiniz:

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')

Uyarı

Sütun eşlemesini kaldırmak, fiziksel sütun adlarını mantıksal adlarla değiştirmek için tüm veri dosyalarını yeniden yazar. Bu işlem satır düzeyi veya fiziksel çakışma çözümünü desteklemez.

Eşzamanlı yazma işlemleri bir ConcurrentModificationException neden olur. Kolon eşlemesini kaldırmadan önce:

  1. Tüm eşzamanlı yazma işlemlerini, akış işleri ve ETL işlem hatları da dahil olmak üzere, duraklatın.
  2. Tabloda tahmine dayalı iyileştirmeyi devre dışı bırakın.
  3. Büyük tablolar için bu işlemi düşük etkinlik dönemlerinde zamanlayın.

Tablo protokolünün sürümünü düşürmeyi destekleyen alternatif bir yaklaşım için bkz. Sütun eşlemeyi devre dışı bırakma.

Sütun eşlemeyi devre dışı bırak

Databricks Runtime 15.3 ve üzeri sürümlerde sütun eşlemesini kaldırmak ve tablo protokollerini DROP FEATURE düşürmek için komutunu kullanabilirsiniz. Eski okuyucularla uyumluluk için protokol sürümlerini düşürmeniz gerekiyorsa sütun eşlemesini kaldırmak yerine bu yaklaşımı kullanın.

Önemli

Tablodaki sütun eşlemesi bırakıldığında bölümlenmiş tablolar için dizin adlarında kullanılan rastgele ön ekler kaldırılamaz.

Bkz . Delta Lake tablosu özelliğini bırakma ve tablo protokolünü düşürme.

Sütun eşleme ve akış

Sütun eşlemesi etkin delta tablolarından akışı etkinleştirmek için bir şema izleme konumu sağlayabilirsiniz. Bu, eksiz şema değişikliklerinin bozuk akışlara neden olabileceği bir sorunun üstesinden gelir.

Veri kaynağına karşı yapılan her akış okuma için kendi schemaTrackingLocation'sinin belirtilmiş olması gerekir. Belirtilen schemaTrackingLocation, akış yazma için hedef tabloya ilişkin belirtilen checkpointLocation dizini içinde yer almalıdır. Birden çok kaynak Delta tablosundaki verileri birleştiren akış iş yükleri için, her kaynak tablo için içinde checkpointLocation benzersiz dizinler belirtmeniz gerekir.

Çalışan bir işte sütun eşlemesini etkinleştirme

Önemli

Çalışan bir akış işinde sütun eşlemeyi etkinleştirmek için:

  1. İşi durdurma
  2. Tabloda sütun eşlemeyi etkinleştirme
  3. İşi yeniden başlatın (ilk yeniden başlatma - sütun eşlemesini başlatır)
  4. İşi yeniden başlatın (ikinci yeniden başlatma - şema değişikliklerini etkinleştirir)

Diğer tüm şema değişiklikleri (sütun ekleme veya bırakma, sütun türlerini değiştirme) işin yeniden başlatılmasını da gerektirir.

Şema izleme konumunu belirtme

Aşağıdaki örnek, sütun eşlemesiyle Delta tablosundan yapılan bir akış okuması için schemaTrackingLocation'ün nasıl belirtileceğini gösterir.

checkpoint_path = "/path/to/checkpointLocation"

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

Sonraki Adımlar