opérateur union

Prend deux tables ou plus et retourne les lignes de toutes les tables.

Syntaxe

[ T| ] union [ UnionParameters ] [kind=|outerinner] [withsource=ColumnName] [isfuzzy=|truefalse] Tables

Découvrez les conventions de syntaxe.

Notes

L’opération de l’opérateur union peut être modifiée en affectant à truela propriété request la valeur , à l’aide best_effort d’une instruction set ou par le biais des propriétés de requête du client. Lorsque cette propriété a la truevaleur , l’opérateur ignore les union échecs de résolution approximative et de connectivité pour exécuter l’une des sous-expressions « unioned » et génère un avertissement dans la requête status résultats.

Paramètres

Nom Type Obligatoire Description
T string Expression tabulaire d’entrée.
UnionParameters string zéro ou plusieurs paramètres séparés par un espace, sous la forme Nom=Valeur, qui contrôlent le comportement de l’opération de mise en correspondance des lignes et du plan d’exécution. Consultez paramètres d’union pris en charge.
kind string inner ou outer. inner fait en sorte que le résultat ait le sous-ensemble de colonnes qui sont communes à toutes les tables d’entrée. outer fait en sorte que le résultat ait toutes les colonnes qui se produisent dans l’une des entrées. Les cellules qui ne sont pas définies par une ligne d’entrée ont la valeur null. Par défaut, il s’agit de outer.

Avec outer, le résultat contient toutes les colonnes qui se produisent dans l’une des entrées, une colonne pour chaque occurrence de nom et de type. Cela signifie que si une colonne apparaît dans plusieurs tables et a plusieurs types, elle a une colonne correspondante pour chaque type dans le résultat de l’union. Ce nom de colonne est assorti d’un suffixe « _ » suivi du type de colonne d’origine.
withsource=Columnname string Si elle est spécifiée, la sortie inclut une colonne appelée ColumnName dont la valeur indique la table source qui a contribué à chaque ligne. Si la requête référence effectivement des tables de plusieurs bases de données, y compris la base de données par défaut, la valeur de cette colonne a un nom de table qualifié avec la base de données. Les qualifications de cluster et de base de données sont présentes dans la valeur si plusieurs clusters sont référencés.
isfuzzy bool Si la truevaleur est , autorise la résolution approximative des jambes d’union. L’ensemble de sources union est réduit à l’ensemble de références de table qui existent et sont accessibles au moment de l’analyse de la requête et de la préparation de l’exécution. Si au moins une table de ce type a été trouvée, tout échec de résolution génère un avertissement dans la requête status résultats, mais n’empêche pas l’exécution de la requête. Si aucune résolution n’a réussi, la requête retourne une erreur. Par défaut, il s’agit de false.

isfuzzy=true s’applique uniquement à la phase de résolution des sources de l’union. Une fois que l’ensemble des tables sources est déterminé, les éventuels échecs de requête supplémentaires ne sont pas supprimés.
Tables string Une ou plusieurs références de table séparées par des virgules, une expression de requête entre parenthèses ou un ensemble de tables spécifiées avec un caractère générique. Par exemple, E* formerait l’union de toutes les tables de la base de données dont le nom commence par E.

Paramètres d’union pris en charge

Nom Type Obligatoire Description
hint.concurrency int Indique au système le nombre de sous-requêtes simultanées de l’opérateur union qui doivent être exécutées en parallèle. La valeur par défaut est le nombre de cœurs de processeur sur le nœud unique du cluster (2 à 16).
hint.spread int Indique au système le nombre de nœuds que doit utiliser l’exécution de sous-requêtes union simultanées. La valeur par défaut est 1.
Nom Type Obligatoire Description
T string Expression tabulaire d’entrée.
kind string inner ou outer. inner fait en sorte que le résultat ait le sous-ensemble de colonnes qui sont communes à toutes les tables d’entrée. outer fait en sorte que le résultat ait toutes les colonnes qui se produisent dans l’une des entrées. Les cellules qui ne sont pas définies par une ligne d’entrée ont la valeur null. Par défaut, il s’agit de outer.

Avec outer, le résultat contient toutes les colonnes qui se produisent dans l’une des entrées, une colonne pour chaque occurrence de nom et de type. Cela signifie que si une colonne apparaît dans plusieurs tables et a plusieurs types, elle a une colonne correspondante pour chaque type dans le résultat de l’union. Ce nom de colonne est assorti d’un suffixe « _ » suivi du type de colonne d’origine.
withsource=Columnname string Si elle est spécifiée, la sortie inclut une colonne appelée ColumnName dont la valeur indique la table source qui a contribué à chaque ligne. Si la requête référence effectivement des tables de plusieurs bases de données, y compris la base de données par défaut, la valeur de cette colonne a un nom de table qualifié avec la base de données. Les qualifications de cluster et de base de données sont présentes dans la valeur si plusieurs clusters sont référencés.
isfuzzy bool Si la truevaleur est , autorise la résolution approximative des jambes d’union. L’ensemble de sources union est réduit à l’ensemble de références de table qui existent et sont accessibles au moment de l’analyse de la requête et de la préparation de l’exécution. Si au moins une table de ce type a été trouvée, tout échec de résolution génère un avertissement dans la requête status résultats, mais n’empêche pas l’exécution de la requête. Si aucune résolution n’a réussi, la requête retourne une erreur. Toutefois, dans les requêtes inter-espaces de travail et inter-applications, si l’un des espaces de travail ou des applications est introuvable, la requête échoue. Par défaut, il s’agit de false.

isfuzzy=true s’applique uniquement à la phase de résolution des sources de l’union. Une fois que l’ensemble des tables sources est déterminé, les éventuels échecs de requête supplémentaires ne sont pas supprimés.
Tables string Une ou plusieurs références de table séparées par des virgules, une expression de requête entre parenthèses ou un ensemble de tables spécifiées avec un caractère générique. Par exemple, E* formerait l’union de toutes les tables de la base de données dont le nom commence par E.

Quand la liste de tables est connue, évitez d’utiliser des caractères génériques. Certains espaces de travail contiennent un très grand nombre de tables susceptibles d’aboutir à une exécution inefficace. Les tables peuvent également être ajoutées au fur et à mesure et aboutir à des résultats imprévisibles.

Notes

  • L’étendue union peut inclure des instructions let si elle est attribuée à l’mot clé view .
  • L’étendue union n’inclut pas de fonctions. Pour inclure une fonction, définissez une instruction let avec le view mot clé.
  • Il n’y a aucune garantie de l’ordre dans lequel les jambes d’union apparaîtront, mais si chaque jambe a un order by opérateur, chaque jambe sera triée.

Retours

Une table contenant autant de lignes que dans l’ensemble des tables d’entrée.

Exemples

Tables avec une chaîne dans le nom ou la colonne

union K* | where * has "Kusto"

Lignes extraites de toutes les tables de la base de données dont le nom commence par K et dans lesquelles une colonne contient le mot Kusto.

Nombre distinct

union withsource=SourceTable kind=outer Query, Command
| where Timestamp > ago(1d)
| summarize dcount(UserId)

Le nombre d’utilisateurs ayant produit un événement Query ou un événement Command au cours de la journée précédente. Dans le résultat, la colonne ’SourceTable’ indique « Requête » ou « Commande ».

Query
| where Timestamp > ago(1d)
| union withsource=SourceTable kind=outer 
   (Command | where Timestamp > ago(1d))
| summarize dcount(UserId)

Cette version plus efficace génère le même résultat. Il filtre chaque table avant la création de l’union.

Utilisation de isfuzzy=true

// Using union isfuzzy=true to access non-existing view:                                     
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true
(View_1 | where x > 0), 
(View_2 | where x > 0),
(View_3 | where x > 0)
| count 

Sortie

Count
2

Observation de l’état de la requête – l’avertissement suivant a été retourné : Failed to resolve entity 'View_3'

// Using union isfuzzy=true and wildcard access:
let View_1 = view () { print x=1 };
let View_2 = view () { print x=1 };
let OtherView_1 = view () { print x=1 };
union isfuzzy=true View*, SomeView*, OtherView*
| count 

Sortie

Count
3

Observation de l’état de la requête – l’avertissement suivant a été retourné : Failed to resolve entity 'SomeView*'

Incompatibilité des types de colonnes sources

let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
union withsource=TableName View_1, View_2

Sortie

TableName x_long x_int
View_1 1
View_2 2
let View_1 = view () { print x=1 };
let View_2 = view () { print x=toint(2) };
let View_3 = view () { print x_long=3 };
union withsource=TableName View_1, View_2, View_3 

Sortie

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

La colonne x de View_1 a reçu le suffixe _long, et comme une colonne nommée x_long existe déjà dans le schéma de résultat, les noms de colonne ont été dédupliqués, ce qui génère une nouvelle colonne- x_long1