Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 | Typ | Požadováno | Popis |
---|---|---|---|
název sloupce | 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é . Řá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
Obecné příklady
Následující příklad 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"} |
... | ... |
Následující příklad 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í"} |
... | ... |
Následující příklad najde všechny řádky ze všech tabulek ve všech databázích v clusteru, ve kterém 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í"} |
... | ... |
Následující příklad 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í"} |
... | ... |
Následující příklad 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"
Následující příklad 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
Předpokládejme, že máme další obsah těchto dvou tabulek:
EventsTable1
Session_Id | Úroveň | 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 | Úroveň | Text události | Název Události |
---|---|---|---|
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 |
Následující příklad vyhledá konkrétní záznamy v EventsTable1 a EventsTable2 na základě daného Session_Id a úrovně chyby . 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 | Název Události | 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"} |
Následující příklad vyhledá záznamy, které mají buď verzi v1.0.0, nebo EventName jako Event1, a pak projektuje (vybere) čtyři konkrétní sloupce: Session_Id, EventText, Version a 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 | Název Události |
---|---|---|---|---|
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'
.
Následující příklad 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 | Úroveň | 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"} |
Následující příklad vyhledá v databázi 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 sjednocení
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.
Následující příklad nejprve vytvoří zobrazení, které filtruje EventsTable1 tak, aby zahrnovalo pouze záznamy na úrovni chyby. 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'
Následující příklady ukazují, jak find
může operátor fungovat jako union
sloupec ve více tabulkách s různými typy. V tomto případě ProcessId
se sloupec nachází v tabulce Table1 i Table2, ale s různými typy.
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)