Operátor find
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Najde řádky, které odpovídají predikátu v sadě tabulek.
Rozsah operátoru find
může být také mezi databázemi nebo mezi clustery.
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"
Poznámka:
find
operátor je podstatně méně efektivní než filtrování textu specifického pro sloupec. Vždy, když jsou sloupce známé, doporučujeme použít operátor where.
find
nefunguje dobře, když pracovní prostor obsahuje velký počet tabulek a sloupců a objem dat, který se kontroluje, je vysoký a časový rozsah dotazu je vysoký.
Syntaxe
find
[withsource
= ColumnName] [in
(
Tables)
]where
Predikát [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
Predikát [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Type | Požadováno | Popis |
---|---|---|---|
ColumnName | string |
Výstup ve výchozím nastavení obsahuje sloupec s názvem source_, jehož hodnoty označují, která zdrojová tabulka přispěla ke každému řádku. Pokud je zadáno, použije se místo source_columnName . Pokud dotaz odkazuje na tabulky z více než jedné databáze, včetně výchozí databáze, má hodnota tohoto sloupce název tabulky kvalifikovaný pro databázi. Podobně clusteru a databáze kvalifikace jsou k dispozici v hodnotě, pokud se odkazuje na více než jeden cluster. | |
Predikát | bool |
✔️ | Tento logický výraz se vyhodnotí pro každý řádek v každé vstupní tabulce. Další informace najdete v podrobnostech o syntaxi predikátu. |
Tabulky | string |
Nula nebo více odkazů na tabulky oddělené čárkami. Ve výchozím nastavení find vypadá ve všech tabulkách v aktuální databázi. Můžete použít:1. Název tabulky, například Events 2. Výraz dotazu, například (Events | where id==42) 3. Sada tabulek zadaná zástupným znakem. Například E* by vytvořil sjednocení všech tabulek v databázi, jejichž názvy začínají E . |
|
project-smart nebo project |
string |
Pokud není zadaný, project-smart se ve výchozím nastavení používá. Další informace najdete v podrobnostech o výstupním schématu. |
withsource=
Název sloupce: Nepovinný. Výstup ve výchozím nastavení obsahuje sloupec s názvem source_, jehož hodnoty označují, která zdrojová tabulka přispěla jednotlivými řádky. Pokud je zadáno, použije se místo source_columnName .Predikát:
boolean
Výraz nad sloupci vstupních tabulek Tabulka [,
Tabulka, ...]. Vyhodnocuje se pro každý řádek v každé vstupní tabulce. Další informace najdete v podrobnostech o syntaxi predikátu.Tabulky: Volitelné. Nula nebo více odkazů na tabulky oddělené čárkami. Ve výchozím nastavení najít prohledá všechny tabulky:
- Název tabulky, například
Events
- Výraz dotazu, například
(Events | where id==42)
- Sada tabulek zadaná zástupným znakem Například
E*
by vytvořil sjednocení všech tabulek, jejichž názvy začínajíE
.
- Název tabulky, například
project-smart
|project
: Pokud nezadáteproject-smart
, použije se ve výchozím nastavení. Další informace najdete v podrobnostech o výstupním schématu.
Návraty
Transformace řádků v tabulce [,
, ...] pro které true
. Řádky se transformují podle výstupního schématu.
Výstupní schéma
sloupec source_
Výstup operátoru find
vždy obsahuje sloupec source_ s názvem zdrojové tabulky. Sloupec lze přejmenovat pomocí parametru withsource
.
sloupce výsledků
Zdrojové tabulky, které neobsahují žádný sloupec používaný vyhodnocením predikátu, se odfiltrují.
Když použijete project-smart
, sloupce, které se zobrazí ve výstupu, jsou:
- Sloupce, které se zobrazují explicitně v predikátu.
- Sloupce, které jsou společné pro všechny filtrované tabulky.
Zbývající sloupce jsou zabalené do tašky vlastností a zobrazí se ve sloupci navíc pack
.
Sloupec, na který odkazuje explicitně predikát a který se zobrazí v několika tabulkách s více typy, má jiný sloupec ve schématu výsledků pro každý takový typ. Každý z názvů sloupců je vytvořen z původního názvu sloupce a typu odděleného podtržítkem.
Při použití project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]:
- Výsledná tabulka obsahuje sloupce zadané v seznamu. Pokud zdrojová tabulka neobsahuje určitý sloupec, hodnoty v odpovídajících řádcích mají hodnotu null.
- Když zadáte ColumnType s ColumnName, tento sloupec v "výsledku" má daný typ a hodnoty se v případě potřeby přetypují na tento typ. Přetypování nemá vliv na typ sloupce při vyhodnocování predikátu.
- Při použití
pack_all()
se všechny sloupce včetně promítaných sloupců zabalí do tašky vlastností a ve výchozím nastavení se zobrazí ve sloupci "column1". V pytli vlastností slouží název zdrojového sloupce jako název vlastnosti a hodnota sloupce slouží jako hodnota vlastnosti.
Syntaxe predikátu
Operátor find
podporuje alternativní syntaxi pro výraz * has
a používá pouze termín, vyhledá termín ve všech vstupních sloupcích.
Souhrn některých funkcí filtrování najdete v tématu kde.
Úvahy
-
project
Pokud klauzule odkazuje na sloupec, který se zobrazuje v několika tabulkách a má více typů, musí tento typ v klauzuli projektu použít tento odkaz na sloupec. - Pokud se sloupec zobrazuje ve více tabulkách a má více typů a
project-smart
se používá, existuje odpovídající sloupec pro každý typ ve výsledkufind
, jak je popsáno v sjednocení - Pokud používáte projektově inteligentní, změny v predikáte, ve zdrojové sadě tabulek nebo ve schématu tabulek můžou vést ke změně ve výstupním schématu. Pokud je potřeba schéma konstantních výsledků, použijte místo toho projekt .
-
find
obor nemůže obsahovat funkce. Chcete-li zahrnout funkci do oborufind
, definujte příkaz let s zobrazit klíčové slovo.
Tipy týkající se výkonu
- Na rozdíl od tabulkových výrazů používejte tabulky.
Pokud je tabulkový výraz, operátor find se vrátí k
union
dotazu, který může vést ke snížení výkonu. - Pokud je sloupec, který se zobrazuje ve více tabulkách a má více typů, je součástí klauzule projektu, před předáním do klauzule projektu přidejte
find
. - Přidejte do predikátu filtry založené na čase. Použijte hodnotu sloupce datetime nebo ingestion_time().
- Hledání v konkrétních sloupcích místo fulltextového vyhledávání
- Není lepší odkazovat na sloupce, které se zobrazují ve více tabulkách a mají více typů. Pokud je predikát platný při překladu tohoto typu sloupců pro více než jeden typ, dotaz se vrátí do sjednocení.
Podívejte se například na příklady případů, kdy
find
funguje jako sjednocení.
Příklady
Příklady v tomto článku používají veřejně dostupné tabulky v clusteru nápovědy, jako je
StormEvents
tabulka v databázi Ukázky.
Příklady v tomto článku používají veřejně dostupné tabulky, jako je tabulka
StormEvents
v analýze počasí, ukázková data.
Vyhledávání termínů ve všech tabulkách
Dotaz najde všechny řádky ze všech tabulek v aktuální databázi, ve které libovolný sloupec obsahuje slovo Hernandez
. Výsledné záznamy se transformují podle výstupního schématu. Výstup obsahuje řádky z Customers
tabulky a SalesTable
tabulky ContosoSales
databáze.
find "Hernandez"
Výstup
Tato tabulka zobrazuje první tři řádky výstupu.
zdroj_ | dav_ |
---|---|
Zákazníci | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":5023,"Education":"Partial High School","FirstName":"Devin","Gender":"M","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
Zákazníci | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7814,"Education":"Partial College","FirstName":"Kristy","Gender ":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"} |
Zákazníci | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7888,"Education":"Partial High School","FirstName":"Kari","Gender":"F","LastName":"Hernandez","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
... | ... |
Vyhledávání termínů ve všech tabulkách odpovídajících vzoru názvů
Dotaz najde všechny řádky ze všech tabulek v aktuální databázi, jejichž název začíná C
, a ve kterém libovolný sloupec obsahuje slovo Hernandez
. Výsledné záznamy se transformují podle výstupního schématu. Výstup teď obsahuje jenom záznamy z Customers
tabulky.
find in (C*) where * has "Hernandez"
Výstup
Tato tabulka zobrazuje první tři řádky výstupu.
zdroj_ | dav_ |
---|---|
Konference | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":"Středa, 26. května\n8:30–9:30 GMT","kusto_affinity":"Prioritní"} |
Konference | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Podrobné informace o dotazovacím jazyku Azure Kusto ","session_type":"Divadlo","owner":"Jean Francois Berenguer","participants":","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":","starttime":null,"duration":null,"time_and_duration":","kusto_affinity":"Prioritní"} |
Konference | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":"Středa, 26. května\n8:30–9:30 GMT","kusto_affinity":"Prioritní"} |
... | ... |
Vyhledávání termínů v clusteru
Dotaz najde všechny řádky ze všech tabulek ve všech databázích v clusteru, ve kterých libovolný sloupec obsahuje slovo Kusto
.
Tento dotaz je dotaz napříč databázemi .
Výsledné záznamy se transformují podle výstupního schématu.
find in (database('*').*) where * has "Kusto"
Výstup
Tato tabulka zobrazuje první tři řádky výstupu.
zdroj_ | dav_ |
---|---|
database("Ukázky"). Konference | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":"Středa, 26. května\n8:30–9:30 GMT","kusto_affinity":"Prioritní"} |
database("Ukázky"). Konference | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Podrobné informace o dotazovacím jazyku Azure Kusto ","session_type":"Divadlo","owner":"Jean Francois Berenguer","participants":","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":","starttime":null,"duration":null,"time_and_duration":","kusto_affinity":"Prioritní"} |
database("Ukázky"). Konference | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":"Středa, 26. května\n8:30–9:30 GMT","kusto_affinity":"Prioritní"} |
... | ... |
Vyhledávání termínů odpovídající vzoru názvu v clusteru
Dotaz najde všechny řádky ze všech tabulek, jejichž název začíná K
ve všech databázích, jejichž název začíná B
a ve kterém libovolný sloupec obsahuje slovo Kusto
.
Výsledné záznamy se transformují podle výstupního schématu.
find in (database("S*").C*) where * has "Kusto"
Výstup
Tato tabulka zobrazuje první tři řádky výstupu.
zdroj_ | dav_ |
---|---|
Konference | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":"Středa, 26. května\n8:30–9:30 GMT","kusto_affinity":"Prioritní"} |
Konference | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":"Středa, 26. května\n8:30–9:30 GMT","kusto_affinity":"Prioritní"} |
Konference | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Roundtable: Advanced Kusto query language topics","session_type":"Roundtable","owner":"Avner Aharoni","participants":"Alexander Sloutsky, Tzvia Gitlin-Troyna","URL":"https://sessions.mybuild.microsoft.com/sessions/details/4d4887e9-f08d-4f88-99ac-41e5feb869e7","level":200,"session_location":"Online","starttime":"2021-05-26T08:30:00.000000Z","duration":60,"time_and_duration":"Středa, 26. května\n8:30–9:30 GMT","kusto_affinity":"Prioritní"} |
... | ... |
Vyhledávání termínů v několika clusterech
Dotaz najde všechny řádky ze všech tabulek, jejichž název začíná K
ve všech databázích, jejichž název začíná B
a ve kterém libovolný sloupec obsahuje slovo Kusto
.
Výsledné záznamy se transformují podle výstupního schématu.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
Vyhledávání termínů ve všech tabulkách
Dotaz najde všechny řádky ze všech tabulek, ve kterých libovolný sloupec obsahuje slovo Kusto
.
Výsledné záznamy se transformují podle výstupního schématu.
find "Kusto"
Příklady výsledků výstupu find
Následující příklady ukazují, jak find
se dají použít ve dvou tabulkách: EventsTable1 a EventsTable2.
Předpokládejme, že máme další obsah těchto dvou tabulek:
EventsTable1
Session_Id | Level | Text události | Verze |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informační | Nějaký text 1 | v1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Nějaký text 2 | v1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | Chyba | Nějaký text 3 | v1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | Informační | Nějaký text 4 | v1.1.0 |
EventsTable2
Session_Id | Level | Text události | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informační | Jiný text 1 | Událost 1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informační | Jiný text 2 | Událost 2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Jiný text 3 | Událost 3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Chyba | Jiný text 4 | Událost 4 |
Hledání ve společných sloupcích, běžných projektech a neobvyklých sloupcích a zabalení ostatních sloupců
Dotaz vyhledá konkrétní záznamy v EventsTable1 a EventsTable2 na základě daného Session_Id a úrovně Chyba. Potom projektuje tři konkrétní sloupce: EventText, Verzea EventNamea zabalí všechny ostatní zbývající sloupce do dynamického objektu.
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Výstup
zdroj_ | Text události | Verze | EventName | dav_ |
---|---|---|---|---|
EventsTable1 | Nějaký text 2 | v1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
EventsTable2 | Jiný text 3 | Událost 3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
Hledání v běžných a neobvyklých sloupcích
Dotaz vyhledá záznamy, které mají verze jako "v1.0.0", nebo EventName jako Event1, a pak projektuje (vybere) čtyři konkrétní sloupce: Session_Id, EventText, Versiona EventName z těchto filtrovaných výsledků.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Výstup
zdroj_ | Session_Id | Text události | Verze | EventName |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Nějaký text 1 | v1.0.0 | |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Nějaký text 2 | v1.0.0 | |
EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Jiný text 1 | Událost 1 |
Poznámka:
V praxi se řádky EventsTable1 filtrují pomocí predikátu Version == 'v1.0.0'
a EventsTable2 řádky se filtrují pomocí predikátu EventName == 'Event1'
.
Použití zkráceného zápisu k vyhledávání ve všech tabulkách v aktuální databázi
Tento dotaz vyhledá v databázi všechny záznamy s Session_Id, který odpovídá "acbd207d-51aa-4df7-bfa7-be70eb68f04e". Načte záznamy ze všech tabulek a sloupců, které obsahují tento konkrétní Session_Id.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Výstup
zdroj_ | Session_Id | Level | Text události | dav_ |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informační | Nějaký text 1 | {"Version":"v1.0.0"} |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Nějaký text 2 | {"Version":"v1.0.0"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informační | Jiný text 2 | {"EventName":"Event2"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Jiný text 3 | {"EventName":"Event3"} |
Vrátí výsledky z každého řádku jako taška vlastností.
Tento dotaz vyhledá záznamy se zadanými Session_Id a vrátí všechny sloupce těchto záznamů jako jeden dynamický objekt.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Výstup
zdroj_ | dav_ |
---|---|
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říklady případů, kdy find
funguje jako union
Operátor find
v Kusto může někdy fungovat jako operátor union
, zejména když se používá k vyhledávání v několika tabulkách.
Použití netabularového výrazu jako operandu find
Dotaz nejprve vytvoří zobrazení, které filtruje EventsTable1 tak, aby zahrnovalo pouze záznamy na úrovni chyb. Pak vyhledá v tomto filtrované zobrazení a v tabulce EventsTable2 záznamy s konkrétním Session_Id.
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Odkazování na sloupec, který se zobrazuje v několika tabulkách a má více typů
V tomto příkladu vytvořte dvě tabulky spuštěním příkazu:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- Následující dotaz se spustí jako
union
.
find in (Table1, Table2) where ProcessId == 1001
Schéma výsledků výstupu je (level:string, časové razítko, ProcessId_string, ProcessId_int).
- Následující dotaz se spustí jako
union
, ale vytvoří jiné schéma výsledku.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Schéma výsledků výstupu je (level:string, časové razítko, ProcessId_string)