Yarı yapılandırılmış verileri modelleme
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 üzerinde, okuma ve yazma işlemleri için JSON dizelerinden daha iyi performans gösteren iyileştirilmiş bir kodlama kullanarak yarı yapılandırılmış JSON verilerini depolamak için türünü kullanabilirsiniz VARIANT
.
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.
- Yanıtları kaydetme REST API sorguları.
- 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.
Yapıları kullanma
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, depolanan verileri diğer sütunlarla aynı yapı olarak ele alır, yani yapılardan ve sütunlardan işlevsel bir fark yoktur. Delta Lake tarafından kullanılan Parquet veri dosyaları, bir yapıdaki her alan için bir sütun oluşturur. Yapı alanlarını kümeleme sütunları veya bölümleme sütunları olarak kullanabilir ve veri atlama yapıları hakkında istatistik toplayabilirsiniz.
Yapılar genellikle okumada en iyi performansı sağlar, tüm verilerin en iyi duruma getirilmesini destekler ve tek tek alanları 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ütun yazma işlemiyle aynı şekilde zorlanır. Bu nedenle yapılar, verilerin tam olarak ön işlenmesini gerektirir. Bu, yalnızca bir tabloya doğrulanmış verilerin işlenmesini istediğinizde yararlı olabilir, ancak yukarı akış sistemlerinden hatalı biçimlendirilmiş kayıtlar işlenirken verilerin bırakılmasına veya işlerin başarısız olmasına neden olabilir.
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.
Eşlemelerin hem anahtarı hem de değeri yazılır, bu nedenle veriler önceden işlenir ve şema yazma sırasında zorlanı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: