union-Operator

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

Syntax

[ T| ] union [ UnionParameters ] [kind=inner|outer] [] [withsource=Spaltenname] [true|isfuzzy=false] Tabellen

Erfahren Sie mehr über Syntaxkonventionen.

Hinweis

Der Vorgang des union Operators kann geändert werden, indem die Anforderungseigenschaft best_effort auf truefestgelegt wird, entweder mithilfe einer set-Anweisung oder über Clientanforderungseigenschaften. Wenn diese Eigenschaft auf truefestgelegt ist, ignoriert der union Operator Fuzzyauflösungs- und Konnektivitätsfehler, um einen der "unioned"-Unterausdrücke auszuführen, und gibt eine Warnung in der Abfrage status Ergebnissen aus.

Parameter

Name Typ 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. Weitere Informationen finden Sie unter 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 werden, werden auf nullfestgelegt. Der Standardwert lautet outer.

Mit outerenthält das Ergebnis alle Spalten, die in einer der Eingaben auftreten, eine Spalte für jeden Namen und jeden Typ. Dies bedeutet, dass eine Spalte, wenn sie in mehreren Tabellen angezeigt wird und mehrere Typen aufweist, eine entsprechende Spalte für jeden Typ im Ergebnis der Union enthält. Dieser Spaltenname ist mit einem "_" gefolgt vom Ursprungsspaltentyp versehen.
withsource=Columnname string Wenn angegeben, enthält die Ausgabe eine Spalte namens ColumnName , deren Wert angibt, welche Quelltabelle die einzelnen Zeilen beigetragen hat. Wenn die Abfrage effektiv auf Tabellen aus mehr als einer Datenbank verweist, einschließlich der Standarddatenbank, hat der Wert dieser Spalte einen Tabellennamen, der mit der Datenbank qualifiziert ist. Cluster- und Datenbankqualifikationen sind im Wert vorhanden, wenn auf mehrere Cluster verwiesen wird.
isfuzzy bool Wenn auf truefestgelegt ist, lässt die Fuzzy-Auflösung von Unionschenkeln zu. Der Satz der Unionquellen wird auf den Satz von Tabellenverweise reduziert, die vorhanden sind und auf die während der Analyse der Abfrage und vorbereitung der Ausführung zugegriffen werden kann. Wenn mindestens eine solche Tabelle gefunden wurde, gibt jeder Lösungsfehler eine Warnung in der Abfrage status Ergebnissen, verhindert jedoch nicht die Abfrageausführung. Wenn keine Lösung erfolgreich war, gibt die Abfrage einen Fehler zurück. Der Standardwert lautet false.

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

Unterstützte Unionparameter

Name Typ 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 Typ 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 werden, werden auf nullfestgelegt. Der Standardwert lautet outer.

Mit outerenthält das Ergebnis alle Spalten, die in einer der Eingaben auftreten, eine Spalte für jeden Namen und jeden Typ. Dies bedeutet, dass eine Spalte, wenn sie in mehreren Tabellen angezeigt wird und mehrere Typen aufweist, eine entsprechende Spalte für jeden Typ im Ergebnis der Union enthält. Dieser Spaltenname ist mit einem "_" gefolgt vom Ursprungsspaltentyp versehen.
withsource=Columnname string Wenn angegeben, enthält die Ausgabe eine Spalte namens ColumnName , deren Wert angibt, welche Quelltabelle die einzelnen Zeilen beigetragen hat. Wenn die Abfrage effektiv auf Tabellen aus mehr als einer Datenbank verweist, einschließlich der Standarddatenbank, hat der Wert dieser Spalte einen Tabellennamen, der mit der Datenbank qualifiziert ist. Cluster- und Datenbankqualifikationen sind im Wert vorhanden, wenn auf mehrere Cluster verwiesen wird.
isfuzzy bool Wenn auf truefestgelegt ist, lässt die Fuzzy-Auflösung von Unionschenkeln zu. Der Satz der Unionquellen wird auf den Satz von Tabellenverweise reduziert, die vorhanden sind und auf die während der Analyse der Abfrage und vorbereitung der Ausführung zugegriffen werden kann. Wenn mindestens eine solche Tabelle gefunden wurde, gibt jeder Lösungsfehler eine Warnung in der Abfrage status Ergebnissen, verhindert jedoch nicht die Abfrageausführung. Wenn keine Lösung erfolgreich war, gibt die Abfrage einen Fehler zurück. Bei arbeitsbereichs- und appübergreifenden Abfragen schlägt die Abfrage jedoch fehl, wenn einer der Arbeitsbereiche oder Apps nicht gefunden wird. Der Standardwert lautet false.

isfuzzy=true gilt nur für die Auflösungsphase der union-Quellen. Sobald der Satz der Quelltabellen ermittelt wurde, werden mögliche zusätzliche Abfragefehler nicht unterdrückt.
Tabellen string Mindestens ein durch Trennzeichen getrennte Tabellenverweise, ein Abfrageausdruck mit Klammern oder eine Gruppe von Tabellen, die mit einem Feldhalter 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 er dem view Schlüsselwort (keyword) zugeordnet wird.
  • Der union Bereich enthält keine Funktionen. Um eine Funktion einzuschließen, definieren Sie eine let-Anweisung mit dem view Schlüsselwort (keyword).
  • Es gibt keine Garantie für die Reihenfolge, in der die Unionbeine angezeigt werden, 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 Zeichenfolge im Namen oder in der 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 

Ausgabe

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 

Ausgabe

Anzahl
3

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

Nicht übereinstimmende Quellspaltentypen

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

Ausgabe

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 

Ausgabe

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.