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 makalede, kuruluşunuzun verileri nasıl kullandığına bağlı olarak yarı yapılandırılmış verileri depolamak için desenler önerilir. Azure Databricks yarı yapılandırılmış, iç içe yerleştirilmiş ve karmaşık verilerle çalışmak için işlevler, yerel veri türleri ve sorgu söz dizimi sağlar.
Aşağıdaki önemli noktalar hangi deseni kullanmanız gerektiğini etkiler:
- Veri kaynağındaki alanlar veya türler sık sık değişiyor mu?
- Veri kaynağında toplam benzersiz alan sayısı ne kadardır?
- İş yüklerinizi yazma veya okuma işlemleri için iyileştirmeniz gerekiyor mu?
Databricks, aşağı akış sorguları için verilerin Delta tabloları olarak depolanmasını önerir.
Değişken kullan
Databricks Runtime 15.3 ve sonraki sürümlerde, okuma ve yazma işlemlerinde JSON dizelerinden daha yüksek performans sağlayan optimize edilmiş bir kodlama kullanarak yarı yapılandırılmış JSON verilerini depolamak için VARIANT türünü kullanabilirsiniz.
türü, VARIANT JSON dizeleriyle benzer uygulamalara sahiptir. Bazı iş yükleri, özellikle iyileştirilmiş veri düzeni ve istatistik koleksiyonundan yararlanabilecek iyi bilinen şemalara sahip veriler için yapıları, haritaları ve dizileri kullanmaya devam eder.
Daha fazla ayrıntı için aşağıdaki makalelere bakın:
- Değişken verileri sorgulama
- Değişken, JSON dizelerinden ne kadar farklıdır?
- Yarı yapılandırılmış değişken türü olarak veri alma
JSON dizelerini kullanma
Standart JSON biçimlendirmesini kullanarak verileri tek bir dize sütununda depolayabilir ve ardından gösterimi kullanarak : JSON'daki alanları sorgulayabilirsiniz.
Birçok sistem kayıtları dize veya bayt kodlanmış JSON kayıtları olarak verir. Bu kayıtları dize olarak almak ve depolamak çok düşük işleme yüküne sahiptir. Ayrıca, herhangi bir veri yapısını bir JSON dizesine dönüştürmek için işlevini de kullanabilirsiniz to_json .
Verileri JSON dizeleri olarak depolamayı seçerken aşağıdaki güçlü ve zayıf noktaları göz önünde bulundurun:
- Tüm değerler, tür bilgisi olmayan dizeler olarak depolanır.
- JSON, metin kullanılarak temsil edilebilen tüm veri türlerini destekler.
- JSON rastgele uzunlukta dizeleri destekler.
- Tek bir JSON veri sütununda temsil edilebilecek alan sayısıyla ilgili bir sınır yoktur.
- Veriler, tabloya yazmadan önce ön işleme gerektirmez.
- Aşağı akış iş yüklerindeki verilerde bulunan tür sorunlarını çözebilirsiniz.
- Her sorgu için dizenin tamamını ayrıştırmanız gerektiğinden, JSON okumada en kötü performansı sağlar.
JSON dizeleri, ham verileri lakehouse tablosuna almak için büyük esneklik ve uygulanması kolay bir çözüm sağlar. Birçok uygulama için JSON dizeleri kullanmayı seçebilirsiniz, ancak özellikle bir iş yükünün en önemli sonucu aşağı akış işleme için veri kaynağının eksiksiz ve doğru bir gösterimini depolamak olduğunda kullanışlıdır. Bazı kullanım örnekleri şunları içerebilir:
- Kafka gibi bir kuyruk hizmetinden akış verilerini alma.
- REST API sorgularında yanıtların kaydedilmesi.
- Ekibiniz tarafından denetlenmeyen bir yukarı akış veri kaynağından ham kayıtları depolama.
Alma mantığınızın esnek olduğunu varsayarsak, yeni alanlarla, veri yapısında değişikliklerle veya veri kaynağında tür değişiklikleriyle karşılaşsanız bile verileri JSON dizesi olarak depolamak dayanıklı olmalıdır. Aşağı akış iş yükleri bu değişiklikler nedeniyle başarısız olabilir ancak tablonuz kaynak verilerin tam geçmişini içerir; bu da veri kaynağına geri dönmenize gerek kalmadan sorunları düzeltebileceğiniz anlamına gelir.
Struct'ları kullan
Yarı yapılandırılmış verileri yapılarla depolayabilir ve veri kaynağının iç içe yapısını korurken sütunların tüm yerel işlevlerini etkinleştirebilirsiniz.
Delta Lake, yapıları sütunlarla aynı şekilde kullanmanıza olanak tanır. Delta Lake tablosunda, Parquet veri dosyaları bir yapıdaki her alan için bir sütun oluşturur. Yapı alanlarını kümeleme anahtarları olarak kullanabilir ve veri atlama yapıları hakkında istatistik toplayabilirsiniz. Tabloyu yapı alanına göre bölümleyemezsiniz. Bunun yerine sıvı kümeleme kullanın. Bkz Tablolar için sıvı kümeleme kullanma.
Yapılar genellikle okuma işlemlerinde en iyi performansı sunar; çünkü tüm veri atlama optimizasyonlarını destekler ve her bir alanı sütun olarak depolar. Mevcut sütun sayısı yüzlerce sütuna ulaştığında performans düşmeye başlayabilir.
Yapıdaki her alanın bir veri türü vardır ve bu tür, sütunlarda olduğu gibi yazma sırasında uygulanır. Bu nedenle yapılar, verilerin tam olarak ön işlenmesini gerektirir. Bu, yalnızca doğrulanmış verilerin bir tabloya yazılmasını istediğiniz durumlarda yararlı olabilir; ancak üst sistemlerden gelen hatalı biçimlendirilmiş kayıtlar işlenirken verilerin atılmasına veya işlerin başarısız olmasına yol açabilir.
Yapılar, şema evrimi için JSON akışlarından daha az esnektir; bunun nedeni, değişen veri türleri veya yeni alanlar eklemektir.
Haritaları ve dizileri kullanma
Delta Lake'te yarı yapılandırılmış veri biçimlerini yerel olarak çoğaltmak için haritaların ve dizilerin birleşimini kullanabilirsiniz. İstatistikler bu türlerle tanımlanan alanlarda toplanamaz, ancak yaklaşık 500 alanı olan yarı yapılandırılmış veri kümeleri için hem okuma hem de yazma üzerinde dengeli performans sağlar.
Map'lerin hem anahtarı hem de değeri tiplenmiştir; bu nedenle veriler önceden işlenir ve veri yazılırken şema uygulanır.
Databricks, sorguları hızlandırmak için genellikle verileri ayrı sütunlar olarak filtrelemek için kullanılan alanların depolanmasını önerir.
Verilerimi düzleştirmem gerekiyor mu?
Verilerinizi JSON veya haritalar kullanarak depoluyorsanız sorguları sütun olarak filtrelemek için sık kullanılan alanları depolamayı göz önünde bulundurun. İstatistik koleksiyonu, bölümleme ve kümeleme, JSON dizeleri veya eşlemeleri içindeki alanlar için kullanılamaz. Yapı olarak depolanan veriler için bunu yapmanız gerekmez.
İç içe verilerle çalışma söz dizimi
İç içe verilerle çalışma hakkında bilgi için aşağıdaki kaynakları gözden geçirin: