Freigeben über


union-Operator

Verwendet mindestens zwei Tabellen und gibt die Zeilen aller Tabellen zurück.

Syntax

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

Erfahren Sie mehr über Syntaxkonventionen.

Hinweis

Der Vorgang des union Operators kann geändert werden, indem die best_effort Anforderungseigenschaft truemithilfe einer set-Anweisung oder über Clientanforderungseigenschaften festgelegt wird. Wenn diese Eigenschaft auf true"unioned" festgelegt ist, ignoriert der union Operator fuzzy-Auflösungs- und Verbindungsfehler, um einen der Unterausdrücke auszuführen, die "unioned" sind, und gibt eine Warnung in den Abfragestatusergebnissen zurück.

Parameter

Name Type Erforderlich Beschreibung
T string Der Tabellarische Eingabeausdruck.
UnionParameters string Null oder mehr durch Leerzeichen getrennte Parameter in Form von Name = Wert, die das Verhalten des Vorgangs zum Zuordnen der Zeilen und den Ausführungsplan steuern. Siehe unterstützte Union-Parameter.
kind string Entweder inner oder outer. inner bewirkt, dass das Ergebnis die Teilmenge der Spalten aufweist, die allen Eingabetabellen gemeinsam sind. outer bewirkt, dass das Ergebnis alle Spalten enthält, die in einer der Eingaben auftreten. Zellen, die nicht durch eine Eingabezeile definiert sind, werden auf null. Der Standardwert ist outer.

Mit outer, das Ergebnis hat alle Spalten, die in einer der Eingaben auftreten, eine Spalte für jeden Namen und Typ vorkommen. Dies bedeutet, dass eine Spalte, wenn eine Spalte in mehreren Tabellen angezeigt wird und mehrere Typen aufweist, eine entsprechende Spalte für jeden Typ im Ergebnis der Union aufweist. Dieser Spaltenname ist mit dem Suffix '_' gefolgt vom Ursprungsspaltentyp versehen.
withsource=ColumnName string Wenn angegeben, enthält die Ausgabe eine Spalte namens ColumnName , deren Wert angibt, welche Quelltabelle jede Zeile beigetragen hat. Wenn die Abfrage effektiv auf Tabellen aus mehreren Datenbanken verweist, einschließlich der Standarddatenbank, weist der Wert dieser Spalte einen Tabellennamen auf, der mit der Datenbank qualifiziert ist. Cluster- und Datenbankqualifikationen sind im Wert vorhanden, wenn auf mehrere Cluster verwiesen wird.
isfuzzy bool Bei Festlegung auf true, lässt Fuzzy-Auflösung von Vereinigungsbeinen zu. Der Satz von Union-Quellen wird auf den Satz von Tabellenverweise reduziert, die vorhanden sind und zur Zeit zugänglich sind, während die Abfrage analysiert und für die Ausführung vorbereitet wird. Wenn mindestens eine solche Tabelle gefunden wurde, gibt ein Lösungsfehler eine Warnung in den Abfragestatusergebnissen zurück, verhindert jedoch nicht die Abfrageausführung. Wenn keine Auflösungen erfolgreich waren, gibt die Abfrage einen Fehler zurück. Der Standardwert ist false.

isfuzzy=true gilt nur für die Auflösungsphase der union-Quellen. Nachdem der Satz von Quelltabellen ermittelt wurde, werden mögliche zusätzliche Abfragefehler nicht unterdrückt.
Tabellen string Mindestens ein durch Trennzeichen getrenntes Tabellenverweise, ein Abfrageausdruck, der in Klammern eingeschlossen ist, oder eine Gruppe von Tabellen, die mit einem Wildcard angegeben sind. E* würde z. B. die Vereinigungsmenge aller Tabellen in der Datenbank bilden, deren Namen mit E beginnen.

Unterstützte Union-Parameter

Name Type Erforderlich Beschreibung
hint.concurrency int Weist das System darauf hin, wie viele gleichzeitige Unterabfragen des union-Operators parallel ausgeführt werden sollen. Der Standardwert ist die Anzahl der CPU-Kerne auf dem einzelnen Knoten des Clusters (2 bis 16).
hint.spread int Weist das System darauf hin, wie viele Knoten von der gleichzeitigen Ausführung von union-Unterabfragen verwendet werden sollen. Der Standardwert ist 1.
Name Type Erforderlich Beschreibung
T string Der Tabellarische Eingabeausdruck.
kind string Entweder inner oder outer. inner bewirkt, dass das Ergebnis die Teilmenge der Spalten aufweist, die allen Eingabetabellen gemeinsam sind. outer bewirkt, dass das Ergebnis alle Spalten enthält, die in einer der Eingaben auftreten. Zellen, die nicht durch eine Eingabezeile definiert sind, werden auf null. Der Standardwert ist outer.

Mit outer, das Ergebnis hat alle Spalten, die in einer der Eingaben auftreten, eine Spalte für jeden Namen und Typ vorkommen. Dies bedeutet, dass eine Spalte, wenn eine Spalte in mehreren Tabellen angezeigt wird und mehrere Typen aufweist, eine entsprechende Spalte für jeden Typ im Ergebnis der Union aufweist. Dieser Spaltenname ist mit dem Suffix '_' gefolgt vom Ursprungsspaltentyp versehen.
withsource=ColumnName string Wenn angegeben, enthält die Ausgabe eine Spalte namens ColumnName , deren Wert angibt, welche Quelltabelle jede Zeile beigetragen hat. Wenn die Abfrage effektiv auf Tabellen aus mehreren Datenbanken verweist, einschließlich der Standarddatenbank, weist der Wert dieser Spalte einen Tabellennamen auf, der mit der Datenbank qualifiziert ist. Cluster- und Datenbankqualifikationen sind im Wert vorhanden, wenn auf mehrere Cluster verwiesen wird.
isfuzzy bool Bei Festlegung auf true, lässt Fuzzy-Auflösung von Vereinigungsbeinen zu. Der Satz von Union-Quellen wird auf den Satz von Tabellenverweise reduziert, die vorhanden sind und zur Zeit zugänglich sind, während die Abfrage analysiert und für die Ausführung vorbereitet wird. Wenn mindestens eine solche Tabelle gefunden wurde, gibt ein Lösungsfehler eine Warnung in den Abfragestatusergebnissen zurück, verhindert jedoch nicht die Abfrageausführung. Wenn keine Auflösungen erfolgreich waren, gibt die Abfrage einen Fehler zurück. Wenn einer der Arbeitsbereiche oder Apps nicht gefunden wird, schlägt die Abfrage jedoch in Arbeitsbereichs- und App-übergreifenden Abfragen fehl. Der Standardwert ist false.

isfuzzy=true gilt nur für die Auflösungsphase der union-Quellen. Nachdem der Satz von Quelltabellen ermittelt wurde, werden mögliche zusätzliche Abfragefehler nicht unterdrückt.
Tabellen string Mindestens ein durch Trennzeichen getrenntes Tabellenverweise, ein Abfrageausdruck, der in Klammern eingeschlossen ist, oder eine Gruppe von Tabellen, die mit einem Wildcard angegeben sind. E* würde z. B. die Vereinigungsmenge aller Tabellen in der Datenbank bilden, deren Namen mit E beginnen.

Wenn die Liste der Tabellen bekannt ist, verwenden Sie keine Platzhalter. Einige Arbeitsbereiche enthalten eine sehr große Anzahl von Tabellen, die zu einer ineffizienten Ausführung führen würden. Tabellen können ebenfalls im Laufe der Zeit hinzugefügt werden, was zu unvorhergesehenen Ergebnissen führt.

Hinweis

  • Der union Bereich kann Let-Anweisungen enthalten, wenn es mit dem view Schlüsselwort verknüpft ist.
  • Der union Bereich enthält keine Funktionen. Um eine Funktion einzuschließen, definieren Sie eine Let-Anweisung mit dem view Schlüsselwort.
  • Es gibt keine Garantie für die Reihenfolge, in der die Vereinigungsbeine erscheinen, aber wenn jedes Bein über einen order by Operator verfügt, wird jedes Bein sortiert.

Gibt zurück

Eine Tabelle mit derselben Anzahl von Zeilen, wie in allen Eingabetabellen vorhanden sind.

Beispiele

Tabellen mit einer Zeichenfolge im Namen oder einer Spalte

union K* | where * has "Kusto"

Zeilen aus allen Tabellen in der Datenbank, deren Name mit K beginnt und in denen eine beliebige Spalten das Wort Kusto enthält.

Distinct Count

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

Die Anzahl der unterschiedlichen Benutzer, die während des Vortags entweder ein Query- oder ein Command-Ereignis herbeigeführt haben. Im Ergebnis gibt die Spalte „SourceTable“ entweder „Abfrage“ oder „Befehl“ an.

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

Mit dieser effizienteren Version wird dasselbe Ergebnis erzielt. Jede Tabelle wird vor dem Erstellen der Union gefiltert.

Verwenden von 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 

Output

Anzahl
2

Der Abfragestatus wird beobachtet: Die folgende Warnung wurde zurückgegeben: 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 

Output

Anzahl
3

Der Abfragestatus wird beobachtet: Die folgende Warnung wurde zurückgegeben: Failed to resolve entity 'SomeView*'

Typen von Quellspalten stimmen nicht überein

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

Output

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 

Output

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

Die Spalte x aus View_1 hat das Suffix _long erhalten, und da eine Spalte mit dem Namen x_long bereits im Ergebnisschema vorhanden ist, wurden die Spaltennamen dedupliziert, sodass eine neue Spalte erstellt wurde: x_long1.