Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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şlemesi etkinleştirilmiş tablolar yalnızca Databricks Runtime 10.4 LTS ve üzerinde okunabilir
- Sütun eşlemesi etkinleştirildiğinde şu hatalara neden olabilir:
- Delta tablolarını okumak için dizin adlarını kullanan eski iş yükleri. Sütun eşlemeli bölümlenmiş tablolar, bölüm dizinleri için sütun adları yerine rastgele önekler kullanır. Bkz . Delta Lake ve Parquet bölümleme stratejilerini paylaşıyor mu?.
- Delta değişiklik veri akışını kullanan alt işlemler. Bkz . Sütun eşlemeli tablolar için veri akışı sınırlamalarını değiştirme.
- Akış, Lakeflow Spark Bildirimli İşlem Hatları da dahil olmak üzere Delta tablosundan okur. Bkz. Sütun eşleme ve akış.
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.namemodu 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.idmodu 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:
- Tüm eşzamanlı yazma işlemlerini, akış işleri ve ETL işlem hatları da dahil olmak üzere, duraklatın.
- Tabloda tahmine dayalı iyileştirmeyi devre dışı bırakın.
- 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:
- İşi durdurma
- Tabloda sütun eşlemeyi etkinleştirme
- İşi yeniden başlatın (ilk yeniden başlatma - sütun eşlemesini başlatır)
- İş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")
)