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]
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_NAME
etcolumn_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 NULL
s différemment des chaînes JSON. Consultez les règles de diffusion de type devariante et les règles de variante nulle.