Aracılığıyla paylaş


Veri türü genişletme

Önemli

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

Tür genişletme özelliği etkinleştirilmiş tablolar, temel alınan veri dosyalarını yeniden yazmadan sütun veri türlerini daha geniş bir türe dönüştürmenizi sağlar. Sütun türlerini el ile değiştirebilir veya sütun türlerini geliştirmek için şema evrimi kullanabilirsiniz.

Önemli

Tür genişletme, Databricks Runtime 15.4 LTS ve üzerinde kullanılabilir. Tür genişletmesi etkinleştirilmiş tablolar yalnızca Databricks Runtime 15.4 LTS ve üzerinde okunabilir.

Tür genişletme Delta Lake gerektirir. Unity Kataloğu tarafından yönetilen tüm tablolarda varsayılan olarak Delta Lake kullanılır.

Desteklenen tür değişiklikleri

Türleri aşağıdaki kurallara göre genişletebilirsiniz:

Kaynak türü Desteklenen daha geniş türler
byte short, int, long, decimal, , double
short int, long, decimal, double
int long, decimal, double
long decimal
float double
decimal decimal daha yüksek hassasiyet ve ölçekle
date timestampNTZ

Tamsayı değerlerini yanlışlıkla ondalıklara yükseltmekten kaçınmak için tür değişikliklerini , byte, short veya int türlerinden long veya decimal türüne double gerekir. Bir tamsayı türünü decimal veya double değerine yükseltme sırasında, eğer aşağı akış alımı bu değeri bir tamsayı sütununa geri yazarsa, Spark varsayılan olarak değerlerin kesirli kısmını kırpar.

Uyarı

Herhangi bir sayısal türü decimalolarak değiştirirken, toplam duyarlık başlangıç duyarlığına eşit veya bundan büyük olmalıdır. Ölçeği de artırırsanız, toplam kesinlik aynı oranda artmalıdır.

byte, shortve int türleri için en düşük hedef decimal(10,0). long için asgari hedef decimal(20,0).

decimal(10,1)olan bir alana iki ondalık basamak eklemek istiyorsanız, en düşük hedef decimal(12,3).

Tür değişiklikleri yapıların, haritaların ve dizilerin içinde iç içe yerleştirilmiş en üst düzey sütunlar ve alanlar için desteklenir.

Tür genişletmeyi etkinleştirme

delta.enableTypeWidening tablo özelliğini trueolarak ayarlayarak var olan bir tabloda tür genişletmeyi etkinleştirebilirsiniz:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')

Tablo oluşturma sırasında tür genişletmeyi de etkinleştirebilirsiniz:

  CREATE TABLE T(c1 INT) TBLPROPERTIES('delta.enableTypeWidening' = 'true')

Önemli

Tür genişletmeyi etkinleştirdiğinizde, okuyucu ve yazıcı protokollerini yükselten typeWideningtablo özelliğini ayarlar. Tür genişletme etkinleştirilmiş tablolarla etkileşime geçmek için Databricks Runtime 15.4 veya üzerini kullanmanız gerekir. Dış istemciler de tabloyla etkileşime geçiyorsa, bu tablo özelliğini desteklediklerini doğrulayın. Bkz . Delta Lake özellik uyumluluğu ve protokolleri.

Tür değişikliğini el ile uygulama

ALTER COLUMN Türleri el ile değiştirmek için komutunu kullanın:

ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>

Bu işlem, temel alınan veri dosyalarını yeniden yazmadan tablo şemasını güncelleştirir.

Otomatik şema evrimi ile türleri genişletme

Şema evrimi, hedef tablolardaki veri türlerini gelen veri türüyle eşleşecek şekilde güncelleştirmek için tür genişletme ile çalışır.

Uyarı

Tür genişletme etkinleştirilmeden, şema evrimi her zaman hedef tablodaki sütun türlerini eşleştirmek için verileri alta aktarmayı dener. Hedef tablolarınızdaki veri türlerini otomatik olarak genişletmeyi istemiyorsanız, şema evrimi etkin iş yüklerini çalıştırmadan önce tür genişletmeyi devre dışı bırakın.

Alma sırasında bir sütunun veri türünü genişletmek için şema evrimini kullanmak için aşağıdaki koşulları karşılamanız gerekir:

  • Yazma komutu, otomatik şema evrimi etkin olarak çalışır.
  • Hedef tabloda tür genişletme etkinleştirildi.
  • Kaynak sütun türü hedef sütun türünden daha geniştir.
  • Tür genişletme, tür değişikliğini destekler.
  • Tür değişikliği byte, short, int veya long'den decimal veya double türüne değildir. Bu tür değişiklikler, tamsayıların ondalıklara yanlışlıkla yükseltilmesinden kaçınmak için yalnızca ALTER TABLE kullanılarak manuel uygulanabilir.

Bu koşulların tümünü karşılamayan tür uyuşmazlıkları normal şema uygulama kurallarına tabi olur. Şema uygulaması için bkz..

Tür genişletme tablosu özelliğini devre dışı bırakma

özelliğini falseolarak ayarlayarak etkinleştirilen tablolarda yanlışlıkla tür genişletmeyi önleyebilirsiniz:

  ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')

Bu ayar, tabloda gelecekteki tür değişikliklerini engeller, ancak tür genişletme tablosu özelliğini kaldırmaz veya değiştirilen türleri geri almaz.

Tür genişletme tablosu özelliklerini tamamen kaldırmanız gerekiyorsa, aşağıdaki örnekte gösterildiği gibi DROP FEATURE komutunu kullanabilirsiniz:

 ALTER TABLE <table-name> DROP FEATURE 'typeWidening' [TRUNCATE HISTORY]

Uyarı

Databricks Runtime 15.4 LTS kullanarak tür genişletmeyi etkinleştiren tablolar, bunun yerine özelliği typeWidening-preview düşürmeyi gerektirir.

Tür genişletme bırakıldığında, geçerli tablo şemasına uymayan tüm veri dosyaları yeniden yazılır. Bkz . Delta Lake tablosu özelliğini bırakma ve tablo protokolünü düşürme.

Delta tablosundan akış

Uyarı

Yapılandırılmış Akışta Tür Genişletme desteği Databricks Runtime 16.3 ve üzerinde kullanılabilir.

Delta tablosundan akış yapılırken tür değişiklikleri, Sütun Eşlemesi ile bir sütunu yeniden adlandırmaya veya bırakmaya benzer şekilde, eklemeli olmayan şema değişiklikleri olarak değerlendirilir.

Tür değişikliği uygulanmış delta lake tablolarından akışı etkinleştirmek için bir şema izleme konumu sağlayabilirsiniz.

Veri kaynağına karşı yapılan her akış okuma için kendi schemaTrackingLocation'sinin belirtilmiş olması gerekir. Belirtilen schemaTrackingLocation , akış yazma için hedef tablo için checkpointLocation belirtilen dizinde bulunmalıdır.

Uyarı

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:

Piton

checkpoint_path = "/path/to/checkpointLocation"

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

Scala programlama dili

val checkpointPath = "/path/to/checkpointLocation"

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

Bir şema izleme konumu sağlandıktan sonra, bir tür değişikliği algılandığında akış izlenen şemasını geliştirecek ve ardından durduracaktır. Bu sırada, aşağı akış tablosunda tür genişletmeyi etkinleştirme veya akış sorgusunu güncelleştirme gibi tür değişikliğini işlemek için gerekli tüm eylemleri gerçekleştirebilirsiniz.

İşlemeye devam etmek için Spark yapılandırmasını spark.databricks.delta.streaming.allowSourceColumnTypeChange veya DataFrame okuyucu seçeneğini allowSourceColumnTypeChangeayarlayın:

Piton

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .option("allowSourceColumnTypeChange", "<delta_source_table_version>")
  # alternatively to allow all future type changes for this stream:
  # .option("allowSourceColumnTypeChange", "always")
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)

Scala programlama dili

val checkpointPath = "/path/to/checkpointLocation"

spark.readStream
  .option("schemaTrackingLocation", checkpointPath)
  .option("allowSourceColumnTypeChange", "<delta_source_table_version>")
  // alternatively to allow all future type changes for this stream:
  // .option("allowSourceColumnTypeChange", "always")
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpointPath)
  .toTable("output_table")

SQL

  -- To unblock for this particular stream just for this series of schema change(s):
  SET spark.databricks.delta.streaming.allowSourceColumnTypeChange.ckpt_<checkpoint_id> = "<delta_source_table_version>"
  -- To unblock for this particular stream:
  SET spark.databricks.delta.streaming.allowSourceColumnTypeChange = "<delta_source_table_version>"
  -- To unblock for all streams:
  SET spark.databricks.delta.streaming.allowSourceColumnTypeChange = "always"

Denetim noktası kimliği <checkpoint_id> ve Delta Lake kaynak tablosu sürümü <delta_source_table_version> , akış durduğunda hata iletisinde görüntülenir.

Delta Paylaşımı

Uyarı

Delta Paylaşımında Tür Genişletme desteği Databricks Runtime 16.1 ve üzeri sürümleriyle kullanılabilir.

Tür genişletmesi etkinleştirilmiş bir Delta Lake tablosunun paylaşılması Databricks-Databricks Delta Sharing'de desteklenir. Sağlayıcı ve alıcı Databricks Runtime 16.1 veya üzerinde olmalıdır.

Delta Paylaşımı kullanılarak tür genişletme etkinleştirilmiş bir Delta Lake tablosundan Değişiklik Veri Akışı'nı okumak için yanıt biçimini delta olarak ayarlamanız gerekir:

spark.read
  .format("deltaSharing")
  .option("responseFormat", "delta")
  .option("readChangeFeed", "true")
  .option("startingVersion", "<start version>")
  .option("endingVersion", "<end version>")
  .load("<table>")

Tür değişiklikleri arasında Change Data Feed okuma desteklenmez. Bunun yerine işlemi, biri tür değişikliğini içeren tablo sürümünde biten, diğeri de tür değişikliğini içeren sürümden başlayan iki ayrı okuma işlemine bölmeniz gerekir.

Sınırlamalar

Apache Iceberg Uyumluluğu

Apache Iceberg, tür genişletme kapsamındaki tüm tür değişikliklerini desteklemez. Bkz. Iceberg Schema Evolution. Özellikle, Azure Databricks aşağıdaki tür değişikliklerini desteklemez:

  • byte, short, int, long veya decimaldouble
  • ondalık ölçek artırımı
  • date'dan timestampNTZ'e

Delta Lake tablosunda Iceberg uyumluluğuna sahip UniForm etkinleştirildiğinde, bu tür değişikliklerden birinin uygulanması hatayla sonuçlanır.

Bu desteklenmeyen tür değişikliklerinden birini bir Delta Lake tablosuna uygularsanız, tabloda Iceberg uyumluluğu ile tekdüzen etkinleştirilmesi bir hatayla sonuçlanır. Hatayı çözmek için tür genişletme tablosu özelliğini bırakmanız gerekir.

Diğer Sınırlamalar

  • Delta Lake tablosundan tür değişikliğiyle akış yaparken SQL kullanarak şema izleme konumu sağlama desteklenmez.
  • Databricks olmayan tüketicilerle tür genişletme özelliği etkinleştirilmiş Delta Sharing kullanarak tablo paylaşımı desteklenmez.