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.
Otomatik Yükleyici'yi, yüklenen verilerin şemasını otomatik olarak algılayarak veri şemasını açıkça bildirmeden tabloları başlatmanıza ve yeni sütunlar kullanıma sunulduğunda tablo şemasını geliştirmenize olanak tanıyacak şekilde yapılandırabilirsiniz. Bu, şema değişikliklerini zaman içinde el ile izleme ve uygulama gereksinimini ortadan kaldırır.
Otomatik Yükleyici ayrıca JSON blob sütununda beklenmeyen verileri (örneğin, farklı veri türleri) "kurtarabilir" ve bu verileri daha sonra yarı yapılandırılmış veri erişim API'lerini kullanarak görüntülemeyi seçebilirsiniz.
Otomatik Yükleyici şema çıkarımı ve evrimi için aşağıdaki biçimleri destekler:
| Dosya biçimi | Desteklenen sürümler |
|---|---|
JSON |
Tüm sürümler |
CSV |
Tüm sürümler |
XML |
Databricks Runtime 14.3 LTS ve üzeri |
Avro |
Databricks Runtime 10.4 LTS ve üzeri |
Parquet |
Databricks Runtime 11.3 LTS ve üzeri |
ORC |
Desteklenmeyen |
Text |
Uygulanamaz (sabit şema) |
Binaryfile |
Uygulanamaz (sabit şema) |
Şema çıkarımı ve evrimi için söz dizimi
seçeneği için cloudFiles.schemaLocation bir hedef dizin belirtmek şema çıkarımı ve evrimini etkinleştirir.
checkpointLocation için belirttiğiniz dizini kullanmayı seçebilirsiniz.
Lakeflow Spark Bildirimli İşlem Hatlarını kullanıyorsanız, Azure Databricks şema konumunu ve diğer denetim noktası bilgilerini otomatik olarak yönetir.
Not
Hedef tabloya yüklenen birden fazla kaynak veri konumunuz varsa, her Otomatik Yükleyici alımı iş yükü ayrı bir akış denetim noktası gerektirir.
Aşağıdaki örnekte parquet, cloudFiles.format için kullanılır. Diğer dosya kaynakları için , csvveya avro kullanınjson. Okuma ve yazma için diğer tüm ayarlar, her biçimin varsayılan davranışları için aynı kalır.
Piton
(spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "parquet")
# The schema location directory keeps track of your data schema over time
.option("cloudFiles.schemaLocation", "<path-to-schema>")
.load("<path-to-source-data>")
.writeStream
.option("checkpointLocation", "<path-to-checkpoint>")
.start("<path-to-target>")
)
Scala programlama dili
spark.readStream.format("cloudFiles")
.option("cloudFiles.format", "parquet")
// The schema location directory keeps track of your data schema over time
.option("cloudFiles.schemaLocation", "<path-to-schema>")
.load("<path-to-source-data>")
.writeStream
.option("checkpointLocation", "<path-to-checkpoint>")
.start("<path-to-target>")
Otomatik Yükleyici şema çıkarımı nasıl çalışır?
Verileri ilk okurken şemayı çıkarsamak için Auto Loader, keşfettiği ilk 50 GB veriyi veya 1000 dosyayı (hangi sınıra önce ulaşılırsa) örnekler. Otomatik Yükleyici, şema bilgilerini zaman içinde giriş verilerinde yapılan şema değişikliklerini izlemek için yapılandırılan _schemas dizininde cloudFiles.schemaLocation depolar.
Not
Kullanılan örneğin boyutunu değiştirmek için SQL yapılandırmalarını ayarlayın:
spark.databricks.cloudFiles.schemaInference.sampleSize.numBytes
(bayt dizesi, örneğin 10gb)
ile
spark.databricks.cloudFiles.schemaInference.sampleSize.numFiles
(tamsayı)
Varsayılan olarak, Otomatik Yükleyici şema çıkarımı, tür uyuşmazlıkları nedeniyle şema evrimi sorunlarından kaçınmayı arar. Veri türlerini (JSON, CSV ve XML) kodlamamış biçimler için, Otomatik Yükleyici tüm sütunları dize olarak (JSON dosyalarındaki iç içe yerleştirilmiş alanlar dahil) olarak çıkarsar. Yazılan şemaya (Parquet ve Avro) sahip biçimler için, Otomatik Yükleyici dosyaların bir alt kümesini örnekler ve tek tek dosyaların şemalarını birleştirir. Aşağıdaki tabloda bu davranış özetlemektedir.
| Dosya biçimi | Varsayılan çıkarsanan veri türü |
|---|---|
JSON |
Dize |
CSV |
Dize |
XML |
Dize |
Avro |
Avro şemasında kodlanmış türler |
Parquet |
Parquet şemasında kodlanmış türler |
Apache Spark DataFrameReader şema çıkarımı için farklı davranışlar kullanır ve örnek verilere göre JSON, CSV ve XML kaynaklarındaki sütunlar için veri türlerini seçer. Otomatik Yükleyici ile bu davranışı etkinleştirmek için seçeneğini cloudFiles.inferColumnTypes olarak trueayarlayın.
Not
CSV verileri için şema çıkarılırken, Otomatik Yükleyici dosyaların üst bilgi içerdiğini varsayar. CSV dosyalarınız üst bilgi içermiyorsa seçeneğini .option("header", "false")belirtin. Ayrıca Otomatik Yükleyici, genel bir şema oluşturmak için örnekteki tüm dosyaların şemalarını birleştirir. Otomatik Yükleyici daha sonra her dosyayı üst bilgisine göre okuyabilir ve CSV'yi doğru ayrıştırabilir.
Not
Bir sütunun iki Parquet dosyasında farklı veri türleri olduğunda, Otomatik Yükleyici en geniş türü seçer. Bu seçimi geçersiz kılmak için schemaHints kullanabilirsiniz. Şema ipuçlarını belirttiğinizde, Auto Loader sütunu belirtilen türe dönüştürmez, bunun yerine Parquet okuyucusuna sütunu belirtilen tür olarak okumasını söyler. Uyuşmazlık durumunda, Otomatik Yükleyici verileri kurtarılan veri sütununa yerleştirerek sütunu kurtarır.
Otomatik Yükleyici şemasının evrimi nasıl çalışır?
Otomatik Yükleyici, verilerinizi işlerken yeni sütunların eklenmesini algılar. Otomatik Yükleyici yeni bir sütun algıladığında akış UnknownFieldException ile durur. Akışınız bu hatayı oluşturmadan önce, Otomatik Yükleyici en son mikro veri toplu işleminde şema çıkarımını gerçekleştirir ve şemanın sonuna yeni sütunları birleştirerek şema konumunu en son şemayla güncelleştirir. Mevcut sütunların veri türleri değişmeden kalır.
Databricks, Lakeflow İşleri ile Otomatik Yükleyici akışlarının bu şema değişiklikleri sonrasında otomatik olarak yeniden başlatılmasını önerir.
Otomatik Yükleyici, seçeneğinde ayarladığınız şema evrimi cloudFiles.schemaEvolutionMode için aşağıdaki modları destekler:
| Mod | Yeni sütunu okuma davranışı |
|---|---|
addNewColumns (varsayılan) |
Auto Loader yeni sütunları şemaya ekledikten sonra akış, UnknownFieldException hatasıyla başarısız olur. Akışın yeniden başlatılması, güncelleştirilmiş şemayla işlemeye devam eder. Mevcut sütunlar veri türlerini geliştirmez. Azure Databricks otomatik olarak yeniden başlatılması için Otomatik Yükleyici akışlarının Lakeflow Jobs ile yapılandırılmasını önerir. |
addNewColumnsWithTypeWidening |
ile aynı davranışa addNewColumnssahip olsa da, Otomatik Yükleyici desteklenen veri türlerini de genişleter (örneğin int : long). Desteklenmeyen tür değişiklikleri (örneğin, int'den string'e) kurtarılan veri sütununa eklenir. |
rescue |
Otomatik Yükleyici şemayı hiçbir zaman geliştirmez ve şema değişiklikleri nedeniyle akış başarısız olmaz. Otomatik Yükleyici kurtarılan veri sütunundaki tüm yeni sütunları kaydeder. |
failOnNewColumns |
Sağlanan şemayı güncelleştirmediğiniz veya sorunlu veri dosyasını kaldırmadığınız sürece akış başarısız olur ve yeniden başlatılmaz. Şema otomatik olarak güncelleştirilmez. |
none |
Şema geliştirilmez, yeni sütunlar yoksayılır ve rescuedDataColumn seçeneği ayarlanmadığı sürece veriler kurtarılmaz. Şema değişiklikleri nedeniyle akış başarısız olmaz. |
Not
addNewColumns modu, şema sağlanmadığında varsayılan moddur, ancak bir şema sağladığınızda none varsayılan moddur. Akışın şeması sağlandığında addNewColumns'ye izin verilmez, ancak kendi şemanızı şema ipucu olarak sağlarsanız çalışır.
Otomatik Yükleyici, şema evrimi modunda otomatik tür genişletme işlemini addNewColumnsWithTypeWidening de destekler. Bu mod, veri yeniden yazma veya kullanıcı müdahalesi gerektirmeden veri türlerini (örneğin int , 'a long veya float ' ye double) otomatik olarak genişleter. Bu özellik Databricks Runtime 16.4 ve üzeri sürümlerin Genel Önizleme sürümündedir. Daha fazla bilgi için bkz. Otomatik Yükleyici ile Otomatik Tür Genişletme.
Bölümler Otomatik Yükleyici ile nasıl çalışır?
Otomatik Yükleyici, veriler Hive stili bölümlemede düzenlenmişse, verilerin temel dizin yapısından bölüm sütunlarını çıkarma girişiminde bulunur. Örneğin, base_path/event=click/date=2021-04-01/f0.json dosya yolu, date ve event'nin bölüm sütunları olarak çıkarılmasına neden olur. Temel dizin yapısı çakışan Hive bölümleri içeriyorsa veya Hive stili bölümleme içermiyorsa, Otomatik Yükleyici bölüm sütunlarını yoksayar.
İkili dosya (binaryFile) ve text dosya biçimleri sabit veri şemalarına sahiptir, ancak bölüm sütunu çıkarımı desteklenir. Databricks, bu dosya biçimleri için cloudFiles.schemaLocation ayarlamanızı önerir. Bu, olası hataları veya bilgi kaybını önler ve Otomatik Yükleyici her başladığında bölüm sütunlarının çıkarımını engeller.
Otomatik Yükleyici, şema evrimi için bölüm sütunlarını dikkate almaz. Eğer base_path/event=click/date=2021-04-01/f0.json gibi bir ilk dizin yapısına sahipseniz ve yeni dosyaları base_path/event=click/date=2021-04-01/hour=01/f1.json olarak almaya başladıysanız, 'Otomatik Yükleyici' saat sütununu yoksayar. Yeni bölüm sütunlarına ilişkin bilgileri yakalamak için cloudFiles.partitionColumns ayarını event,date,hour olarak ayarlayın.
Not
seçeneği cloudFiles.partitionColumns , sütun adlarının virgülle ayrılmış bir listesini alır. Otomatik Yükleyici yalnızca dizin yapınızda çift olarak key=value bulunan sütunları ayrıştırıyor.
Kurtarılan veri sütunu nedir?
Otomatik Yükleyici şemayı çıkardığında, Otomatik Yükleyici otomatik olarak kurtarılan bir veri sütununu şemanıza olarak _rescued_dataekler. Seçeneği ayarlayarak rescuedDataColumn bir şema sağlarken sütunu yeniden adlandırabilir veya ekleyebilirsiniz.
Kurtarılan veri sütunu, Otomatik Yükleyici'nin şemayla eşleşmeyen sütunları bırakmak yerine kurtarmasını sağlar. Kurtarılan veri sütunu, aşağıdaki nedenlerle ayrıştırılmamış tüm verileri içerir:
- Şemada sütun eksik.
- Tür uyuşmazlıkları.
- Büyük/küçük harf uyuşmazlıkları.
Kurtarılan veri sütunu, kurtarılan sütunları ve kaydın kaynak dosya yolunu içeren bir JSON blobu içerir.
Not
JSON ve CSV ayrıştırıcıları kayıtları ayrıştırırken üç modu destekler: PERMISSIVE, DROPMALFORMEDve FAILFAST.
rescuedDataColumn ile birlikte kullanıldığında, veri türü uyuşmazlıkları Otomatik Yükleyici'nin kayıtları DROPMALFORMED modunda çıkarmasına veya FAILFAST modunda hata çıkarmasına neden olmaz. Yalnızca bozuk kayıtlar başarısız olur veya eksik veya hatalı biçimlendirilmiş JSON veya CSV gibi hatalar oluşturur. JSON veya CSV ayrıştırırken badRecordsPath kullanırsanız, rescuedDataColumn kullanıldığında Otomatik Yükleyici veri türü uyumsuzluklarını hatalı kayıtlar olarak işlememektedir. Otomatik Yükleyici içinde yalnızca eksik ve hatalı biçimlendirilmiş JSON veya CSV kayıtlarını badRecordsPathdepolar.
Büyük/küçük harfe duyarlı davranışı değiştirme
Büyük/küçük harf duyarlılığı etkin değilse, Otomatik Yükleyici abc, Abc ve ABC sütunlarını şema çıkarımı amacıyla aynı sütun olarak değerlendirir. Otomatik Yükleyici, örneklenen verilere göre olayı rastgele seçer. Hangi durumun kullanılması gerektiğini zorlamak için şema ipuçlarını kullanabilirsiniz. Otomatik Yükleyici bir seçim yaptıktan ve şemayı çıkardıktan sonra, şemayla tutarlı olarak seçilmemiş büyük/küçük harf çeşitlemelerini dikkate almaz.
Kurtarılan veri sütunu etkinleştirildiğinde, Otomatik Yükleyici, şemanın haricindeki bir biçimde adlandırılmış alanları _rescued_data sütununa yükler. Seçeneğini readerCaseSensitive false olarak ayarlayarak bu davranışı değiştirin. Bu durumda Otomatik Yükleyici verileri büyük/küçük harf duyarlılığı olmadan okur.
Şema ipuçlarını kullanarak şema çıkarımı geçersiz kılma
Bildiğiniz ve çıkarım yapılan bir şemada beklediğiniz şema bilgilerini zorunlu kılmak için şema ipuçlarını kullanabilirsiniz. Bir sütunun belirli bir veri türünde olduğunu biliyorsanız veya daha genel bir veri türü (örneğin, yerinedouble) seçmek istiyorsanız, integer SQL şema belirtimi söz dizimini kullanarak dize olarak sütun veri türleri için rastgele sayıda ipucu sağlayabilirsiniz; örneğin:
.option("cloudFiles.schemaHints", "tags map<string,string>, version int")
Desteklenen veri türlerinin listesi için bkz. Dil eşlemeleri.
Akışın başında bir sütun yoksa, bu sütunu çıkarsanan şemaya eklemek için şema ipuçlarını da kullanabilirsiniz.
Aşağıdaki örnekte, çıkarsanan bir şema ve şema ipuçlarının uygulanması sonucu gösterilmektedir.
Çıkarsanan şema:
|-- date: string
|-- quantity: int
|-- user_info: struct
| |-- id: string
| |-- name: string
| |-- dob: string
|-- purchase_options: struct
| |-- delivery_address: string
Aşağıdaki şema ipuçlarını belirterek:
.option("cloudFiles.schemaHints", "date DATE, user_info.dob DATE, purchase_options MAP<STRING,STRING>, time TIMESTAMP")
şunu elde edersiniz:
|-- date: string -> date
|-- quantity: int
|-- user_info: struct
| |-- id: string
| |-- name: string
| |-- dob: string -> date
|-- purchase_options: struct -> map<string,string>
|-- time: timestamp
Not
Dizi ve Eşleme şema ipuçları desteği Databricks Runtime 9.1 LTS ve üzerinde kullanılabilir.
Aşağıdaki örnekte karmaşık veri türlerine sahip çıkarımlı bir şema ve şema ipuçlarının uygulanması sonucu gösterilmektedir.
Çıkarsanan şema:
|-- products: array<string>
|-- locations: array<string>
|-- users: array<struct>
| |-- users.element: struct
| | |-- id: string
| | |-- name: string
| | |-- dob: string
|-- ids: map<string,string>
|-- names: map<string,string>
|-- prices: map<string,string>
|-- discounts: map<struct,string>
| |-- discounts.key: struct
| | |-- id: string
| |-- discounts.value: string
|-- descriptions: map<string,struct>
| |-- descriptions.key: string
| |-- descriptions.value: struct
| | |-- content: int
Aşağıdaki şema ipuçlarını belirterek:
.option("cloudFiles.schemaHints", "products ARRAY<INT>, locations.element STRING, users.element.id INT, ids MAP<STRING,INT>, names.key INT, prices.value INT, discounts.key.id INT, descriptions.value.content STRING")
şunu elde edersiniz:
|-- products: array<string> -> array<int>
|-- locations: array<int> -> array<string>
|-- users: array<struct>
| |-- users.element: struct
| | |-- id: string -> int
| | |-- name: string
| | |-- dob: string
|-- ids: map<string,string> -> map<string,int>
|-- names: map<string,string> -> map<int,string>
|-- prices: map<string,string> -> map<string,int>
|-- discounts: map<struct,string>
| |-- discounts.key: struct
| | |-- id: string -> int
| |-- discounts.value: string
|-- descriptions: map<string,struct>
| |-- descriptions.key: string
| |-- descriptions.value: struct
| | |-- content: int -> string
Not
Otomatik Yükleyici yalnızca şema sağlamazsanız şema ipuçlarını kullanır. Şema ipuçlarını, cloudFiles.inferColumnTypes etkin veya devre dışı bırakılmış olsa da kullanabilirsiniz.