Operatore find
Si applica a: ✅Microsoft Fabric✅
Trova le righe che corrispondono a un predicato in un set di tabelle.
L'ambito dell'operatore find
può anche essere tra database o tra cluster.
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"
Nota
find
l'operatore è sostanzialmente meno efficiente rispetto al filtro di testo specifico della colonna. Ogni volta che le colonne sono note, è consigliabile usare l'operatore where.
find
non funziona correttamente quando l'area di lavoro contiene un numero elevato di tabelle e colonne e il volume di dati analizzato è elevato e l'intervallo di tempo della query è elevato.
Sintassi
find
[withsource
= ColumnName] [in
(
Tables)
]where
Predicate [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
Predicato [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
ColumnName | string |
Per impostazione predefinita, l'output include una colonna denominata source_ i cui valori indicano quale tabella di origine ha contribuito a ogni riga. Se specificato, ColumnName viene usato anziché source_. Dopo la corrispondenza con caratteri jolly, se la query fa riferimento a tabelle da più di un database incluso il database predefinito, il valore di questa colonna ha un nome di tabella qualificato con il database. Analogamente, cluster e qualifiche del database sono presenti nel valore se viene fatto riferimento a più cluster. | |
Predicato | bool |
✔️ | Questa espressione booleana viene valutata per ogni riga di ogni tabella di input. Per altre informazioni, vedere Dettagli della sintassi del predicato. |
Tabelle | string |
Zero o più riferimenti di tabella delimitati da virgole. Per impostazione predefinita, find cerca tutte le tabelle nel database corrente. Puoi usare:1. Nome di una tabella, ad esempio Events 2. Espressione di query, ad esempio (Events | where id==42) 3. Set di tabelle specificate con un carattere jolly. Ad esempio, E* formerebbe l'unione di tutte le tabelle nel database i cui nomi iniziano con E . |
|
project-smart oppure project |
string |
Se non specificato, project-smart viene utilizzato per impostazione predefinita. Per altre informazioni, vedere dettagli dello schema di output. |
withsource=
ColumnName: facoltativo. Per impostazione predefinita, l'output include una colonna denominata source_ i cui valori indicano quale tabella di origine ha contribuito a ogni riga. Se specificato, ColumnName viene usato anziché source_.Predicato: espressione
boolean
sulle colonne delle tabelle di input Table [,
, ...]. Viene valutata per ogni riga di ogni tabella di input. Per altre informazioni, vedere Dettagli della sintassi del predicato.Tabelle: facoltativo. Zero o più riferimenti di tabella delimitati da virgole. Per impostazione predefinita, trovare cerca tutte le tabelle per:
- Il nome della tabella, ad esempio
Events
- Un'espressione di query, ad esempio
(Events | where id==42)
- Un set di tabelle specificato con un carattere jolly. Ad esempio,
E*
formerebbe l'unione di tutte le tabelle i cui nomi iniziano conE
.
- Il nome della tabella, ad esempio
project-smart
|project
: se non specificatoproject-smart
viene usato per impostazione predefinita. Per altre informazioni, vedere dettagli dello schema di output.
Valori restituiti
Trasformazione delle righe in Table [,
, ...] per cui Predicato è true
. Le righe vengono trasformate in base allo schema di output.
Schema di output.
source_ colonna
L'output dell'operatore find
include sempre una colonna source_ con il nome della tabella di origine. La colonna può essere rinominata usando il withsource
parametro .
colonne dei risultati
Le tabelle di origine che non contengono colonne usate dalla valutazione del predicato vengono filtrate.
Quando si usa project-smart
, le colonne visualizzate nell'output sono:
- Colonne visualizzate in modo esplicito nel predicato.
- Colonne comuni a tutte le tabelle filtrate.
Il resto delle colonne viene compresso in un contenitore delle proprietà e viene visualizzato in una colonna pack
aggiuntiva.
Una colonna a cui viene fatto riferimento in modo esplicito dal predicato e viene visualizzata in più tabelle con più tipi ha una colonna diversa nello schema dei risultati per ogni tipo. Ognuno dei nomi di colonna viene costruito dal nome e dal tipo di colonna originale, separati da un carattere di sottolineatura.
Quando si usa project
ColumnName[ :
ColumnType,
... ] [,
pack_all()
]:
- La tabella dei risultati include le colonne specificate nell'elenco. Se una tabella di origine non contiene una determinata colonna, i valori nelle righe corrispondenti sono Null.
- Quando si specifica un ColumnType con un ColumnName, questa colonna nel "risultato" ha il tipo specificato e i valori vengono cast a tale tipo, se necessario. Il cast non ha alcun effetto sul tipo di colonna durante la valutazione del predicato .
- Quando si usa
pack_all()
, tutte le colonne, incluse le colonne proiettate, vengono compresse in un contenitore delle proprietà e vengono visualizzate in una colonna aggiuntiva, per impostazione predefinita 'column1'. Nel contenitore delle proprietà il nome della colonna di origine funge da nome della proprietà e il valore della colonna funge da valore della proprietà.
Sintassi del predicato
L'operatore find
supporta una sintassi alternativa per il termine * has
e usa solo termine, cerca un termine in tutte le colonne di input.
Per un riepilogo di alcune funzioni di filtro, vedere dove operatore.
Considerazioni
- Se la
project
clausola fa riferimento a una colonna che viene visualizzata in più tabelle e ha più tipi, un tipo deve seguire questo riferimento a questa colonna nella clausola di progetto - Se una colonna viene visualizzata in più tabelle e include più tipi e
project-smart
è in uso, è presente una colonna corrispondente per ogni tipo nel risultato dell'find
, come descritto in unione - Quando si usa project-smart, le modifiche nel predicato, nel set di tabelle di origine o nello schema delle tabelle, possono comportare una modifica allo schema di output. Se è necessario uno schema dei risultati costante, usare invece il progetto
-
find
l'ambito non può includere funzioni. Per includere una funzione nell'ambito difind
, definire un'istruzione let con parola chiave view.
Suggerimenti per incrementare le prestazioni
- Usare tabelle anziché espressioni tabulari.
Se l'espressione tabulare, l'operatore find esegue il fallback a una
union
query che può comportare prestazioni ridotte. - Se una colonna visualizzata in più tabelle e ha più tipi, fa parte della clausola di progetto, preferire l'aggiunta di un columnType alla clausola di progetto rispetto alla modifica della tabella prima di passarla a
find
. - Aggiungere filtri basati sul tempo al predicato. Usare un valore di colonna datetime o ingestion_time().
- Eseguire ricerche in colonne specifiche anziché in una ricerca full-text.
- È preferibile non fare riferimento a colonne visualizzate in più tabelle e avere più tipi. Se il predicato è valido quando si risolve tale tipo di colonne per più tipi, la query esegue il fallback all'unione.
Ad esempio, vedere esempi di casi in cui
find
funge da unione.
Esempi
Gli esempi in questo articolo usano tabelle disponibili pubblicamente nel cluster della Guida , ad esempio la tabella
StormEvents
nel database degli esempi.
Gli esempi in questo articolo usano tabelle disponibili pubblicamente, ad esempio la tabella
StormEvents
in Analisi meteo dati di esempio.
Ricerca termini in tutte le tabelle
La query trova tutte le righe di tutte le tabelle nel database corrente in cui qualsiasi colonna include la parola Hernandez
. I record risultanti vengono trasformati in base allo schema di output. L'output include righe della Customers
tabella e della SalesTable
tabella del ContosoSales
database.
find "Hernandez"
Output
Questa tabella mostra le prime tre righe dell'output.
fonte_ | branco_ |
---|---|
Clientela | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":5023,"Education":"Partial High School","FirstName":"Devin","Gender":"M","LastName":"Hlix","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
Clientela | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7814,"Education":"Partial College","FirstName":"Kristy","Gender":"F","LastName":"Hlix","MaritalStatus":"S","Occupazione":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"} |
Clientela | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7888,"Education":"Partial High School","FirstName":"Kari","Gender":"F","LastName":"Hsley","MaritalStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
... | ... |
Ricerca termini in tutte le tabelle che corrispondono a un modello di nome
La query trova tutte le righe di tutte le tabelle nel database corrente il cui nome inizia con C
e in cui qualsiasi colonna include la parola Hernandez
. I record risultanti vengono trasformati in base allo schema di output. L'output contiene ora solo i record della Customers
tabella.
find in (C*) where * has "Hernandez"
Output
Questa tabella mostra le prime tre righe dell'output.
fonte_ | branco_ |
---|---|
ConferenzeSessioni | {"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":"Wednesday, 26 maggio\n8:30 - 9:30 GMT","kusto_affinity":"Focus"} |
ConferenzeSessioni | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: approfondimento sul linguaggio di query di Azure Kusto. ","session_type":"Theater","owner":"Jean Two Berenguer","participants":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":"","starttime":null,"duration":null,"time_and_duration":"","kusto_affinity":"Focus"} |
ConferenzeSessioni | {"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":"Wednesday, 26 maggio\n8:30 - 9:30 GMT","kusto_affinity":"Focus"} |
... | ... |
Ricerca dei termini nel cluster
La query trova tutte le righe di tutte le tabelle di tutti i database nel cluster in cui qualsiasi colonna include la parola Kusto
.
Questa query è una query tra database .
I record risultanti vengono trasformati in base allo schema di output.
find in (database('*').*) where * has "Kusto"
Output
Questa tabella mostra le prime tre righe dell'output.
fonte_ | branco_ |
---|---|
database("Samples"). ConferenzeSessioni | {"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":"Wednesday, 26 maggio\n8:30 - 9:30 GMT","kusto_affinity":"Focus"} |
database("Samples"). ConferenzeSessioni | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: approfondimento sul linguaggio di query di Azure Kusto. ","session_type":"Theater","owner":"Jean Two Berenguer","participants":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":"","starttime":null,"duration":null,"time_and_duration":"","kusto_affinity":"Focus"} |
database("Samples"). ConferenzeSessioni | {"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":"Wednesday, 26 maggio\n8:30 - 9:30 GMT","kusto_affinity":"Focus"} |
... | ... |
Ricerca di termini corrispondente a un modello di nome nel cluster
La query trova tutte le righe di tutte le tabelle il cui nome inizia con K
in tutti i database il cui nome inizia con B
e in cui qualsiasi colonna include la parola Kusto
.
I record risultanti vengono trasformati in base allo schema di output.
find in (database("S*").C*) where * has "Kusto"
Output
Questa tabella mostra le prime tre righe dell'output.
fonte_ | branco_ |
---|---|
ConferenzeSessioni | {"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":"Wednesday, 26 maggio\n8:30 - 9:30 GMT","kusto_affinity":"Focus"} |
ConferenzeSessioni | {"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":"Wednesday, 26 maggio\n8:30 - 9:30 GMT","kusto_affinity":"Focus"} |
ConferenzeSessioni | {"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":"Wednesday, 26 maggio\n8:30 - 9:30 GMT","kusto_affinity":"Focus"} |
... | ... |
Ricerca termini in diversi cluster
La query trova tutte le righe di tutte le tabelle il cui nome inizia con K
in tutti i database il cui nome inizia con B
e in cui qualsiasi colonna include la parola Kusto
.
I record risultanti vengono trasformati in base allo schema di output.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
Ricerca termini in tutte le tabelle
La query trova tutte le righe di tutte le tabelle in cui qualsiasi colonna include la parola Kusto
.
I record risultanti vengono trasformati in base allo schema di output.
find "Kusto"
Esempi di risultati di find
output
Negli esempi seguenti viene illustrato come find
usare su due tabelle: EventsTable1 ed EventsTable2.
Si supponga di avere il contenuto successivo di queste due tabelle:
EventsTable1
Session_Id | Livello | EventText | Versione |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Testo 1 | v1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Testo 2 | v1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | Error | Testo 3 | v1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | Informazioni | Testo 4 | v1.1.0 |
EventsTable2
Session_Id | Livello | EventText | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informazioni | Altro testo1 | Evento1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Altro testo2 | Event2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Altro testo3 | Event3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Error | Altro testo4 | Evento4 |
Cercare colonne comuni, proiettare colonne comuni e non comuni e comprimere il resto
La query cerca record specifici in EventsTable1 e EventsTable2 in base a un determinato Session_Id e a un Livello di errore. Proietta quindi tre colonne specifiche: EventText, Versione EventNamee inserisce tutte le altre colonne rimanenti in un oggetto dinamico.
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Output
fonte_ | EventText | Versione | EventName | branco_ |
---|---|---|---|---|
EventsTable1 | Testo 2 | v1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
EventsTable2 | Altro testo3 | Event3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
Eseguire ricerche in colonne comuni e non comuni
La query cerca i record con Version come "v1.0.0" o EventName come "Event1", quindi proietta quattro colonne specifiche: Session_Id, EventText, Versione EventName da tali risultati filtrati.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Output
fonte_ | Session_Id | EventText | Versione | EventName |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Testo 1 | v1.0.0 | |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Testo 2 | v1.0.0 | |
EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Altro testo1 | Evento1 |
Nota
In pratica, le righe eventsTable1 vengono filtrate con predicato Version == 'v1.0.0'
e le righe EventsTable2 vengono filtrate con predicato EventName == 'Event1'
.
Usare la notazione abbreviata per eseguire ricerche in tutte le tabelle nel database corrente
Questa query cerca nel database tutti i record con un Session_Id che corrisponde a 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'. Recupera i record da tutte le tabelle e le colonne che contengono questo specifico Session_Id.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Output
fonte_ | Session_Id | Livello | EventText | branco_ |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Testo 1 | {"Version":"v1.0.0"} |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Testo 2 | {"Version":"v1.0.0"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Altro testo2 | {"EventName":"Event2"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Altro testo3 | {"EventName":"Event3"} |
Restituisce i risultati di ogni riga come contenitore delle proprietà
Questa query cerca nel database i record con il Session_Id specificato e restituisce tutte le colonne di tali record come singolo oggetto dinamico.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Output
fonte_ | branco_ |
---|---|
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"} |
Esempi di casi in cui find
agisce come union
L'operatore find
in Kusto può talvolta fungere da operatore union
, principalmente quando viene usato per eseguire ricerche in più tabelle.
Uso di un'espressione nontabulare come operando di ricerca
La query crea prima una vista che filtra EventsTable1 in modo da includere solo record a livello di errore. Esegue quindi una ricerca all'interno di questa vista filtrata e nella tabella EventsTable2 per i record con un Session_Idspecifico.
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Riferimento a una colonna visualizzata in più tabelle e con più tipi
Per questo esempio, creare due tabelle eseguendo:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- La query seguente viene eseguita come
union
.
find in (Table1, Table2) where ProcessId == 1001
Lo schema dei risultati di output è (Level:string, Timestamp, ProcessId_string, ProcessId_int).
- La query seguente viene eseguita come
union
, ma produce uno schema di risultati diverso.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Lo schema dei risultati di output è (Level:string, Timestamp, ProcessId_string)