Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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_NAMEundcolumn_name:field_namenach 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. - Variant-Spalten weisen Einschränkungen für einige Vorgänge auf. Informationen finden Sie unter Einschränkungen.
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 (SQL oder Python) wandelt eine JSON-Zeichenfolge in den VARIANT Typ um.
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.
SQL
SELECT parse_json('{"key": 1, "data": [2, 3, "str"]}');
Python
spark.range(1).select(parse_json(lit('{"key": 1, "data": [2, 3, "str"]}'))).display()
Die parse_json Funktion gibt einen Fehler zurück, wenn die JSON-Zeichenfolge falsch formatiert ist, die Größenbeschränkung der Variante überschreitet oder ungültig ist. Verwenden Sie die try_parse_json Funktion (SQL oder Python), um stattdessen ein NULL zurückzugeben, wenn ein Fehler bei der Analyse auftritt.
SQL
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
Python
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
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.
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.
Hinweis
Um diese Funktionen mit PySpark-DataFrames zu verwenden, importieren Sie sie aus pyspark.sql.functions.
| 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 | ist 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. |