union operátor

Két vagy több táblát vesz fel, és az összes sorát adja vissza.

Syntax

[ T| ] union [ UnionParameters ] [kind=|outerinner] [withsource=ColumnName] [isfuzzy=|truefalse] Táblák

További információ a szintaxis konvenciókról.

Megjegyzés

Az operátor működése union módosítható úgy, hogy a best_effort kérelem tulajdonságát a értékre trueállítja egy beállított utasítás vagy ügyfélkérés tulajdonságainak használatával. Ha ezt a tulajdonságot a értékre trueállítja, az operátor figyelmen kívül hagyja a union homályos feloldási és csatlakozási hibákat a "egyesített" alkifejezések végrehajtásához, és figyelmeztetést ad a lekérdezés állapotának eredményeiben.

Paraméterek

Név Típus Kötelező Leírás
T string A bemeneti táblázatos kifejezés.
UnionParameters string Nulla vagy több térelválasztó paraméter névérték= formájában, amely szabályozza a soregyeztetési művelet és a végrehajtási terv működését. Lásd a támogatott egyesítő paramétereket.
kind string Vagy inner, vagy outer. inner az eredmény az összes bemeneti táblára jellemző oszlopok részhalmazát eredményezi. outer az eredményben az összes olyan oszlop szerepel, amely a bemenetek bármelyikében előfordul. A bemeneti sor által nem definiált cellák a következőre vannak állítva: null. A mező alapértelmezett értéke: outer.

A outerhasználatával az eredmény tartalmazza a bemenetek bármelyikében előforduló összes oszlopot, egy oszlopot minden névhez és típuseseményhez. Ez azt jelenti, hogy ha egy oszlop több táblában jelenik meg, és több típussal rendelkezik, az egyes típusoknak megfelelő oszlopot tartalmaz az egyesítő eredményben. Ez az oszlopnév egy "_" utótaggal van ellátva, amelyet a forrásoszlop típusa követ.
withsource=ColumnName string Ha meg van adva, a kimenet tartalmaz egy ColumnName nevű oszlopot, amelynek értéke azt jelzi, hogy melyik forrástábla járult hozzá az egyes sorokhoz. Ha a lekérdezés hatékonyan hivatkozik több adatbázis tábláira, beleértve az alapértelmezett adatbázist is, akkor ennek az oszlopnak az értéke rendelkezik az adatbázissal minősített táblanévvel. a fürt- és adatbázis-minősítések akkor szerepelnek az értékben, ha egynél több fürtre hivatkoznak.
isfuzzy bool Ha a értékre truevan állítva, lehetővé teszi az egyesítő lábak homályos felbontását. Az egyesítő források halmaza a meglévő és elérhető táblahivatkozások készletére csökken a lekérdezés elemzése és a végrehajtás előkészítése során. Ha legalább egy ilyen táblát találtak, a feloldási hibák figyelmeztetést eredményeznek a lekérdezés állapotának eredményeiben, de nem akadályozzák meg a lekérdezés végrehajtását. Ha nem sikerült feloldás, a lekérdezés hibát ad vissza. A mező alapértelmezett értéke: false.

isfuzzy=true csak a union forrásfeloldási fázisra vonatkozik. A forrástáblák készletének meghatározása után a lehetséges további lekérdezési hibák nem lesznek letiltva.
Táblák string Egy vagy több vesszővel elválasztott táblahivatkozás, egy zárójelet tartalmazó lekérdezési kifejezés vagy egy helyettesítő karakterrel megadott táblakészlet. Ez lehet például az adatbázis összes táblájának egysége, E* amelynek a neve elkezdődik E.

Támogatott egyesítő paraméterek

Név Típus Kötelező Leírás
hint.concurrency int Arra utal a rendszerben, hogy az operátor hány egyidejű részügyletét union kell párhuzamosan végrehajtani. Az alapértelmezett érték a fürt egyetlen csomópontján található processzormagok száma (2–16).
hint.spread int Arra utal, hogy a rendszer hány csomópontot használjon az egyidejű union részbekérdezések végrehajtásához. Az alapértelmezett érték 1.
Név Típus Kötelező Leírás
T string A bemeneti táblázatos kifejezés.
kind string Vagy inner, vagy outer. inner az eredmény az összes bemeneti táblára jellemző oszlopok részhalmazát eredményezi. outer az eredményben az összes olyan oszlop szerepel, amely a bemenetek bármelyikében előfordul. A bemeneti sor által nem definiált cellák a következőre vannak állítva: null. A mező alapértelmezett értéke: outer.

A outerhasználatával az eredmény tartalmazza a bemenetek bármelyikében előforduló összes oszlopot, egy oszlopot minden névhez és típuseseményhez. Ez azt jelenti, hogy ha egy oszlop több táblában jelenik meg, és több típussal rendelkezik, az egyes típusoknak megfelelő oszlopot tartalmaz az egyesítő eredményben. Ez az oszlopnév egy "_" utótaggal van ellátva, amelyet a forrásoszlop típusa követ.
withsource=ColumnName string Ha meg van adva, a kimenet tartalmaz egy ColumnName nevű oszlopot, amelynek értéke azt jelzi, hogy melyik forrástábla járult hozzá az egyes sorokhoz. Ha a lekérdezés hatékonyan hivatkozik több adatbázis tábláira, beleértve az alapértelmezett adatbázist is, akkor ennek az oszlopnak az értéke rendelkezik az adatbázissal minősített táblanévvel. a fürt- és adatbázis-minősítések akkor szerepelnek az értékben, ha egynél több fürtre hivatkoznak.
isfuzzy bool Ha a értékre truevan állítva, lehetővé teszi az egyesítő lábak homályos felbontását. Az egyesítő források halmaza a meglévő és elérhető táblahivatkozások készletére csökken a lekérdezés elemzése és a végrehajtás előkészítése során. Ha legalább egy ilyen táblát találtak, a feloldási hibák figyelmeztetést eredményeznek a lekérdezés állapotának eredményeiben, de nem akadályozzák meg a lekérdezés végrehajtását. Ha nem sikerült feloldás, a lekérdezés hibát ad vissza. A munkaterületek közötti és alkalmazásközi lekérdezésekben azonban, ha valamelyik munkaterület vagy alkalmazás nem található, a lekérdezés sikertelen lesz. A mező alapértelmezett értéke: false.

isfuzzy=true csak a union forrásfeloldási fázisra vonatkozik. A forrástáblák készletének meghatározása után a lehetséges további lekérdezési hibák nem lesznek letiltva.
Táblák string Egy vagy több vesszővel elválasztott táblahivatkozás, egy zárójelet tartalmazó lekérdezési kifejezés vagy egy helyettesítő karakterrel megadott táblakészlet. Ez lehet például az adatbázis összes táblájának egysége, E* amelynek a neve elkezdődik E.

Ha a táblák listája ismert, ne használjon helyettesítő karaktereket. Egyes munkaterületek nagyon sok olyan táblát tartalmaznak, amelyek nem hatékony végrehajtáshoz vezetnek. A táblák az idő múlásával is hozzáadhatók, ami nem kiszámíthatatlan eredményekhez vezet.

Megjegyzés

  • A union hatókör tartalmazhatja a let utasításokat , ha a view kulcsszóval van attribútuma.
  • A union hatókör nem tartalmaz függvényeket. Egy függvény hozzáadásához definiáljon egy let utasítást a view kulcsszóval.
  • Nincs garancia arra, hogy az egyesítő lábak milyen sorrendben jelennek meg, de ha minden lábnak van operátora order by , akkor minden láb rendezve lesz.

Válaszok

Olyan tábla, amely annyi sort tartalmaz, amennyit az összes bemeneti táblában tartalmaz.

Példák

Névvel vagy oszlopmal rendelkező sztringgel rendelkező táblázatok

union K* | where * has "Kusto"

Az adatbázis összes táblájának sorai, amelyek neve a következővel Kkezdődik: , és amelyben bármely oszlop tartalmazza a szót Kusto.

Eltérőek száma

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

Azoknak a különböző felhasználóknak a száma, amelyek eseményt Query vagy eseményt Command hoztak létre az elmúlt napon. Az eredményben a SourceTable oszlop a "Lekérdezés" vagy a "Command" értéket jelöli.

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

Ez a hatékonyabb verzió ugyanazt az eredményt eredményezi. Az egyes táblákat szűri az egyesítő létrehozása előtt.

Az isfuzzy=true használata

// 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 

Kimenet

Darabszám
2

A lekérdezés állapotának megfigyelése – a következő figyelmeztetést adja vissza: 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 

Kimenet

Darabszám
3

A lekérdezés állapotának megfigyelése – a következő figyelmeztetést adja vissza: Failed to resolve entity 'SomeView*'

A forrásoszlopok típusai nem egyeznek

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

Kimenet

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 

Kimenet

TableName x_long1 x_int x_long
View_1 1
View_2 2
View_3 3

Az oszlop x a utótagot _longkapta, és mivel a nevű x_long oszlop már létezik az eredménysémában, az oszlopnevek duplikálva lettek, és egy új oszlopot eredményeztek.View_1x_long1