Operátor find
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Najde řádky, které odpovídají predikátu v sadě tabulek.
Rozsahem 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
nebude fungovat dobře, pokud 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 |
Ve výchozím nastavení bude výstup obsahovat sloupec s názvem source_ , jehož hodnoty označují, která zdrojová tabulka přispěla ke každému řádku. Pokud zadáte, 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, bude mít hodnota tohoto sloupce název tabulky kvalifikovaný pro databázi. Podobně budou kvalifikace clusteru a databáze 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 bude vypadat 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í zadáno, project-smart použije se ve výchozím nastavení. Další informace najdete v podrobnostech o výstupním schématu. |
withsource=
Název sloupce: Nepovinný. Ve výchozím nastavení bude výstup obsahovat sloupec s názvem source_ jehož hodnoty označují, která zdrojová tabulka přispěla každým řádkem. Pokud zadáte, 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í vyhledá všechny tabulky pro:
- 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 [,
Tabulka, ...] pro které je true
predikát . Řádky se transformují podle výstupního schématu.
Výstupní schéma
sloupec source_
Výstup operátoru hledání bude vždy obsahovat 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 vyfiltrují.
Při použití project-smart
budou sloupce, které se zobrazí ve výstupu, následující:
- Sloupce, které se zobrazují explicitně v predikátu.
- Sloupce, které jsou společné pro všechny filtrované tabulky.
Zbývající sloupce se zabalí do tašky vlastností a zobrazí se v dalším pack
sloupci.
Sloupec, na který se odkazuje explicitně predikátem a který se zobrazí ve více tabulkách s více typy, bude mít ve schématu výsledků pro každý takový typ jiný sloupec. Každý z názvů sloupců bude 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 bude obsahovat sloupce zadané v seznamu. Pokud zdrojová tabulka neobsahuje určitý sloupec, hodnoty v odpovídajících řádcích budou null.
- Při zadávání ColumnType s ColumnName bude tento sloupec ve výsledku mít daný typ a hodnoty budou v případě potřeby přetypované na tento typ. Přetypování nebude mít vliv na typ sloupce při vyhodnocování predikátu.
- Při
pack_all()
použití 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 hledání podporuje alternativní syntaxi * has
termínu a pomocí pouhého termínu vyhledá termín ve všech vstupních sloupcích.
Souhrn některých funkcí filtrování najdete v tématu kde.
Notes
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 zobrazí v několika tabulkách a má více typů a
project-smart
používá se, bude pro každý typ ve výsledkufind
odpovídající sloupec, jak je popsáno ve sjednocení. - Když použijete projektově inteligentní, změny v predikátu, 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. Pokud chcete do oboru hledání zahrnout funkci, definujte příkaz let s klíčovým slovem view.
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
find
do klauzule projektu přidejte do klauzule projektu columnType. - 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 hledání bude fungovat jako sjednocení.
Příklady
Vyhledávání termínů ve všech tabulkách v aktuální databázi
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"
Vyhledávání termínů ve všech tabulkách odpovídajících vzoru názvů v aktuální databázi
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"
Vyhledávání termínů ve všech tabulkách ve všech databázích v clusteru
Dotaz najde všechny řádky ze všech tabulek ve všech databázích, 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"
Vyhledávání termínů ve všech tabulkách a databázích odpovídajících vzoru názvů 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"
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 a neobvyklých sloupcích projektu a zabalení zbytku
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
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 budou řádky EventsTable1 filtrovány s predikátem Version == 'v1.0.0'
a řádky EventsTable2 budou filtrovány s predikátem EventName == 'Event1'
.
Použití zkráceného zápisu k vyhledávání ve všech tabulkách v aktuální databázi
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í.
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
bude fungovat jako union
Použití ne tabulkového výrazu jako operandu find
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ů
Předpokládejme, že jsme vytvořili 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 bude (Level:string, Časové razítko, ProcessId_string, ProcessId_int).
- Následující dotaz se také spustí jako
union
, ale vytvoří jiné schéma výsledků.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Schéma výsledků výstupu bude (Level:string, časové razítko, ProcessId_string)