find operátor

Megkeresi azokat a sorokat, amelyek megfelelnek egy predikátumnak egy táblakészletben.

A hatóköre find lehet adatbázisközi vagy fürtök közötti is.

find in (Table1, Table2, Table3) where Fruit=="apple"

find in (database('*').*) where Fruit == "apple"

find in (cluster('cluster_name').database('MyDB*').*) where Fruit == "apple"
find in (Table1, Table2, Table3) where Fruit=="apple"

Megjegyzés

find operátor lényegesen kevésbé hatékony, mint az oszlopspecifikus szövegszűrés. Ha az oszlopok ismertek, javasoljuk, hogy használja a where operátort. find nem fog megfelelően működni, ha a munkaterület nagy számú táblát és oszlopot tartalmaz, és a beolvasott adatmennyiség magas, és a lekérdezés időtartománya magas.

Syntax

  • find [withsource= ColumnName] [in(Tables)] wherePredikátum [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

  • findPredikátum [project-smart | projectColumnName[:ColumnType, ... ] [,pack_all()]]

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

Paraméterek

Név Típus Kötelező Leírás
ColumnName string Alapértelmezés szerint a kimenet egy source_ nevű oszlopot tartalmaz, amelynek értékei azt jelzik, hogy melyik forrástábla járult hozzá az egyes sorokhoz. Ha meg van adva, a columnName lesz használva a source_ helyett. A helyettesítő karakterek egyeztetése után, ha a lekérdezés egynél több adatbázis tábláira hivatkozik, beleértve az alapértelmezett adatbázist is, az oszlop értéke egy, az adatbázissal minősített táblanévvel fog rendelkezni. Hasonlóképpen a fürt - és adatbázis-minősítések is megjelennek az értékben, ha több fürtre hivatkoznak.
Predikátum bool ✔️ Ezt a logikai kifejezést minden egyes bemeneti tábla minden sorára kiértékeli a rendszer. További információ: predikátum-szintaxis részletei.
Táblák string Nulla vagy több vesszővel tagolt táblahivatkozás. Alapértelmezés szerint find az aktuális adatbázis összes táblájában megjelenik. Az alábbi eszközöket használhatja:
1. Egy tábla neve, például: Events
2. Lekérdezési kifejezés, például (Events | where id==42)
3. Helyettesítő karakterrel megadott táblák halmaza. Például E* az adatbázis összes táblájának egyesítését képezné, amelynek neve a következővel Ekezdődik: .
project-smart vagy project string Ha nincs megadva, project-smart alapértelmezés szerint a rendszer használja. További információkért lásd a kimeneti séma részleteit.
  • withsource=ColumnName: Nem kötelező. Alapértelmezés szerint a kimenet egy source_ nevű oszlopot tartalmaz, amelynek értékei azt jelzik, hogy melyik forrástábla járult hozzá az egyes sorokhoz. Ha meg van adva, a columnName lesz használva a source_ helyett.

  • Predikátum: Kifejezésboolean a [,Table, ...] tábla bemeneti tábláinak oszlopai felett. A rendszer minden egyes bemeneti tábla minden sorához kiértékeli. További információ: predikátum-szintaxis részletei.

  • Táblák: Nem kötelező. Nulla vagy több vesszővel tagolt táblahivatkozás. Alapértelmezés szerint a find a következő összes táblában keres:

    • Egy tábla neve, például: Events
    • Lekérdezési kifejezés, például (Events | where id==42)
    • Egy helyettesítő karakterrel megadott táblakészlet. Például az összes olyan tábla egyesítését alkotná, E* amelynek a neve a következővel Ekezdődik: .
  • project-smart | project: Ha nincs megadva project-smart , a rendszer alapértelmezés szerint ezt használja. További információkért lásd a kimeneti séma részleteit.

Válaszok

A(z) [,Table, ...] tábla azon sorainak átalakítása, amelyek predikátumatrue. A sorok a kimeneti séma szerint lesznek átalakítva.

Kimeneti séma

source_ oszlop

A find operátor kimenete mindig tartalmaz egy source_ oszlopot a forrástábla nevével. Az oszlop a paraméterrel withsource nevezhető át.

eredmények oszlopai

A program kiszűri azokat a forrástáblákat, amelyek nem tartalmaznak a predikátumértékelés által használt oszlopokat.

A használatakor project-smarta kimenetben megjelenő oszlopok a következőek lesznek:

  • A predikátumban explicit módon megjelenő oszlopok.
  • Az összes szűrt tábla közös oszlopai.

A többi oszlop egy tulajdonságzsákba lesz csomagolva, és egy további pack oszlopban fog megjelenni. A predikátum által explicit módon hivatkozott és több, több típusú táblában megjelenő oszlopok mindegyik típushoz eltérő oszlopot fognak tartalmazni az eredménysémában. Az egyes oszlopnevek az eredeti oszlop nevéből és típusából lesznek összeállítva, aláhúzásjelekkel elválasztva.

ColumnName[:ColumnType, ... ] [,pack_all()]:project

  • Az eredménytábla a listában megadott oszlopokat tartalmazza. Ha egy forrástábla nem tartalmaz egy bizonyos oszlopot, a megfelelő sorok értékei null értékűek lesznek.
  • Oszlopnévvel rendelkező ColumnType megadásakor az "eredmény" oszlopban a megadott típus lesz, és az értékek szükség esetén erre a típusra lesznek adva. A predikátum kiértékelésekor az öntvény nem lesz hatással az oszloptípusra.
  • A használat során pack_all() az összes oszlop , beleértve a tervezett oszlopokat is, egy tulajdonságcsomagba van csomagolva, és alapértelmezés szerint egy további oszlopban jelenik meg, alapértelmezés szerint "column1". A tulajdonságcsomagban a forrásoszlop neve a tulajdonság neve, az oszlop értéke pedig tulajdonságértékként szolgál.

Predikátumszintaxis

A find operátor támogatja a * has kifejezés alternatív szintaxisát, és csak kifejezés használatával keres egy kifejezést az összes bemeneti oszlopban.

Néhány szűrőfüggvény összegzését a where operátor című témakörben tekinti meg.

Jegyzetek

  • Ha a project záradék olyan oszlopra hivatkozik, amely több táblában jelenik meg, és több típussal rendelkezik, a típusnak ezt az oszlophivatkozást kell követnie a projekt záradékában
  • Ha egy oszlop több táblában jelenik meg, és több típusa van, és project-smart használatban van, az egyes típusoknak megfelelő oszlop lesz az finderedményben, az egyesítő szakaszban leírtak szerint
  • Ha project-smartot használ, a predikátumban, a forrástáblák készletében vagy a táblák sémájában végzett módosítások a kimeneti sémát is megváltoztathatják. Ha állandó eredménysémára van szükség, használja inkább a projectet
  • find A hatókör nem tartalmazhat függvényeket. Ha egy függvényt szeretne belefoglalni a keresési hatókörbe, definiáljon egy let utasításta view kulcsszóval.

Teljesítménnyel kapcsolatos tippek

  • Táblázatos kifejezések helyett használjon táblázatoskifejezéseket. Táblázatos kifejezés esetén a find operátor visszaesik egy union olyan lekérdezésre, amely teljesítménycsökkenést eredményezhet.
  • Ha egy oszlop, amely több táblában jelenik meg, és több típussal rendelkezik, a projekt záradékának része, inkább adjon hozzá egy ColumnType értéket a projekt záradékához, mint a tábla módosítása előtt find.
  • Adjon hozzá időalapú szűrőket a predikátumhoz. Használjon datetime oszlopértéket vagy ingestion_time().
  • Teljes szöveges keresés helyett adott oszlopokban kereshet.
  • Jobb, ha nem hivatkozunk olyan oszlopokra, amelyek több táblában jelennek meg, és több típussal rendelkeznek. Ha a predikátum egynél több típus esetében érvényes az ilyen oszloptípusok feloldásakor, a lekérdezés visszaáll az egyesítésre. Lásd például azokat az eseteket, amikor a keresés unióként fog működni.

Példák

Kifejezéskeresés az aktuális adatbázis összes táblájában

A lekérdezés megkeresi az aktuális adatbázis összes táblájának összes sorát, amelyben bármely oszlop tartalmazza a szót Hernandez. Az eredményként kapott rekordok a kimeneti séma szerint lesznek átalakítva. A kimenet tartalmazza a Customers tábla sorait és az SalesTable adatbázis tábláját ContosoSales .

find "Hernandez"

Kifejezéskeresés az aktuális adatbázis névmintájának megfelelő összes táblában

A lekérdezés az aktuális adatbázis összes táblájának összes sorát megkeresi, amelynek neve a következővel Ckezdődik: , és amelyben bármely oszlop tartalmazza a szót Hernandez. Az eredményként kapott rekordok a kimeneti séma szerint lesznek átalakítva. A kimenet most már csak a Customers táblából származó rekordokat tartalmazza.

find in (C*) where * has "Hernandez"

Kifejezéskeresés a fürt összes adatbázisának összes táblájában

A lekérdezés az összes olyan adatbázis összes táblájának összes sorát megkeresi, amelyben bármely oszlop tartalmazza a szót Kusto. Ez a lekérdezés adatbázisközi lekérdezés. Az eredményként kapott rekordok a kimeneti séma szerint lesznek átalakítva.

find in (database('*').*) where * has "Kusto"

Kifejezéskeresés a fürt névmintájának megfelelő összes táblában és adatbázisban

A lekérdezés megkeresi az összes olyan tábla összes sorát, amelynek a neve az összes olyan adatbázisban kezdődik K , amelynek a neve B és amelyben bármely oszlop tartalmazza a szót Kusto. Az eredményként kapott rekordok a kimeneti séma szerint lesznek átalakítva.

find in (database("S*").C*) where * has "Kusto"

Kifejezéskeresés több fürtben

A lekérdezés megkeresi az összes olyan tábla összes sorát, amelynek a neve az összes olyan adatbázisban kezdődik K , amelynek a neve B és amelyben bármely oszlop tartalmazza a szót Kusto. Az eredményként kapott rekordok a kimeneti séma szerint lesznek átalakítva.

find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"

Kifejezéskeresés az összes táblában

A lekérdezés az összes olyan tábla összes sorát megkeresi, amelyben bármely oszlop tartalmazza a szót Kusto. Az eredményként kapott rekordok a kimeneti séma szerint lesznek átalakítva.

find "Kusto"

Példák a find kimeneti eredményekre

Az alábbi példák bemutatják, hogyan find használható két táblán keresztül: EventsTable1 és EventsTable2. Tegyük fel, hogy a következő két táblázat tartalma van:

EventsTable1

Session_Id Level EventText Verzió
acbd207d-51aa-4df7-bfa7-be70eb68f04e Tájékoztatás Néhány szöveg1 1.0.0-s verzió
acbd207d-51aa-4df7-bfa7-be70eb68f04e Hiba Néhány szöveg2 1.0.0-s verzió
28b8e46e-3c31-43cf-83cb-48921c3986fc Hiba Néhány szöveg3 1.0.1-s verzió
8f057b11-3281-45c3-a856-05ebb18a3c59 Tájékoztatás Néhány szöveg4 1.1.0-s verzió

EventsTable2

Session_Id Level EventText EventName
f7d5f95f-f580-4ea6-830b-5776c8d64fdd Tájékoztatás Néhány egyéb szöveg1 Esemény1
acbd207d-51aa-4df7-bfa7-be70eb68f04e Tájékoztatás Néhány egyéb szöveg2 2. esemény
acbd207d-51aa-4df7-bfa7-be70eb68f04e Hiba Egyéb szöveg3 Esemény3
15eaeab5-8576-4b58-8fc6-478f75d8fee4 Hiba Néhány egyéb szöveg4 Esemény4

Gyakori oszlopok keresése, gyakori és ritka oszlopok kivetítése, és a többi becsomagolása

find in (EventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error' 
     project EventText, Version, EventName, pack_all()

Kimenet

Forrás_ EventText Verzió EventName Pack_
EventsTable1 Néhány szöveg2 1.0.0-s verzió {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}
EventsTable2 Egyéb szöveg3 Esemény3 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"}

Keresés gyakori és ritka oszlopokban

find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName

Kimenet

Forrás_ Session_Id EventText Verzió EventName
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Néhány szöveg1 1.0.0-s verzió
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Néhány szöveg2 1.0.0-s verzió
EventsTable2 f7d5f95f-f580-4ea6-830b-5776c8d64fdd Néhány egyéb szöveg1 Esemény1

Megjegyzés: a gyakorlatban az EventsTable1 sorokat predikátummal Version == 'v1.0.0' szűrjük, az EventsTable2 sorokat pedig predikátummal EventName == 'Event1' szűrjük.

Rövidített jelölés használata az aktuális adatbázis összes táblájában való kereséshez

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

Kimenet

Forrás_ Session_Id Level EventText Pack_
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Tájékoztatás Néhány szöveg1 {"Version":"v1.0.0"}
EventsTable1 acbd207d-51aa-4df7-bfa7-be70eb68f04e Hiba Néhány szöveg2 {"Version":"v1.0.0"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Tájékoztatás Egyéb szöveg2 {"EventName":"Event2"}
EventsTable2 acbd207d-51aa-4df7-bfa7-be70eb68f04e Hiba Egyéb szöveg3 {"EventName":"Event3"}

Az egyes sorok eredményeinek visszaadása tulajdonságcsomagként

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()

Kimenet

Forrás_ Pack_
EventsTable1 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"}
EventsTable1 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"}
EventsTable2 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"}
EventsTable2 {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Other Text3", "EventName":"Event3"}

Példák olyan esetekre, amikor find a union

Nem táblázatos kifejezés használata operandus kereséseként

let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

Több táblában megjelenő és több típussal rendelkező oszlopra való hivatkozás

Tegyük fel, hogy két táblát hoztunk létre a következő futtatásával:

.create tables 
  Table1 (Level:string, Timestamp:datetime, ProcessId:string),
  Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
  • A következő lekérdezés a következőként lesz végrehajtva: union.
find in (Table1, Table2) where ProcessId == 1001

A kimeneti eredményséma (Level:string, Timestamp, ProcessId_string, ProcessId_int) lesz.

  • A következő lekérdezés is a következőként lesz végrehajtva, unionde egy másik eredménysémát hoz létre.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

A kimeneti eredményséma (Level:string, Timestamp, ProcessId_string)