En quoi le variant est-il différent des chaînes JSON ?
Aperçu
Cette fonctionnalité est en aperçu public.
Cet article décrit les changements de comportement et les différences de syntaxe et de sémantique lors de l'utilisation du type de données variant. Cet article suppose que vous êtes familiarisé avec le traitement des données de chaîne JSON sur Databricks. Pour les utilisateurs novices de Databricks, vous devriez utiliser la variante plutôt que les chaînes JSON chaque fois que vous stockez des données semi-structurées qui nécessitent de la flexibilité pour un schéma changeant ou inconnu. Voir Modéliser les données semi-structurées.
Dans Databricks Runtime 15.3 et versions ultérieures, vous pouvez utiliser le type de données variant pour encoder et interroger des données semi-structurées. Databricks recommande le type de données variant en remplacement du stockage de données semi-structurées à l'aide de chaînes JSON. Les performances de lecture et d'écriture améliorées pour le type de données variant lui permettent de remplacer les types complexes natifs de Spark tels que les structures et les tableaux dans certains cas d'utilisation.
Comment interroger les données de variantes ?
Les données variantes utilisent les mêmes opérateurs pour query les champs, les sous-champs et les éléments de tableau.
Pour interroger un champ, utilisez :. Par exemple, column_name:field_name.
Pour interroger un sous-champ, utilisez .. Par exemple, column_name:field_name.subfield_name.
Pour query un élément de tableau, utilisez [n] où n est la valeur d'index entier de l'élément. Par exemple, pour interroger la première valeur d'un tableau, column_name:array_name[0].
Les différences suivantes pourraient compromettre les query existantes lors de la mise à niveau des chaînes JSON vers la variante :
- Tous les éléments de chemin de variante sont mis en correspondance de manière sensible à la casse. Les chaînes JSON ne sont pas sensibles à la casse. Cela signifie que pour une variante,
column_name:FIELD_NAMEetcolumn_name:field_namerecherchent différents champs dans les données stockées. - La syntaxe
[*]n'est pas prise en charge pour identifier ou décompresser tous les éléments dans un tableau. - Le variant encode les valeurs
NULLdifféremment des chaînes JSON. Voir Règles nulles de variante. - Les colonnes Variant ont des limitations pour certaines Opérations. Consulter Limitations.
Convertir des chaînes JSON vers et depuis variant
Dans Databricks Runtime 15,3 et versions ultérieures, la fonction to_json dispose de fonctionnalités supplémentaires pour convertir les types VARIANT en chaînes JSON. Les options sont ignorées lors de la conversion de VARIANT en chaîne JSON. Consulter to_json.
La fonction parse_json (SQL ou Python) transforme une chaîne JSON en type VARIANT. Bien que parse_json(json_string_column) soit l'inverse logique de to_json(variant_column), les règles de conversion suivantes expliquent pourquoi il ne s'agit pas de l'inverse exact :
- Les espaces ne sont pas parfaitement conservés.
- L'ordre des clés est arbitraire.
- Les zéros de fin dans les nombres peuvent être tronqués.
- SQL
- Python
SELECT parse_json('{"key": 1, "data": [2, 3, "str"]}');
spark.range(1).select(parse_json(lit('{"key": 1, "data": [2, 3, "str"]}'))).display()
La fonction parse_json renvoie une erreur si la chaîne JSON est mal formée, dépasse la limite de taille de la variante ou est invalide. Utilisez la fonction try_parse_json (SQL ou Python) pour renvoyer NULL lorsqu'une erreur d'analyse se produit.
- SQL
- Python
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
Quelles sont les fonctions SQL pour travailler avec les variantes ?
Les fonctions SQL Apache Spark disponibles dans Databricks Runtime 15,3 et versions ultérieures fournissent des méthodes pour interagir avec les données de variante. Le tableau suivant comprend la nouvelle fonction, la fonction de chaîne JSON correspondante et des notes sur les différences de comportement.
Les variantes gèrent le transtypage et les NULLdifféremment des chaînes JSON. Consultez les règles de transtypage de variante et les règles de nullité de variante.
Pour utiliser ces fonctions avec les DataFrames PySpark, importez-les depuis pyspark.sql.functions.
Fonction Variante | Fonction de chaîne JSON | Notes |
|---|---|---|
Prend une expression, un chemin et un type. Suit toutes les règles pour les chemins de variantes, le transtypage et les nulls. | ||
Prend une expression, un chemin et un type. Suit toutes les règles pour les chemins de variantes, le transtypage et les nulls. | ||
Vérifie si l'expression stocke un | ||
Lorsque l'on détermine le schéma pour un | ||
Lorsqu'aucun type commun minimal n'est identifié, le type est dérivé comme | ||
Génère | ||
Génère |