bag_unpack, plug-in
Le bag_unpack
plug-in décompresse une seule colonne de type dynamic
, en traitant chaque emplacement de niveau supérieur du sac de propriétés comme une colonne. Le plug-in est appelé avec l’opérateur evaluate
.
Syntax
T|
evaluate
bag_unpack(
Colonne [,
OutputColumnPrefix ] [,
columnsConflict ] [,
ignoredProperties ] )
[:
OutputSchema]
Découvrez les conventions de syntaxe.
Paramètres
Nom | Type | Obligatoire | Description |
---|---|---|---|
T | string |
✔️ | Entrée tabulaire dont la colonne Colonne doit être décompressée. |
Colonne | dynamic |
✔️ | Colonne de T à décompresser. |
OutputColumnPrefix | string |
Préfixe commun à ajouter à toutes les colonnes produites par le plug-in. | |
colonnesConflict | string |
Direction de la résolution des conflits de colonnes. Valeurs valides :error - La requête génère une erreur (par défaut)replace_source - La colonne source est remplacéekeep_source - La colonne source est conservée |
|
ignoredProperties | dynamic |
Ensemble facultatif de propriétés de sac à 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 d’abord la requête réelle pour explorer le schéma. Pour plus d’informations sur la syntaxe, consultez 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 sac 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
dynamic
, si les valeurs diffèrent par type.
Notes
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 d’entrées de données différentes peuvent produire un schéma de sortie différent.
Notes
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 génère 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 de nommage de l’identificateur.
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
Age | Nom |
---|---|
20 | John |
40 | Dave |
30 | Jasmine |
Développer un sac avec OutputColumnPrefix
Développez un sac 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 | Jasmine |
Développer un sac avec des colonnesConflict
Développez un sac et utilisez l’option columnsConflict
pour 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
Age | Nom |
---|---|
20 | John |
40 | Dave |
30 | Jasmine |
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
Age | Nom |
---|---|
20 | Old_name |
40 | Old_name |
30 | Old_name |
Développer un sac avec ignoredProperties
Développez un sac 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 |
Jasmine |
Développer un sac avec un OutputSchema défini par requête
Développez un sac et utilisez l’option OutputSchema
pour permettre l’évaluation de 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 | Age |
---|---|
John | 20 |
Dave | 40 |
Jasmine | 30 |
Développez un sac et utilisez l’option OutputSchema
pour permettre l’évaluation de 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 | Age |
---|---|---|
Étudiant | John | 20 |
Enseignant | Dave | 40 |
Étudiant | Jasmine | 30 |
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour