Sdílet prostřednictvím


Operátor union

Vezme dvě nebo více tabulek a vrátí řádky všech z nich.

Syntaxe

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

Přečtěte si další informace o konvencích syntaxe.

Poznámka:

Operaci operátoru union lze změnit nastavením best_effort vlastnosti požadavku na true, pomocí příkazu set nebo prostřednictvím vlastností požadavku klienta. Pokud je tato vlastnost nastavena na true, union operátor ignoruje přibližné řešení a selhání připojení ke spuštění některého z dílčích výrazů, které jsou "sjednocovány" a zobrazí upozornění ve výsledcích stavu dotazu.

Parametry

Název Type Požadováno Popis
T string Vstupní tabulkový výraz.
UnionParameters string Nula nebo více parametrů oddělených mezerami ve formě Hodnoty názvu = , které řídí chování operace shody řádků a plánu provádění. Viz podporované parametry sjednocení.
kind string Buďto inner nebo outer. inner způsobí, že výsledek bude mít podmnožinu sloupců, které jsou společné pro všechny vstupní tabulky. outer způsobí, že výsledek bude obsahovat všechny sloupce, které se vyskytují v některém ze vstupů. Buňky, které nejsou definovány vstupním řádkem, jsou nastaveny na null. Výchozí hodnota je outer.

Výsledek outerobsahuje všechny sloupce, které se vyskytují v některém ze vstupů, jeden sloupec pro každý název a typ výskytů. To znamená, že pokud se sloupec zobrazuje ve více tabulkách a má více typů, má odpovídající sloupec pro každý typ ve výsledku sjednocení. Tento název sloupce má příponu "_" následovanou typem sloupce původu.
withsource=ColumnName string Pokud je zadáno, výstup obsahuje sloupec s názvem ColumnName , jehož hodnota označuje, která zdrojová tabulka přispěla každý řádek. Pokud dotaz efektivně odkazuje na tabulky z více než jedné databáze včetně výchozí databáze, pak hodnota tohoto sloupce má název tabulky kvalifikovaný pro databázi. kvalifikace clusteru a databáze jsou k dispozici v hodnotě, pokud se odkazuje na více než jeden cluster.
isfuzzy bool Pokud je nastavena na true, umožňuje přibližné rozlišení sjednocovací nohy. Sada sjednocovacích zdrojů se snižuje na sadu odkazů na tabulky, které existují, a jsou dostupné v době analýzy dotazu a přípravě na spuštění. Pokud byla nalezena aspoň jedna taková tabulka, jakékoli selhání řešení způsobí ve výsledcích stavu dotazu upozornění, ale nezabrání provádění dotazu. Pokud nebyla žádná řešení úspěšná, dotaz vrátí chybu. Výchozí hodnota je false.

isfuzzy=true platí pouze pro union fázi řešení zdrojů. Jakmile se určí sada zdrojových tabulek, nepotlačí se možná další selhání dotazů.
Tabulky string Jeden nebo více odkazů na tabulku oddělenou čárkami, výraz dotazu uzavřený se závorkou nebo sada tabulek zadaných zástupným znakem. Například E* by vytvořil sjednocení všech tabulek v databázi, jejichž názvy začínají E.

Podporované parametry sjednocení

Name Type Požadováno Popis
hint.concurrency int Napovídá systému, kolik souběžných poddotazů operátoru union se má spustit paralelně. Výchozí hodnota je počet jader procesoru na jednom uzlu clusteru (2 až 16).
hint.spread int Napovídá systému, kolik uzlů by mělo být použito souběžným union spuštěním poddotazů. Výchozí hodnota je 1.
Name Type Požadováno Popis
T string Vstupní tabulkový výraz.
kind string Buďto inner nebo outer. inner způsobí, že výsledek bude mít podmnožinu sloupců, které jsou společné pro všechny vstupní tabulky. outer způsobí, že výsledek bude obsahovat všechny sloupce, které se vyskytují v některém ze vstupů. Buňky, které nejsou definovány vstupním řádkem, jsou nastaveny na null. Výchozí hodnota je outer.

Výsledek outerobsahuje všechny sloupce, které se vyskytují v některém ze vstupů, jeden sloupec pro každý název a typ výskytů. To znamená, že pokud se sloupec zobrazuje ve více tabulkách a má více typů, má odpovídající sloupec pro každý typ ve výsledku sjednocení. Tento název sloupce má příponu "_" následovanou typem sloupce původu.
withsource=ColumnName string Pokud je zadáno, výstup obsahuje sloupec s názvem ColumnName , jehož hodnota označuje, která zdrojová tabulka přispěla každý řádek. Pokud dotaz efektivně odkazuje na tabulky z více než jedné databáze včetně výchozí databáze, pak hodnota tohoto sloupce má název tabulky kvalifikovaný pro databázi. kvalifikace clusteru a databáze jsou k dispozici v hodnotě, pokud se odkazuje na více než jeden cluster.
isfuzzy bool Pokud je nastavena na true, umožňuje přibližné rozlišení sjednocovací nohy. Sada sjednocovacích zdrojů se snižuje na sadu odkazů na tabulky, které existují, a jsou dostupné v době analýzy dotazu a přípravě na spuštění. Pokud byla nalezena aspoň jedna taková tabulka, jakékoli selhání řešení způsobí ve výsledcích stavu dotazu upozornění, ale nezabrání provádění dotazu. Pokud nebyla žádná řešení úspěšná, dotaz vrátí chybu. Pokud se ale některý z pracovních prostorů nebo aplikací nenajde, dotaz selže v dotazech mezi pracovními prostory a aplikacemi. Výchozí hodnota je false.

isfuzzy=true platí pouze pro union fázi řešení zdrojů. Jakmile se určí sada zdrojových tabulek, nepotlačí se možná další selhání dotazů.
Tabulky string Jeden nebo více odkazů na tabulku oddělenou čárkami, výraz dotazu uzavřený se závorkou nebo sada tabulek zadaných zástupným znakem. Například E* by vytvořil sjednocení všech tabulek v databázi, jejichž názvy začínají E.

Kdykoli je seznam tabulek známý, nepoužívejte zástupné znamény. Některé pracovní prostory obsahují velmi velký počet tabulek, které by vedlo k neefektivnímu spuštění. Tabulky mohou být také přidány v průběhu času, což vede k neprediktovaným výsledkům.

Poznámka:

  • Obor union může obsahovat příkazy let, pokud jsou přiřazeny klíčovým slovem view .
  • Obor union nebude obsahovat funkce. Pokud chcete zahrnout funkci, definujte příkaz let s klíčovým slovem view .
  • Neexistuje žádná záruka pořadí, ve kterém se budou sjednocovat nohy, ale pokud má každá noha order by operátor, bude každá noha seřazena.

Návraty

Tabulka s tolika řádky, kolik jsou ve všech vstupních tabulkách.

Příklady

Tabulky s řetězcem v názvu nebo sloupci

union K* | where * has "Kusto"

Řádky ze všech tabulek v databázi, jejichž název začíná K, a ve kterých každý sloupec obsahuje slovo Kusto.

Počet jedinečných položek

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

Počet jedinečných uživatelů, kteří vytvořili Query událost nebo Command událost za poslední den. Ve výsledku sloupec SourceTable označí buď Dotaz, nebo Příkaz.

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

Tato efektivnější verze vytvoří stejný výsledek. Před vytvořením sjednocení vyfiltruje každou tabulku.

Používání akce 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 

Výstup

Počet
2

Pozoruje se stav dotazu – vrátilo se následující upozornění: 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 

Výstup

Počet
3

Pozoruje se stav dotazu – vrátilo se následující upozornění: Failed to resolve entity 'SomeView*'

Neshoda typů zdrojových sloupců

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

Výstup

TableName x_long x_int
View_1 0
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 

Výstup

TableName x_long1 x_int x_long
View_1 0
View_2 2
View_3 3

Sloupec x z View_1 přijaté přípony _longa jako sloupec s názvem x_long již ve výsledném schématu existuje, názvy sloupců byly odstraněny a vytvoří nový sloupec- x_long1