Partager via


opérateur union

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

Syntaxe

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

En savoir plus sur les conventions de syntaxe.

Remarque

L’opération de l’opérateur union peut être modifiée en définissant la best_effort propriété truede requête sur , à l’aide d’une instruction set ou via des propriétés de requête client. Lorsque cette propriété est définie true, l’opérateur union ignore la résolution approximative et les échecs de connectivité pour exécuter l’une des sous-expressions « unioned » et générer un avertissement dans les résultats de l’état de la requête.

Paramètres

Nom Type Requise Description
T string Expression tabulaire d’entrée.
UnionParameters string zéro ou plusieurs paramètres séparés par des espaces, qui se présentent sous la forme Nom = Valeur et qui contrôlent le comportement de l'opération de correspondance des lignes et du plan d'exécution. Consultez les paramètres d’union pris en charge.
kind string inner ou outer. inner entraîne l’utilisation du sous-ensemble de colonnes communes à toutes les tables d’entrée. outer entraîne l’affichage de 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 sont définies sur null. Par défaut, il s’agit de outer.

Avec outer, le résultat comporte toutes les colonnes qui se produisent dans l’une des entrées, une colonne pour chaque nom et occurrences 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 suffixe avec un '_' 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 efficacement 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 valeur est définie true, autorise la résolution approximative des jambes d’union. L’ensemble de sources d’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 les résultats de l’état de la requête, 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 de tables sources est déterminé, les échecs de requête supplémentaires possibles ne seront 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 Requise 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 d’UC 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 Requise Description
T string Expression tabulaire d’entrée.
kind string inner ou outer. inner entraîne l’utilisation du sous-ensemble de colonnes communes à toutes les tables d’entrée. outer entraîne l’affichage de 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 sont définies sur null. Par défaut, il s’agit de outer.

Avec outer, le résultat comporte toutes les colonnes qui se produisent dans l’une des entrées, une colonne pour chaque nom et occurrences 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 suffixe avec un '_' 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 efficacement 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 valeur est définie true, autorise la résolution approximative des jambes d’union. L’ensemble de sources d’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 les résultats de l’état de la requête, 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 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 de tables sources est déterminé, les échecs de requête supplémentaires possibles ne seront 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.

Remarque

  • L’étendue union peut inclure des instructions let si elles sont attribuées avec le view mot clé.
  • L’étendue union n’inclut pas les 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 union seront affichées, mais si chaque jambe a un order by opérateur, alors 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