union-operatorn

Tar två eller flera tabeller och returnerar raderna i dem alla.

Syntax

[ T| ] union [ UnionParameters ] [] [withsource=outer|kind=innerColumnName] [isfuzzy=|truefalse] Tabeller

Läs mer om syntaxkonventioner.

Anteckning

Operatorns union åtgärd kan ändras genom att ange best_effort egenskapen request till true, antingen med hjälp av en set-instruktion eller via egenskaper för klientbegäran. När den här egenskapen är inställd på trueignorerar operatorn union fuzzy-upplösning och anslutningsfel för att köra något av de underuttryck som "unioneras" och ger en varning i frågestatusresultatet.

Parametrar

Namn Typ Obligatorisk Beskrivning
T string Tabelluttrycket för indata.
UnionParameters string Noll eller fler blankstegsavgränsade parametrar i form av Namnvärde= som styr beteendet för radmatchningsåtgärden och körningsplanen. Se unionsparametrar som stöds.
kind string Antingen inner eller outer. inner gör att resultatet har den delmängd av kolumner som är gemensamma för alla indatatabeller. outer gör att resultatet har alla kolumner som förekommer i någon av indata. Celler som inte definieras av en indatarad anges till null. Standardvärdet är outer.

Med outerhar resultatet alla kolumner som förekommer i någon av indata, en kolumn för varje namn och typförekomster. Det innebär att om en kolumn visas i flera tabeller och har flera typer, har den en motsvarande kolumn för varje typ i unionsresultatet. Det här kolumnnamnet har suffixet "_" följt av ursprungskolumntypen.
withsource=Columnname string Om det anges innehåller utdata en kolumn med namnet ColumnName vars värde anger vilken källtabell som har bidragit med varje rad. Om frågan effektivt refererar till tabeller från mer än en databas, inklusive standarddatabasen, har värdet för den här kolumnen ett tabellnamn som är kvalificerat med databasen. kluster- och databaskvalifikationer finns i värdet om fler än ett kluster refereras till.
isfuzzy bool Om det är inställt på true, tillåter fuzzy upplösning av union ben. Uppsättningen unionskällor reduceras till den uppsättning tabellreferenser som finns och är tillgängliga vid tidpunkten när frågan analyseras och förbereds för körning. Om minst en sådan tabell hittades ger eventuella lösningsfel en varning i frågestatusresultatet, men förhindrar inte frågekörningen. Om inga lösningar lyckades returnerar frågan ett fel. Standardvärdet är false.

isfuzzy=true gäller endast för lösningsfasen för union källor. När uppsättningen med källtabeller har fastställts ignoreras inte eventuella ytterligare frågefel.
Tabeller string En eller flera kommaavgränsade tabellreferenser, ett frågeuttryck omgivet av parenteser eller en uppsättning tabeller som har angetts med jokertecken. Skulle till exempel E* utgöra en union av alla tabeller i databasen vars namn börjar E.

Unionsparametrar som stöds

Namn Typ Obligatorisk Beskrivning
hint.concurrency int Antyder systemet hur många samtidiga underfrågor av operatorn union som ska köras parallellt. Standardvärdet är antalet CPU-kärnor på den enskilda noden i klustret (2 till 16).
hint.spread int Anger för systemet hur många noder som ska användas av körningen av samtidiga union underfrågor. Standard är 1.
Namn Typ Obligatorisk Beskrivning
T string Tabelluttrycket för indata.
kind string Antingen inner eller outer. inner gör att resultatet har den delmängd av kolumner som är gemensamma för alla indatatabeller. outer gör att resultatet har alla kolumner som förekommer i någon av indata. Celler som inte definieras av en indatarad anges till null. Standardvärdet är outer.

Med outerhar resultatet alla kolumner som förekommer i någon av indata, en kolumn för varje namn och typförekomster. Det innebär att om en kolumn visas i flera tabeller och har flera typer, har den en motsvarande kolumn för varje typ i unionsresultatet. Det här kolumnnamnet har suffixet "_" följt av ursprungskolumntypen.
withsource=Columnname string Om det anges innehåller utdata en kolumn med namnet ColumnName vars värde anger vilken källtabell som har bidragit med varje rad. Om frågan effektivt refererar till tabeller från mer än en databas, inklusive standarddatabasen, har värdet för den här kolumnen ett tabellnamn som är kvalificerat med databasen. kluster- och databaskvalifikationer finns i värdet om fler än ett kluster refereras till.
isfuzzy bool Om det är inställt på true, tillåter fuzzy upplösning av union ben. Uppsättningen unionskällor reduceras till den uppsättning tabellreferenser som finns och är tillgängliga vid tidpunkten när frågan analyseras och förbereds för körning. Om minst en sådan tabell hittades ger eventuella lösningsfel en varning i frågestatusresultatet, men förhindrar inte frågekörningen. Om inga lösningar lyckades returnerar frågan ett fel. Men i frågor mellan arbetsytor och mellan appar misslyckas frågan om någon av arbetsytorna eller apparna inte hittas. Standardvärdet är false.

isfuzzy=true gäller endast för lösningsfasen för union källor. När uppsättningen med källtabeller har fastställts ignoreras inte eventuella ytterligare frågefel.
Tabeller string En eller flera kommaavgränsade tabellreferenser, ett frågeuttryck omgivet av parenteser eller en uppsättning tabeller som har angetts med jokertecken. Skulle till exempel E* utgöra en union av alla tabeller i databasen vars namn börjar E.

När listan över tabeller är känd bör du avstå från att använda jokertecken. Vissa arbetsytor innehåller ett mycket stort antal tabeller som skulle leda till ineffektiv körning. Tabeller kan också läggas till över tid, vilket leder till oväntade resultat.

Anteckning

  • Omfånget union kan innehålla let-instruktioner om de tilldelas nyckelordet view .
  • Omfånget union innehåller inte funktioner. Om du vill inkludera en funktion definierar du en let-instruktion med nyckelordet view .
  • Det finns ingen garanti för i vilken ordning fackföreningsbenen kommer att visas, men om varje ben har en order by operatör kommer varje ben att sorteras.

Returer

En tabell med så många rader som det finns i alla indatatabeller.

Exempel

Tabeller med sträng i namn eller kolumn

union K* | where * has "Kusto"

Rader från alla tabeller i databasen vars namn börjar med Koch i vilken kolumn som helst innehåller ordet Kusto.

Distinkt antal

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

Antalet distinkta användare som har producerat antingen en Query händelse eller en Command händelse under den senaste dagen. I resultatet anger kolumnen 'SourceTable' antingen "Fråga" eller "Kommando".

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

Den här effektivare versionen ger samma resultat. Den filtrerar varje tabell innan den skapar unionen.

Använda 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 

Resultat

Antal
2

Observera frågestatus – följande varning returnerades: 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 

Resultat

Antal
3

Observera frågestatus – följande varning returnerades: Failed to resolve entity 'SomeView*'

Typer av källkolumner matchar inte

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

Resultat

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 

Resultat

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

Kolumnen x från View_1 tog emot suffixet _longoch eftersom en kolumn med namnet x_long redan finns i resultatschemat avduplicerades kolumnnamnen, vilket gav en ny kolumn- x_long1