Sdílet prostřednictvím


Operátor find

Platí pro: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft 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)] wherePrediká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: booleanVý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.
  • project-smart | project: Pokud nezadáte project-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í projectColumnName[: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ýsledku find, 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 oboru find, 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)