Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
Cette fonctionnalité est disponible en préversion publique.
Cet article décrit les modifications et les différences comportementales dans la syntaxe et la sémantique lors de l’utilisation du type de données Variant. Cet article suppose que vous êtes familiarisé avec l’utilisation des données de chaîne JSON sur Azure Databricks. Pour les nouveaux utilisateurs d’Azure Databricks, il est conseillé d’utiliser la variante sur les chaînes JSON lorsque vous stockez des données semi-structurées qui nécessitent une certaine flexibilité pour les schémas modifiés ou inconnus. Consultez Données semi-structurées de modèle.
Dans Databricks Runtime 15.3 et les versions ultérieures, vous pouvez utiliser le type de données Variant pour encoder et interroger des données semi-structurées. Databricks recommande une variante 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 les variantes permettent de remplacer des types complexes Spark natifs comme des structs et des tableaux dans certains cas d’usage.
Comment interroger les données relatives aux variantes ?
Les données relatives aux variantes utilisent les mêmes opérateurs pour interroger des champs, des sous-champs et des é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 interroger un élément de tableau, utilisez [n] où n représente 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 peuvent interrompre les requêtes existantes lors de la mise à niveau de chaînes JSON vers des variantes :
- Tous les éléments de chemin d’accès de variante sont mis en correspondance dans le respect de la casse. Les chaînes JSON ne respectent pas la casse. Cela signifie que, pour la 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 d’un tableau. - La variante encode les
NULLvaleurs différemment des chaînes JSON. Consultez les règles de variante nulle. - Les colonnes variant présentent des limitations lors de certaines opérations. Consultez Limitations.
Convertir des chaînes JSON en et depuis des variantes
Dans Databricks Runtime 15.3 et les versions ultérieures, la to_json fonction dispose de fonctionnalités supplémentaires pour diffuser VARIANT des types en chaînes JSON. Les options sont ignorées lors de la conversion VARIANT en chaîne JSON. Voir to_json.
La parse_json fonction (SQL ou Python) transforme une chaîne JSON en VARIANT type. Bien qu’il s’agisse parse_json(json_string_column) de l’inverse logique de to_json(variant_column), les règles de conversion suivantes décrivent pourquoi il n’est pas l’inverse exact :
- L’espace blanc n’est pas parfaitement conservé.
- L’ordre des clés est arbitraire.
- Les zéros de fin en nombres peuvent être tronqués.
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()
La parse_json fonction retourne une erreur si la chaîne JSON est incorrecte, dépasse la limite de taille de variante ou n’est pas valide. Utilisez la fonction try_parse_json ou Python pour retourner un lorsqu'une erreur lors de l’analyse se produit.
SQL
SELECT try_parse_json('{"a" : invalid, "b" : 2}');
Python
spark.range(1).select(try_parse_json(lit('{"a" : invalid, "b" : 2}'))).display()
Quelles sont les fonctions SQL permettant de travailler avec des variantes ?
Les fonctions Apache Spark SQL disponibles dans Databricks Runtime 15.3 et les versions ultérieures fournissent des méthodes pour interagir avec les données relatives aux variantes. Le tableau suivant inclut la nouvelle fonction, la fonction de chaîne JSON correspondante et des notes sur les différences comportementales.
Les variantes gèrent la diffusion et NULLs différemment des chaînes JSON. Consultez les règles de diffusion de type devariante et les règles de variante nulle.
Remarque
Pour utiliser ces fonctions avec des DataFrames PySpark, importez-les à partir de pyspark.sql.functions.
| Fonction de variante | Fonction de chaîne JSON | Notes |
|---|---|---|
| variant_get | diffuser et get_json_object | Prend une expression, un chemin et un type. Suit toutes les règles pour les chemins de variantes, les valeurs de diffusion et les valeurs nulles. |
| try_variant_get | try_cast et get_json_object | Prend une expression, un chemin et un type. Suit toutes les règles pour les chemins de variantes, les valeurs de diffusion et les valeurs nulles. |
| is_variant_null | a la valeur Null | Vérifie si l’expression stocke une valeur VARIANT encodée sous forme de NULL. Utilise is null pour vérifier si l’expression d’entrée est NULL. |
| schema_of_variant | schema_of_json | Lorsque vous déterminez le schéma d’un ARRAY<elementType>, elementType peut être déduit comme VARIANT s’il existe des types en conflit trouvés dans les données. |
| schema_of_variant_agg | schema_of_json_agg | Lorsqu’aucun type le moins commun n’est identifié, le type est dérivé comme VARIANT. |
| variant_explode | explode | Sorties pos, key et value colonnes. Lors de l’explosion d’un tableau, la valeur de la clé de sortie est toujours nulle. |
| variant_explode_outer | explode_outer | Sorties pos, key et value colonnes. Lors de l’explosion d’un tableau, la valeur de la clé de sortie est toujours nulle. |