Operatore find
Trova righe che corrispondono a un predicato in un set di tabelle.
L'ambito di 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 funzionerà 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 | Tipo | Obbligatoria | Descrizione |
---|---|---|---|
ColumnName | string |
Per impostazione predefinita, l'output includerà una colonna denominata source_ i cui valori indicano la tabella di origine che ha contribuito a ogni riga. Se specificato, verrà usato ColumnName anziché source_. Dopo la corrispondenza con caratteri jolly, se la query fa riferimento a tabelle di più database, incluso il database predefinito, il valore di questa colonna avrà un nome di tabella qualificato con il database. Analogamente , le qualifiche del cluster e del database saranno presenti nel valore se viene fatto riferimento a più cluster. | |
Predicate | bool |
✔️ | Questa espressione booleana viene valutata per ogni riga in 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 cercherà tutte le tabelle nel database corrente. È possibile usare:1. Nome di una tabella, ad esempio Events 2. Espressione di query, ad esempio (Events | where id==42) 3. Set di tabelle specificato con un carattere jolly. Ad esempio, E* formerebbe l'unione di tutte le tabelle nel database i cui nomi iniziano con E . |
|
project-smart o project |
string |
Se non specificato, project-smart verrà usato per impostazione predefinita. Per altre informazioni, vedere dettagli dello schema di output. |
withsource=
ColumnName: facoltativo. Per impostazione predefinita, l'output includerà una colonna denominata source_ i cui valori indicano quale tabella di origine ha contribuito a ogni riga. Se specificato, verrà usato ColumnName anziché source_.Predicato:
boolean
espressione sulle colonne delle tabelle di input Table [,
Table, ...]. Viene valutata per ogni riga in 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 , find cercherà 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
verrà usato per impostazione predefinita. Per altre informazioni, vedere dettagli dello schema di output.
Restituisce
Trasformazione delle righe in Table [,
Table, ...] per cui Predicate è true
. Le righe vengono trasformate in base allo schema di output.
Schema di output.
colonna source_
L'output dell'operatore find includerà 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 verranno filtrate.
Quando si usa project-smart
, le colonne che verranno visualizzate nell'output saranno:
- Colonne visualizzate in modo esplicito nel predicato.
- Colonne comuni a tutte le tabelle filtrate.
Il resto delle colonne verrà compresso in un contenitore delle proprietà e verrà visualizzato in una colonna aggiuntiva pack
.
Una colonna a cui fa riferimento in modo esplicito il predicato e viene visualizzata in più tabelle con più tipi avrà una colonna diversa nello schema dei risultati per ogni tipo. Ogni nome di colonna verrà costruito dal nome e dal tipo di colonna originali, separati da un carattere di sottolineatura.
Quando si usa project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]:
- La tabella dei risultati includerà le colonne specificate nell'elenco. Se una tabella di origine non contiene una determinata colonna, i valori nelle righe corrispondenti saranno Null.
- Quando si specifica un ColumnType con columnName, questa colonna nel "risultato" avrà il tipo specificato e i valori verranno inseriti in tale tipo, se necessario. Il cast non avrà alcun effetto sul tipo di colonna durante la valutazione del predicato.
- Quando
pack_all()
viene usata, 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 * has
termine e, usando il termine just, cercherà un termine in tutte le colonne di input.
Per un riepilogo di alcune funzioni di filtro, vedere dove operatore.
Note
- Se la
project
clausola fa riferimento a una colonna visualizzata in più tabelle e ha più tipi, un tipo deve seguire questo riferimento alla colonna nella clausola di progetto - Se una colonna viene visualizzata in più tabelle e ha più tipi ed
project-smart
è in uso, sarà presente una colonna corrispondente per ogni tipo nelfind
risultato di , come descritto nell'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 find, definire un'istruzione let con la parola chiave view.
Suggerimenti per incrementare le prestazioni
- Utilizzare 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 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 durante la risoluzione di tali tipi di colonne per più di un tipo, la query eseguirà il fallback all'unione. Ad esempio, vedere esempi di casi in cui find fungerà da unione.
Esempio
Ricerca termini in tutte le tabelle nel database corrente
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"
Ricerca dei termini in tutte le tabelle corrispondenti a un modello di nome nel database corrente
La query trova tutte le righe di tutte le tabelle del 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"
Ricerca dei termini in tutte le tabelle in tutti i database nel cluster
La query trova tutte le righe di tutte le tabelle in tutti i database 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"
Ricerca dei termini in tutte le tabelle e database corrispondenti a un modello di nome nel cluster
La query trova tutte le righe di tutte le tabelle il cui nome inizia con in tutti i database il cui nome inizia con K
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"
Ricerca dei termini in diversi cluster
La query trova tutte le righe di tutte le tabelle il cui nome inizia con in tutti i database il cui nome inizia con K
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 dei 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 e EventsTable2.
Si supponga di avere il contenuto successivo di queste due tabelle:
EventsTable1
Session_id | Level | EventText | Versione |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Testo1 | v1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Errore | Testo 2 | v1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | Errore | Testo3 | v1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | Informazioni | Testo4 | v1.1.0 |
EventsTable2
Session_id | Level | EventText | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informazioni | Alcuni altri testo1 | Evento1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Alcuni altri testo2 | Event2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Errore | Alcuni altri testo3 | Evento3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Errore | Alcuni altri testo4 | Evento4 |
Cercare colonne comuni, proiettare colonne comuni e non comuni e comprimere il resto
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 | Alcuni altri testo3 | Evento3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
Cercare nelle colonne comuni e non comuni
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 | Testo1 | v1.0.0 | |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Testo 2 | v1.0.0 | |
EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Alcuni altri testo1 | Evento1 |
Nota: in pratica, le righe EventsTable1 verranno filtrate con Version == 'v1.0.0'
predicato e Le righe EventsTable2 verranno filtrate con EventName == 'Event1'
predicato.
Usare la notazione abbreviata per eseguire ricerche in tutte le tabelle nel database corrente
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Output
fonte_ | Session_id | Level | EventText | branco_ |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Testo 1 | {"Version":"v1.0.0"} |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Errore | Testo 2 | {"Version":"v1.0.0"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informazioni | Altro testo2 | {"EventName":"Event2"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Errore | Altro testo3 | {"EventName":"Event3"} |
Restituisce i risultati di ogni riga come contenitore delle proprietà
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
fungeranno da union
Uso di un'espressione non tabulare come operando di ricerca
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
Si supponga di aver creato due tabelle eseguendo:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- La query seguente verrà eseguita come
union
.
find in (Table1, Table2) where ProcessId == 1001
Lo schema dei risultati di output sarà (Level:string, Timestamp, ProcessId_string, ProcessId_int).
- La query seguente verrà eseguita anche come
union
, ma produrrà uno schema di risultati diverso.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
Lo schema dei risultati di output sarà (Level:string, Timestamp, ProcessId_string)
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per