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

Önemli

Bu özellik Genel Önizlemededir.

Azure Databricks, Delta Lake tabloları için sütun eşlemeyi destekler. Bu, 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. Ayrıca, kullanıcıların önceki karakter kısıtlamaları nedeniyle sütunları yeniden adlandırmaya gerek kalmadan CSV veya JSON verilerini doğrudan Delta'ya alabilmesi için, kullanıcıların Parquet tarafından izin verilmeyen karakterleri kullanarak Delta tablo sütunlarını adlandırmasına da olanak tanır.

Önemli

Sütun eşlemeyi etkinleştirmek, Hive stili bölümleme kullanarak verileri keşfetme özelliğini kaldıran rastgele dosya ön eklerini de etkinleştirir. Bkz . Delta Lake ve Parquet bölümleme stratejilerini paylaşıyor mu?.

Tablolarda sütun eşlemeyi etkinleştirmek, Delta değişiklik veri akışını kullanan aşağı akış işlemlerini bölebilir. Bkz . Sütun eşlemesi etkin tablolar için veri akışı sınırlamalarını değiştirme.

Tablolarda sütun eşlemenin etkinleştirilmesi Delta tablosundan kaynak olarak okuma akışını kesebilir ve Delta Live Tables'da da buna dahil olabilir. Bkz. Sütun eşleme ve şema değişiklikleriyle akış yapma.

Delta Lake sütun eşlemesini etkinleştirme

Önemli

Tablo için sütun eşleme etkinleştirildiğinde Delta tablosu sürümü yükseltildi. Bu protokol yükseltmesi geri alınamaz. Sütun eşlemesi etkinleştirilmiş tablolar yalnızca Databricks Runtime 10.4 LTS ve üzerinde okunabilir.

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.

Gerekli protokol sürümlerine sahip bir Delta tablosu için olarak ayarlayarak delta.columnMapping.mode sütun eşlemesini nameetkinleştirebilirsiniz.

Tablo sürümünü yükseltmek ve sütun eşlemesini etkinleştirmek için aşağıdaki komutu kullanabilirsiniz:

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

Not

Sütun eşlemeyi etkinleştirdikten sonra kapatamazsınız. ayarlamaya 'delta.columnMapping.mode' = 'none'çalışırsanız bir hata alırsınız.

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 . Delta Lake tablo şemasını güncelleştirme.

Sütunları bırakma

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 . Delta Lake tablo şemasını güncelleştirme.

Sütun adlarında desteklenen karakterler

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

Sütun eşlemesi ve şema değişiklikleriyle akış

Önemli

Bu özellik Databricks Runtime 13.3 LTS ve üzerinde Genel Önizleme aşamasındadır.

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.

Bir veri kaynağına karşı okunan her akışın kendi schemaTrackingLocation belirtilmiş olması gerekir. Belirtilen schemaTrackingLocation , akış yazma için hedef tablo için checkpointLocation belirtilen dizin içinde bulunmalıdır.

Not

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.

seçeneği schemaTrackingLocation , aşağıdaki kod örneğinde gösterildiği gibi şema izleme yolunu belirtmek için kullanılır:

checkpoint_path = "/path/to/checkpointLocation"

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