Operátor find
Vyhledá řádky, které odpovídají predikátu v sadě tabulek.
Obor může find
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. Kdykoli jsou sloupce známé, doporučujeme použít operátor where. find
nebude fungovat správně, pokud pracovní prostor obsahuje velký počet tabulek a sloupců a objem dat, která se kontrolují, je vysoký a časový rozsah dotazu je vysoký.
Syntax
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 | Typ | Vyž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 jednotlivými řádky. Pokud je zadáno, použije se místo source_ColumnName. Pokud po párování zástupných znaků 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ě se v hodnotě budou vyskytovat kvalifikace clusteru a databáze , pokud se odkazuje na více než jeden cluster. | |
Predikátu | bool |
✔️ | Tento logický výraz se vyhodnocuje 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 hledat 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 by vytvořil sjednocení všech tabulek v databázi, E* jejichž názvy začínají na E . |
|
project-smart nebo project |
string |
Pokud není zadán, project-smart použije se ve výchozím nastavení. Další informace najdete v podrobnostech o output-schema. |
withsource=
ColumnName: Volitelné. Ve výchozím nastavení bude výstup obsahovat sloupec s názvem source_ jehož hodnoty označují, do které zdrojové tabulky přispěly jednotlivé řá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. Hledání ve výchozím nastavení vyhledá ve všech tabulkách:
- Název tabulky, například
Events
- Výraz dotazu, například
(Events | where id==42)
- Sada tabulek zadaná pomocí zástupného znaku. Například by vytvořil sjednocení všech tabulek,
E*
jejichž názvy začínají naE
.
- Název tabulky, například
project-smart
|project
: Pokud není zadánoproject-smart
, použije se ve výchozím nastavení. Další informace najdete v podrobnostech o output-schema.
Návraty
Transformace řádků v tabulce [,
Tabulka, ...] pro kterou je true
predikát . Řádky se transformují podle výstupního schématu.
Výstupní schéma
source_ sloupec
Výstup operátoru find 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, budou odfiltrovány.
Když použijete project-smart
, zobrazí se ve výstupu následující sloupce:
- 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 sáčku vlastností a zobrazí se v dalším pack
sloupci.
Sloupec, na který je explicitně odkazován predikátem a který se zobrazuje ve více tabulkách s více typy, bude mít ve výsledném schématu pro každý takový typ jiný sloupec. Každý z názvů sloupců bude vytvořen z původního názvu a typu sloupce 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, budou hodnoty v odpovídajících řádcích null.
- Při zadávání ColumnType s ColumnName bude mít tento sloupec v "výsledku" 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 sáčku vlastností a zobrazí se v dalším sloupci( ve výchozím nastavení sloupec1). V kontejneru vlastností název zdrojového sloupce slouží jako název vlastnosti a hodnota sloupce slouží jako hodnota vlastnosti.
Syntaxe predikátu
Operátor find podporuje alternativní syntaxi pro termín a pomocí pouhého * has
termínu vyhledá termín ve všech vstupních sloupcích.
Souhrn některých funkcí filtrování najdete v operátoru where.
Poznámky
- Pokud klauzule
project
odkazuje na sloupec, který se zobrazuje ve více tabulkách a má více typů, musí typ následovat za tímto odkazem na sloupec v klauzuli projektu. - Pokud se sloupec zobrazí ve více tabulkách a má více typů a
project-smart
používá se, bude ve výsledkufind
odpovídající sloupec pro každý typ, jak je popsáno v části Sjednocení. - Při použití projektového inteligentního projektu můžou změny v predikátu, ve zdrojové sadě tabulek nebo ve schématu tabulek vést ke změně výstupního schématu. Pokud je potřeba schéma konstantního výsledku, použijte místo toho projekt .
find
obor nemůže obsahovat funkce. Pokud chcete do oboru find zahrnout funkci, definujte příkaz let s klíčovým slovem view.
Tipy pro zvýšení výkonu
- Místo tabulkových výrazů používejte tabulky.
Při tabulkovém výrazu se operátor find vrátí k
union
dotazu, který může způsobit snížení výkonu. - Pokud je sloupec, který se zobrazuje ve více tabulkách a má více typů, součástí klauzule projektu, upřednostněte přidání columnType do klauzule projektu před úpravou tabulky před jejím předáním do
find
. - Přidejte do predikátu filtry založené na čase. Použijte hodnotu sloupce datetime nebo ingestion_time().
- Místo fulltextového vyhledávání hledejte v konkrétních sloupcích.
- Je lepší neodkazovat na sloupce, které se zobrazují ve více tabulkách a mají více typů. Pokud je predikát platný při řešení takových typů sloupců pro více než jeden typ, dotaz se vrátí do sjednocení. Podívejte se například na příklady případů, kdy bude hledání 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ů napříč všemi tabulkami, které odpovídají 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
na 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 pouze 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 mezidatabázový dotaz.
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
na , ve všech databázích, jejichž název začíná B
a ve kterých 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 shlukech
Dotaz najde všechny řádky ze všech tabulek, jejichž název začíná K
na , ve všech databázích, jejichž název začíná B
a ve kterých 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ýstupních find
výsledků
Následující příklady ukazují, jak find
se dá použít ve dvou tabulkách: EventsTable1 a EventsTable2.
Předpokládejme, že máme další obsah těchto dvou tabulek:
Tabulka událostí1
Session_id | Level | Text události | Verze |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informace | Nějaký text 1 | verze 1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Část textu 2 | verze 1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | Chyba | Nějaký text 3 | verze 1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | Informace | Část textu 4 | verze 1.1.0 |
Tabulka událostí 2
Session_id | Level | Text události | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informace | Jiný text 1 | Událost 1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informace | Jiný text 2 | Událost 2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Jiný text 3 | Událost 3 |
15eeab5-8576-4b58-8fc6-478f75d8fee4 | Chyba | Jiný text 4 | Událost 4 |
Hledání ve společných sloupcích, promítání běžných a neobvyklých sloupců a balení 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 | Pack_ |
---|---|---|---|---|
Tabulka událostí1 | Část textu 2 | verze 1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
Tabulka událostí 2 | 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 |
---|---|---|---|---|
Tabulka událostí1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Nějaký text 1 | verze 1.0.0 | |
Tabulka událostí1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Část textu 2 | verze 1.0.0 | |
Tabulka událostí 2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Jiný text 1 | Událost 1 |
Poznámka: V praxi se řádky EventsTable1 filtrují pomocí Version == 'v1.0.0'
predikátu a řádky EventsTable2 se filtrují pomocí EventName == 'Event1'
predikátu.
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 | Pack_ |
---|---|---|---|---|
Tabulka Událostí1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informace | Část textu 1 | {"Version":"v1.0.0"} |
Tabulka Událostí1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Část textu 2 | {"Version":"v1.0.0"} |
Tabulka Událostí2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informace | Jiný text 2 | {"Název_události":"Událost2"} |
Tabulka Událostí2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Chyba | Jiný text 3 | {"EventName":"Event3"} |
Vrácení výsledků z každého řádku jako kontejneru vlastností
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Výstup
Zdroj_ | Pack_ |
---|---|
Tabulka Událostí1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"} |
Tabulka Událostí1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"} |
Tabulka Událostí2 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"} |
Tabulka Událostí2 | {"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í jiného 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 ve více 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
Výstupní schéma výsledku bude (Level:string, Timestamp, ProcessId_string, ProcessId_int).
- Následující dotaz se také spustí jako
union
, ale vygeneruje jiné schéma výsledků.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Výstupní schéma výsledku bude (Level:string, Timestamp, ProcessId_string).
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro