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.
Ö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ü decimal
olarak 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
, short
ve 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 true
olarak 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 typeWidening
tablo ö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
veyalong
'dendecimal
veyadouble
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 false
olarak 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 allowSourceColumnTypeChange
ayarlayı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
veyadecimal
double
- ondalık ölçek artırımı
-
date
'dantimestampNTZ
'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.