Partager via


Comment la variante diffère-t-elle des chaînes JSON ?

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]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_NAME et column_name:field_name recherchent 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 NULL valeurs différemment des chaînes JSON. Consultez les règles de variante nulle.

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 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.

La parse_json fonction retourne une erreur si la chaîne JSON est incorrecte ou dépasse la limite de taille de variante. Utilisez la fonction try_parse_json pour retourner à la place une NULL lorsqu’une erreur survient lors de l’analyse.

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.

Remarque

Pour utiliser ces fonctions avec des DataFrames PySpark, importez-les à partir de pyspark.sql.functions. variant_explode et variant_explode_outer ne sont pas pris en charge dans PySpark.

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 is null Vérifie si l’expression stocke une valeur NULL encodée sous forme de VARIANT. 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.

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.