Partager via


bag_unpack, plug-in

S’applique à : ✅Microsoft Fabric✅Azure Data Explorer

Le bag_unpack plug-in décompresse une seule colonne de type dynamic, en traitant chaque emplacement de niveau supérieur du conteneur de propriétés comme une colonne. Le plug-in est appelé avec l’opérateur evaluate .

Syntaxe

T | bag_unpack( evaluate Column [, OutputColumnPrefix ] [, columnsConflict ] [, ignoredProperties ] ) [: OutputSchema]

En savoir plus sur les conventions de syntaxe.

Paramètres

Nom Type Requise Description
T string ✔️ Entrée tabulaire dont la colonne doit être décompressée.
Colonne dynamic ✔️ Colonne de T à décompresser.
OutputColumnPrefix string Préfixe courant à ajouter à toutes les colonnes produites par le plug-in.
columnsConflict string Direction de la résolution des conflits de colonne. Valeurs valides :
error - La requête génère une erreur (par défaut)
replace_source - La colonne source est remplacée
keep_source - La colonne source est conservée
ignoredProperties dynamic Ensemble facultatif de propriétés de conteneur à ignorer. }
OutputSchema Noms et types pour les colonnes attendues de la sortie du bag_unpack plug-in. La spécification du schéma attendu optimise l’exécution de la requête en n’ayant pas à exécuter la requête réelle pour explorer le schéma. Pour plus d’informations sur la syntaxe, consultez la syntaxe du schéma de sortie.

Syntaxe de schéma de sortie

(ColumnName : ColumnType [, ...])

Pour ajouter toutes les colonnes de la table d’entrée à la sortie du plug-in, utilisez un caractère générique * comme premier paramètre, comme suit :

(* , ColumnName : ColumnType [, ...])

Retours

Le bag_unpack plug-in retourne une table avec autant d’enregistrements que son entrée tabulaire (T). Le schéma de la table est identique au schéma de son entrée tabulaire avec les modifications suivantes :

  • La colonne d’entrée spécifiée (colonne) est supprimée.
  • Le schéma est étendu avec autant de colonnes qu’il existe des emplacements distincts dans les valeurs de conteneur de propriétés de niveau supérieur de T. Le nom de chaque colonne correspond au nom de chaque emplacement, éventuellement préfixé par OutputColumnPrefix. Son type est soit le type de l’emplacement, si toutes les valeurs du même emplacement ont le même type, soit dynamicsi les valeurs diffèrent en type.

Remarque

  • Si OutputSchema n’est pas spécifié, le schéma de sortie du plug-in varie en fonction des valeurs de données d’entrée. Par conséquent, plusieurs exécutions du plug-in à l’aide de différentes entrées de données peuvent produire un schéma de sortie différent.

  • Les données d’entrée du plug-in doivent être telles que le schéma de sortie suit toutes les règles d’un schéma tabulaire. En particulier :

    • Un nom de colonne de sortie ne peut pas être identique à une colonne existante dans l’entrée tabulaire T, sauf s’il s’agit de la colonne à décompresser (Colonne), car cela produit deux colonnes portant le même nom.

    • Tous les noms d’emplacements, lorsqu’ils sont préfixés par OutputColumnPrefix, doivent être des noms d’entité valides et suivre les règles d’affectation de noms d’identificateur.

  • Les valeurs NULL sont ignorées.

Exemples

Développer un sac

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d)

Sortie

Âge Nom
20 John
40 Dave
30 Jasmin

Développer un conteneur avec OutputColumnPrefix

Développez un conteneur et utilisez l’option OutputColumnPrefix pour produire des noms de colonnes commençant par le préfixe « Property_ ».

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, 'Property_')

Sortie

Property_Age Property_Name
20 John
40 Dave
30 Jasmin

Développer un conteneur avec columnsConflict

Développez un conteneur et utilisez l’option columnsConflict permettant de résoudre les conflits entre les colonnes existantes et les colonnes produites par l’opérateur bag_unpack() .

datatable(Name:string, d:dynamic)
[
    'Old_name', dynamic({"Name": "John", "Age":20}),
    'Old_name', dynamic({"Name": "Dave", "Age":40}),
    'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='replace_source') // Use new name

Sortie

Âge Nom
20 John
40 Dave
30 Jasmin
datatable(Name:string, d:dynamic)
[
    'Old_name', dynamic({"Name": "John", "Age":20}),
    'Old_name', dynamic({"Name": "Dave", "Age":40}),
    'Old_name', dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d, columnsConflict='keep_source') // Keep old name

Sortie

Âge Nom
20 Old_name
40 Old_name
30 Old_name

Développer un conteneur avec ignoredProperties

Développez un conteneur et utilisez l’option ignoredProperties pour ignorer certaines propriétés dans le conteneur de propriétés.

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20, "Address": "Address-1" }),
    dynamic({"Name": "Dave", "Age":40, "Address": "Address-2"}),
    dynamic({"Name": "Jasmine", "Age":30, "Address": "Address-3"}),
]
// Ignore 'Age' and 'Address' properties
| evaluate bag_unpack(d, ignoredProperties=dynamic(['Address', 'Age']))

Sortie

Nom
John
Dave
Jasmin

Développer un conteneur avec un OutputSchema défini par une requête

Développez un conteneur et utilisez l’option OutputSchema permettant d’évaluer différentes optimisations avant d’exécuter la requête réelle.

datatable(d:dynamic)
[
    dynamic({"Name": "John", "Age":20}),
    dynamic({"Name": "Dave", "Age":40}),
    dynamic({"Name": "Jasmine", "Age":30}),
]
| evaluate bag_unpack(d) : (Name:string, Age:long)

Sortie

Nom Âge
John 20
Dave 40
Jasmin 30

Développez un conteneur et utilisez l’option OutputSchema permettant d’évaluer différentes optimisations avant d’exécuter la requête réelle. Utilisez un caractère générique * pour retourner toutes les colonnes de la table d’entrée.

datatable(d:dynamic, Description: string)
[
    dynamic({"Name": "John", "Age":20}), "Student",
    dynamic({"Name": "Dave", "Age":40}), "Teacher",
    dynamic({"Name": "Jasmine", "Age":30}), "Student",
]
| evaluate bag_unpack(d) : (*, Name:string, Age:long)

Sortie

Description Nom Âge
Étudiant John 20
Enseignant Dave 40
Étudiant Jasmin 30