Aracılığıyla paylaş


Değişken, JSON dizelerinden ne kadar farklıdır?

Önemli

Bu özellik Genel Önizlemededir.

Bu makalede, değişken veri türüyle çalışırken söz dizimi ve semantikteki davranış değişiklikleri ve farklılıklar açıklanmaktadır. Bu makalede, Azure Databricks'te JSON dize verileriyle çalışmayı bildiğiniz varsayılır. Azure Databricks'i kullanmaya yeni başlayan kullanıcılar için, değişen veya bilinmeyen şema için esneklik gerektiren yarı yapılandırılmış verileri depoladığınızda JSON dizeleri üzerinden değişken kullanmanız gerekir. Bkz. Yarı yapılandırılmış verileri modelleme.

Databricks Runtime 15.3 ve üzerinde, yarı yapılandırılmış verileri kodlamak ve sorgulamak için değişken veri türünü kullanabilirsiniz. Databricks, JSON dizelerini kullanarak yarı yapılandırılmış verileri depolamak için değişken kullanılmasını önerir. Değişken için geliştirilmiş okuma ve yazma performansı, bazı kullanım örneklerinde yapılar ve diziler gibi yerel Spark karmaşık türlerinin yerini alabilmesini sağlar.

Değişken verileri nasıl sorgularsınız?

Değişken veriler alanları, alt alanları ve dizi öğelerini sorgulamak için aynı işleçleri kullanır.

Bir alanı sorgulamak için kullanın :. Örneğin, column_name:field_name.

Bir alt alanı sorgulamak için kullanın .. Örneğin, column_name:field_name.subfield_name.

Dizi öğesini sorgulamak için [n] kullanın; burada n öğenin tamsayı dizin değeridir. Örneğin, dizideki ilk değeri sorgulamak için. column_name:array_name[0]

Aşağıdaki farklar, JSON dizelerinden değişkene yükseltirken var olan sorguları bozabilir:

  • Tüm değişken yol öğeleri büyük/küçük harfe duyarlı bir şekilde eşleştirilir. JSON dizeleri büyük/küçük harfe duyarlı değildir. Bu, column_name:FIELD_NAME değişken için ve column_name:field_name depolanan verilerde farklı alanlar aramak anlamına gelir.
  • Söz [*] dizimi, dizideki tüm öğelerin tanımlanmasını veya paketten çıkarılmasını desteklemez.
  • Değişken, değerleri JSON dizelerinden farklı NULL kodlar. Bkz . Değişken null kuralları.
  • Değişken sütunlarında bazı işlemler için sınırlamalar vardır. Bkz. Sınırlamaları.

JSON dizelerini değişkene ve değişkenden dönüştürme

Databricks Runtime 15.3 ve üzerinde işlevin to_json türleri JSON dizelerine dönüştürmeye VARIANT yönelik ek işlevleri vardır. JSON dizesine dönüştürülürken VARIANT seçenekler yoksayılır. Bkz. to_json.

parse_json işlevi bir JSON dizesini yazacak şekilde VARIANT dönüştürür. mantıksal tersi parse_json(json_string_column)olsa to_json(variant_column) da, aşağıdaki dönüştürme kuralları bunun neden tam ters olmadığını açıklar:

  • Boşluk mükemmel bir şekilde korunmaz.
  • Anahtarların sıralanması rastgeledir.
  • Sayılarda sondaki sıfırlar kesilebilir.

JSON dizesi yanlış biçimlendirilmişse veya değişken boyut sınırını aşıyorsa parse_json işlevi bir hata döndürür. try_parse_json Bunun yerine ayrıştırma hatası oluştuğunda bir NULL döndürmek için işlevini kullanın.

Çeşitlemelerle çalışmaya yönelik SQL işlevleri nelerdir?

Databricks Runtime 15.3 ve üzerinde kullanılabilen Apache Spark SQL işlevleri, değişken verilerle etkileşime yönelik yöntemler sağlar. Aşağıdaki tabloda yeni işlev, karşılık gelen JSON dizesi işlevi ve davranış farklılıklarına ilişkin notlar yer almaktadır.

Not

Bu işlevleri PySpark DataFrames ile kullanmak için, içinden pyspark.sql.functionsiçeri aktar ın. variant_explode ve variant_explode_outer PySpark'ta desteklenmez.

Variant işlevi JSON dize işlevi Notlar
variant_get atama ve get_json_object bir ifade, yol ve tür alır. Değişken yolları, atama ve null değerleri için tüm kuralları izler.
try_variant_get try_cast ve get_json_object bir ifade, yol ve tür alır. Değişken yolları, atama ve null değerleri için tüm kuralları izler.
is_variant_null null İfadenin kodlanmış VARIANTbir NULL depolayıp depolamadığını denetler. Giriş ifadesinin olup is nullolmadığını denetlemek için kullanınNULL.
schema_of_variant schema_of_json bir ARRAY<elementType>için şema belirlenirken, verilerde çakışan türler varsa elementTypeVARIANT olarak çıkarılabilir.
schema_of_variant_agg schema_of_json_agg En az ortak tür tanımlanmamışsa, tür olarak VARIANTtüretilir.
variant_explode patlamak pos, keyve value sütunlarını çıktılar. Bir dizi patlarken, çıkış anahtarı her zaman null'tır.
variant_explode_outer explode_outer pos, keyve value sütunlarını çıktılar. Bir dizi patlarken, çıkış anahtarı her zaman null'tır.

Çeşitlemeler, JSON dizelerinden farklı tür dönüştürme ve NULLs işlemlerini işler. Bkz . Değişken türü atama kuralları ve Değişken null kuralları.