Freigeben über


Wie unterscheidet sich der Variant-Datentyp von JSON-Zeichenfolgen?

Wichtig

Dieses Feature befindet sich in der Public Preview.

In diesem Artikel werden die Verhaltensänderungen und Unterschiede bei der Syntax und Semantik beim Arbeiten mit dem Variant-Datentyp beschrieben. In diesem Artikel wird davon ausgegangen, dass Sie mit der Arbeit mit JSON-Zeichenfolgendaten in Azure Databricks vertraut sind. Für Benutzer:innen, die noch nicht mit Azure Databricks arbeiten, sollten Sie bei der Speicherung halbstrukturierter Daten, die Flexibilität beim Ändern oder unbekannten Schema erfordern, anstelle von JSON-Zeichenfolgen den Variant-Datentyp verwenden. Weitere Informationen finden Sie unter Modellieren teilweise strukturierter Daten.

In Databricks Runtime 15.3 und höher können Sie den Variant-Datentyp verwenden, um teilweise strukturierte Daten zu codieren und abzufragen. Databricks empfiehlt den Variant-Datentyp als Ersatz zum Speichern teilweise strukturierter Daten mithilfe von JSON-Zeichenfolgen. Die verbesserte Lese- und Schreibleistung beim Variant-Datentyp ermöglicht es, native komplexe Spark-Typen wie Strukturen und Arrays in einigen Anwendungsfällen zu ersetzen.

Wie fragen Sie Variant-Daten ab?

Variant-Daten verwenden dieselben Operatoren zum Abfragen von Feldern, Unterfeldern und Arrayelementen.

Verwenden Sie :, um ein Feld abzufragen. Beispiel: column_name:field_name.

Verwenden Sie ., um ein Unterfeld abzufragen. Beispiel: column_name:field_name.subfield_name.

Verwenden Sie [n], um ein Arrayelement abzufragen, wobei n ganzzahlige Indexwert des Elements ist. Um z. B. den ersten Wert in einem Array abzufragen, verwenden Sie column_name:array_name[0].

Die folgenden Unterschiede können beim Upgrade von JSON-Zeichenfolgen auf den Variant-Datentyp zu einer Unterbrechung bei vorhandenen Abfragen führen:

  • Alle Variant-Pfadelemente werden unter Berücksichtigung der Groß-/Kleinschreibung verglichen. Bei JSON-Zeichenfolgen wird die Groß-/Kleinschreibung nicht beachtet. Dies bedeutet, dass beim Variant-Datentyp column_name:FIELD_NAME und column_name:field_name nach verschiedenen Feldern in den gespeicherten Daten suchen.
  • Die [*]-Syntax wird nicht unterstützt, um alle Elemente in einem Array zu identifizieren oder zu entpacken.
  • Beim Variant-Datentyp werden NULL-Werte anders als JSON-Zeichenfolgen codiert. Weitere Informationen finden Sie unter NULL-Regeln beim Variant-Datentyp.

Konvertieren zwischen JSON-Zeichenfolge und Variant-Datentyp

In Databricks Runtime 15.3 und höher verfügt die to_json-Funktion über zusätzliche Funktionen zum Umwandeln von VARIANT-Typen in JSON-Zeichenfolgen. Optionen werden beim Konvertieren von VARIANT in JSON-Zeichenfolgen ignoriert. Weitere Informationen finden Sie unter to_json.

Die parse_json-Funktion transformiert eine JSON-Zeichenfolge in den Typ VARIANT. parse_json(json_string_column) ist zwar die logische Umkehrung von to_json(variant_column), die folgenden Konvertierungsregeln zeigen jedoch, warum es keine genau Inversion ist:

  • Leerräume bleiben nicht perfekt erhalten.
  • Die Sortierung von Schlüsseln ist beliebig.
  • Nullen am Ende von Zahlen werden möglicherweise abgeschnitten.

Die parse_json-Funktion gibt einen Fehler zurück, wenn die JSON-Zeichenfolge falsch formatiert ist oder die Größenbeschränkung für den Variant-Datentyp überschreitet. Verwenden Sie die try_parse_json-Funktion, um stattdessen NULL zurückzugeben, wenn bei der Analyse ein Fehler auftritt.

Welche SQL-Funktionen sind für die Arbeit mit dem Variant-Datentyp verfügbar?

Apache Spark SQL-Funktionen, die in Databricks Runtime 15.3 und höher verfügbar sind, bieten Methoden für die Interaktion mit Variant-Daten. Die folgende Tabelle enthält die neue Funktion, die entsprechende JSON-Zeichenfolgenfunktion und Anmerkungen zu Unterschieden im Verhalten.

Hinweis

Um diese Funktionen mit PySpark-DataFrames zu verwenden, importieren Sie sie aus pyspark.sql.functions. variant_explode und variant_explode_outer werden in PySpark nicht unterstützt.

Variant-Funktion JSON-Zeichenfolgenfunktion Hinweise
variant_get cast und get_json_object Akzeptiert einen Ausdruck, Pfad und Typ. Folgt allen Regeln für Variant-Pfade, Umwandlungen und NULL-Werte.
try_variant_get try_cast und get_json_object Akzeptiert einen Ausdruck, Pfad und Typ. Folgt allen Regeln für Variant-Pfade, Umwandlungen und NULL-Werte.
is_variant_null is null Überprüft, ob der Ausdruck eine als VARIANT codierte NULL speichert. Verwenden Sie is null, um zu überprüfen, ob der Eingabeausdruck NULL ist.
schema_of_variant schema_of_json Bei der Bestimmung des Schemas für eine ARRAY<elementType> wird elementType möglicherweise als VARIANT abgeleitet, wenn in den Daten in Konflikt stehende Typen enthalten sind.
schema_of_variant_agg schema_of_json_agg Wenn kein Mindesttyp angegeben ist, wird als Typ VARIANT abgeleitet.
variant_explode explode Gibt die Spalten pos, key und value aus. Beim Explodieren eines Arrays ist der Ausgabeschlüssel immer NULL.
variant_explode_outer explode_outer Gibt die Spalten pos, key und value aus. Beim Explodieren eines Arrays ist der Ausgabeschlüssel immer NULL.

Beim Variant-Datentyp werden Umwandlungen und NULL anders als JSON-Zeichenfolgen behandelt. Weitere Informationen finden Sie unter Umwandlungsregeln für den Variant-Datentyp und NULL-Regeln beim Variant-Datentyp.