Udostępnij za pośrednictwem


operator union

Przyjmuje co najmniej dwie tabele i zwraca wiersze wszystkich z nich.

Składnia

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

Dowiedz się więcej na temat konwencji składni.

Uwaga

Operację union operatora można zmienić, ustawiając best_effort właściwość żądania na true, przy użyciu instrukcji set lub właściwości żądania klienta. Gdy ta właściwość jest ustawiona na true, union operator zlekceważy rozpoznawanie rozmyte i błędy łączności, aby wykonać dowolne z wyrażeń podrzędnych będących "unioned" i zwróci ostrzeżenie w wynikach stanu zapytania.

Parametry

Nazwisko Type Wymagania opis
T string Wyrażenie tabelaryczne danych wejściowych.
Parametry unii string Zero lub więcej parametrów rozdzielonych spacjami w postaci wartości nazwy = , które kontrolują zachowanie operacji dopasowania wiersza i planu wykonania. Zobacz obsługiwane parametry unii.
kind string inner lub outer. inner powoduje, że wynik ma podzbiór kolumn, które są wspólne dla wszystkich tabel wejściowych. outer powoduje, że wynik ma wszystkie kolumny, które występują w dowolnych danych wejściowych. Komórki, które nie są zdefiniowane przez wiersz wejściowy, są ustawione na null. Wartość domyślna to outer.

W przypadku outerelementu wynik zawiera wszystkie kolumny, które występują w dowolnych danych wejściowych, jedną kolumnę dla każdej nazwy i wystąpień typu. Oznacza to, że jeśli kolumna pojawia się w wielu tabelach i ma wiele typów, ma odpowiednią kolumnę dla każdego typu w wyniku unii. Ta nazwa kolumny ma sufiks "_", po którym następuje typ kolumny pochodzenia.
withsource=Nazwakolumny string Jeśli zostanie określony, dane wyjściowe zawierają kolumnę o nazwie ColumnName , której wartość wskazuje, która tabela źródłowa przyczyniła się do każdego wiersza. Jeśli zapytanie skutecznie odwołuje się do tabel z więcej niż jednej bazy danych, w tym domyślnej bazy danych, wartość tej kolumny ma nazwę tabeli kwalifikowaną z bazą danych. Kwalifikacje klastra i bazy danych znajdują się w wartości, jeśli odwołuje się do więcej niż jednego klastra.
isfuzzy bool Jeśli ustawiono wartość true, umożliwia rozmyte rozpoznawanie nóg unii. Zestaw źródeł unii jest zredukowany do zestawu odwołań do tabeli, które istnieją i są dostępne w tym czasie podczas analizowania zapytania i przygotowywania do wykonania. Jeśli znaleziono co najmniej jedną taką tabelę, każda awaria rozwiązywania zwraca ostrzeżenie w wynikach stanu zapytania, ale nie zapobiegnie wykonywaniu zapytania. Jeśli żadne rozwiązania nie powiodły się, zapytanie zwraca błąd. Wartość domyślna to false.

isfuzzy=true dotyczy tylko fazy rozwiązywania union problemów ze źródłami. Po ustaleniu zestawu tabel źródłowych możliwe dodatkowe błędy zapytań nie zostaną pominięte.
Tabele string Co najmniej jedno odwołanie do tabeli rozdzielanej przecinkami, wyrażenie zapytania ujęte w nawiasy lub zestaw tabel określonych za pomocą symbolu wieloznacznych. Na przykład E* może utworzyć związek wszystkich tabel w bazie danych, których nazwy zaczynają się .E

Obsługiwane parametry unii

Nazwisko Type Wymagania opis
hint.concurrency int Wskazuje system, ile współbieżnych podzapytania union operatora ma być wykonywanych równolegle. Wartość domyślna to liczba rdzeni procesora CPU w jednym węźle klastra (od 2 do 16).
hint.spread int Wskazuje system, ile węzłów powinno być używanych przez współbieżne union wykonywanie podzapytania. Wartość domyślna to 1.
Nazwisko Type Wymagania opis
T string Wyrażenie tabelaryczne danych wejściowych.
kind string inner lub outer. inner powoduje, że wynik ma podzbiór kolumn, które są wspólne dla wszystkich tabel wejściowych. outer powoduje, że wynik ma wszystkie kolumny, które występują w dowolnych danych wejściowych. Komórki, które nie są zdefiniowane przez wiersz wejściowy, są ustawione na null. Wartość domyślna to outer.

W przypadku outerelementu wynik zawiera wszystkie kolumny, które występują w dowolnych danych wejściowych, jedną kolumnę dla każdej nazwy i wystąpień typu. Oznacza to, że jeśli kolumna pojawia się w wielu tabelach i ma wiele typów, ma odpowiednią kolumnę dla każdego typu w wyniku unii. Ta nazwa kolumny ma sufiks "_", po którym następuje typ kolumny pochodzenia.
withsource=Nazwakolumny string Jeśli zostanie określony, dane wyjściowe zawierają kolumnę o nazwie ColumnName , której wartość wskazuje, która tabela źródłowa przyczyniła się do każdego wiersza. Jeśli zapytanie skutecznie odwołuje się do tabel z więcej niż jednej bazy danych, w tym domyślnej bazy danych, wartość tej kolumny ma nazwę tabeli kwalifikowaną z bazą danych. Kwalifikacje klastra i bazy danych znajdują się w wartości, jeśli odwołuje się do więcej niż jednego klastra.
isfuzzy bool Jeśli ustawiono wartość true, umożliwia rozmyte rozpoznawanie nóg unii. Zestaw źródeł unii jest zredukowany do zestawu odwołań do tabeli, które istnieją i są dostępne w tym czasie podczas analizowania zapytania i przygotowywania do wykonania. Jeśli znaleziono co najmniej jedną taką tabelę, każda awaria rozwiązywania zwraca ostrzeżenie w wynikach stanu zapytania, ale nie zapobiegnie wykonywaniu zapytania. Jeśli żadne rozwiązania nie powiodły się, zapytanie zwraca błąd. Jednak w zapytaniach między obszarami roboczymi i między aplikacjami, jeśli którykolwiek z obszarów roboczych lub aplikacji nie zostanie znaleziony, zapytanie zakończy się niepowodzeniem. Wartość domyślna to false.

isfuzzy=true dotyczy tylko fazy rozwiązywania union problemów ze źródłami. Po ustaleniu zestawu tabel źródłowych możliwe dodatkowe błędy zapytań nie zostaną pominięte.
Tabele string Co najmniej jedno odwołanie do tabeli rozdzielanej przecinkami, wyrażenie zapytania ujęte w nawiasy lub zestaw tabel określonych za pomocą symbolu wieloznacznych. Na przykład E* może utworzyć związek wszystkich tabel w bazie danych, których nazwy zaczynają się .E

Za każdym razem, gdy lista tabel jest znana, powstrzymaj się od używania symboli wieloznacznych. Niektóre obszary robocze zawierają bardzo dużą liczbę tabel, które mogłyby prowadzić do nieefektywnego wykonywania. Tabele mogą być również dodawane w czasie, co prowadzi do niepredyktowanych wyników.

Uwaga

  • Zakres union może zawierać instrukcje let, jeśli są przypisywane za pomocą słowa kluczowego view .
  • Zakres union nie będzie zawierać funkcji. Aby dołączyć funkcję, zdefiniuj instrukcję let za pomocą słowa kluczowego view .
  • Nie ma gwarancji kolejności, w której pojawią się nogi unii, ale jeśli każda noga ma order by operatora, to każda noga zostanie posortowana.

Zwraca

Tabela zawierająca dowolną liczbę wierszy we wszystkich tabelach wejściowych.

Przykłady

Tabele z ciągiem w nazwie lub kolumnie

union K* | where * has "Kusto"

Wiersze ze wszystkich tabel w bazie danych, których nazwa zaczyna się od K, i w której każda kolumna zawiera wyraz Kusto.

Zliczenie

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

Liczba unikatowych użytkowników, którzy wygenerowali Query wydarzenie lub Command wydarzenie w ciągu ostatniego dnia. W wyniku kolumna "SourceTable" będzie wskazywać "Zapytanie" lub "Polecenie".

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

Ta wydajniejsza wersja generuje ten sam wynik. Filtruje każdą tabelę przed utworzeniem unii.

Korzystanie z akcji 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 

Wyjście

Count
2

Obserwowanie stanu zapytania — zwrócone jest następujące ostrzeżenie: 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 

Wyjście

Count
3

Obserwowanie stanu zapytania — zwrócone jest następujące ostrzeżenie: Failed to resolve entity 'SomeView*'

Niezgodność typów kolumn źródłowych

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

Wyjście

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 

Wyjście

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

Kolumna x z View_1 odebranego sufiksu _long, a jako kolumna o nazwie x_long już istnieje w schemacie wyników, nazwy kolumn zostały zduplikowane, tworząc nową kolumnę- x_long1