encontrar operador
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Localiza linhas que correspondem a um predicado em um conjunto de tabelas.
O escopo do operador de find
também pode ser entre bancos de dados ou clusters.
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"
Observação
find
operador é substancialmente menos eficiente do que a filtragem de texto específica da coluna. Sempre que as colunas forem conhecidas, recomendamos o uso do onde o operador.
find
não funciona bem quando o espaço de trabalho contém um grande número de tabelas e colunas e o volume de dados que está sendo verificado é alto e o intervalo de tempo da consulta é alto.
Sintaxe
find
[withsource
= ColumnName] [in
(
Tabelas)
]where
Predicado [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
Predicado [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]
Saiba mais sobre convenções de sintaxe.
Parâmetros
Designação | Tipo | Necessário | Descrição |
---|---|---|---|
ColumnName | string |
Por padrão, a saída inclui uma coluna chamada source_ cujos valores indicam qual tabela de origem contribuiu para cada linha. Se especificado, ColumnName será usado em vez de source_. Após a correspondência curinga, se a consulta fizer referência a tabelas de mais de um banco de dados, incluindo o banco de dados padrão, o valor dessa coluna terá um nome de tabela qualificado com o banco de dados. Da mesma forma, de cluster e banco de dados qualificações estão presentes no valor se mais de um cluster for referenciado. | |
Predicado | bool |
✔️ | Esta expressão booleana é avaliada para cada linha em cada tabela de entrada. Para obter mais informações, consulte detalhes da sintaxe de predicados. |
Tabelas | string |
Zero ou mais referências de tabela separadas por vírgula. Por padrão, find procura em todas as tabelas no banco de dados atual. Pode utilizar:1. O nome de uma tabela, como Events 2. Uma expressão de consulta, como (Events | where id==42) 3. Um conjunto de tabelas especificadas com um curinga. Por exemplo, E* formaria a união de todas as tabelas no banco de dados cujos nomes começam com E . |
|
project-smart ou project |
string |
Se não for especificado, project-smart é usado por padrão. Para obter mais informações, consulte detalhes do esquema de saída. |
withsource=
ColumnName: Opcional. Por padrão, a saída inclui uma coluna chamada source_ cujos valores indicam qual tabela de origem contribuiu com cada linha. Se especificado, ColumnName será usado em vez de source_.Predicado: Uma expressão
boolean
sobre as colunas das tabelas de entrada Tabela [,
Tabela, ...]. É avaliado para cada linha em cada tabela de entrada. Para obter mais informações, consulte detalhes da sintaxe de predicados.Tabelas: Opcional. Zero ou mais referências de tabela separadas por vírgula. Por padrãolocalizar pesquisa todas as tabelas para:
- O nome de uma tabela, como
Events
- Uma expressão de consulta, como
(Events | where id==42)
- Um conjunto de tabelas especificadas com um curinga. Por exemplo,
E*
formaria a união de todas as tabelas cujos nomes começam comE
.
- O nome de uma tabela, como
project-smart
|project
: Se não for especificado,project-smart
é usado por padrão. Para obter mais informações, consulte detalhes do esquema de saída.
Devoluções
Transformação de linhas em Tabela [,
Tabela, ...] para a qual Predicado é true
. As linhas são transformadas de acordo com o esquema de saída .
Esquema de saída
source_ coluna
A saída do operador find
sempre inclui uma coluna source_ com o nome da tabela de origem. A coluna pode ser renomeada usando o parâmetro withsource
.
colunas de resultados
As tabelas de origem que não contêm nenhuma coluna usada pela avaliação de predicados são filtradas.
Quando você usa project-smart
, as colunas que aparecem na saída são:
- Colunas que aparecem explicitamente no predicado.
- Colunas que são comuns a todas as tabelas filtradas.
O restante das colunas é empacotado em um saco de propriedades e aparece em uma coluna de pack
extra.
Uma coluna que é referenciada explicitamente pelo predicado e aparece em várias tabelas com vários tipos, tem uma coluna diferente no esquema de resultados para cada tipo. Cada um dos nomes de coluna é construído a partir do nome e do tipo de coluna original, separados por um sublinhado.
Ao usar project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]:
- A tabela de resultados inclui as colunas especificadas na lista. Se uma tabela de origem não contiver uma determinada coluna, os valores nas linhas correspondentes serão nulos.
- Quando você especifica um ColumnType com um ColumnName, essa coluna no "result" tem o tipo determinado, e os valores são convertidos para esse tipo, se necessário. A transmissão não tem efeito sobre o tipo de coluna ao avaliar o Predicado.
- Quando
pack_all()
é usado, todas as colunas, incluindo as colunas projetadas, são embaladas em um pacote de propriedades e aparecem em uma coluna extra, por padrão 'column1'. No pacote de propriedades, o nome da coluna de origem serve como o nome da propriedade e o valor da coluna serve como o valor da propriedade.
Sintaxe de predicados
O operador find
suporta uma sintaxe alternativa para o termo * has
e, usando apenas termo, pesquisa um termo em todas as colunas de entrada.
Para obter um resumo de algumas funções de filtragem, consulte onde o operador.
Considerações
- Se a cláusula
project
fizer referência a uma coluna que aparece em várias tabelas e tem vários tipos, um tipo deve seguir essa referência de coluna na cláusula do projeto - Se uma coluna aparecer em várias tabelas e tiver vários tipos e
project-smart
estiver em uso, haverá uma coluna correspondente para cada tipo no resultado dofind
, conforme descrito em união - Quando você usa inteligente de projeto, as alterações no predicado, no conjunto de tabelas de origem ou no esquema de tabelas podem resultar em uma alteração no esquema de saída. Se um esquema de resultado constante for necessário, use projeto em vez disso
-
find
escopo não pode incluir funções . Para incluir uma função no escopofind
, defina uma instrução let com palavra-chave view.
Dicas de desempenho
- Use tabelas em vez de expressões tabulares.
Se a expressão tabular, o operador de localização retornará a uma consulta
union
que pode resultar em desempenho degradado. - Se uma coluna que aparece em várias tabelas e tem vários tipos faz parte da cláusula do projeto, prefira adicionar um ColumnType à cláusula do projeto em vez de modificar a tabela antes de passá-la para
find
. - Adicione filtros baseados no tempo ao predicado. Use um valor de coluna datetime ou ingestion_time().
- Pesquisa em colunas específicas em vez de uma pesquisa de texto completo.
- É melhor não fazer referência a colunas que aparecem em várias tabelas e têm vários tipos. Se o predicado for válido ao resolver esse tipo de coluna para mais de um tipo, a consulta voltará à união.
Por exemplo, ver exemplos de casos em que
find
atua como um sindicato.
Exemplos
Os exemplos neste artigo usam tabelas disponíveis publicamente no de cluster de ajuda, como a tabela
StormEvents
no banco de dados Samples.
Os exemplos neste artigo usam tabelas disponíveis publicamente, como a tabela
StormEvents
na análise do tempo dados de exemplo.
Pesquisa de termos em todas as tabelas
A consulta localiza todas as linhas de todas as tabelas no banco de dados atual nas quais qualquer coluna inclui a palavra Hernandez
. Os registros resultantes são transformados de acordo com o esquema de saída . A saída inclui linhas da tabela Customers
e da tabela SalesTable
do banco de dados ContosoSales
.
find "Hernandez"
Output
Esta tabela mostra as três primeiras linhas da saída.
source_ | pack_ |
---|---|
Clientes | {"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"} |
Clientes | {"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"} |
Clientes | {"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"} |
... | ... |
Pesquisa de termos em todas as tabelas que correspondem a um padrão de nome
A consulta localiza todas as linhas de todas as tabelas no banco de dados atual cujo nome começa com C
e nas quais qualquer coluna inclui a palavra Hernandez
. Os registros resultantes são transformados de acordo com o esquema de saída . Agora, a saída contém apenas registros da tabela Customers
.
find in (C*) where * has "Hernandez"
Output
Esta tabela mostra as três primeiras linhas da saída.
source_ | pack_ |
---|---|
ConferênciasSessões | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Advanced Kusto query language topics","session_type":"Mesa redonda","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.0000000Z","duration":60,"time_and_duration":"Quarta-feira, 26 de maio de\n8:30 AM - 9:30 AM GMT","kusto_affinity":"Focado"} |
ConferênciasSessões | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Aprofunde-se na linguagem de consulta do Azure Kusto. ","session_type":"Teatro","proprietário":"Jean François Berenguer","participantes":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":"","starttime":null,"duration":null,"time_and_duration":"","kusto_affinity":"Focado"} |
ConferênciasSessões | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Advanced Kusto query language topics","session_type":"Mesa redonda","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.0000000Z","duration":60,"time_and_duration":"Quarta-feira, 26 de maio de\n8:30 AM - 9:30 AM GMT","kusto_affinity":"Focado"} |
... | ... |
Pesquisa de termos no cluster
A consulta localiza todas as linhas de todas as tabelas em todos os bancos de dados no cluster no qual qualquer coluna inclui a palavra Kusto
.
Esta consulta é uma consulta entre bancos de dados consulta.
Os registros resultantes são transformados de acordo com o esquema de saída .
find in (database('*').*) where * has "Kusto"
Output
Esta tabela mostra as três primeiras linhas da saída.
source_ | pack_ |
---|---|
base de dados ("Amostras"). ConferênciasSessões | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Advanced Kusto query language topics","session_type":"Mesa redonda","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.0000000Z","duration":60,"time_and_duration":"Quarta-feira, 26 de maio de\n8:30 AM - 9:30 AM GMT","kusto_affinity":"Focado"} |
base de dados ("Amostras"). ConferênciasSessões | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Aprofunde-se na linguagem de consulta do Azure Kusto. ","session_type":"Teatro","proprietário":"Jean François Berenguer","participantes":"","URL":"https://myignite.techcommunity.microsoft.com/sessions/66329","level":300,"session_location":"","starttime":null,"duration":null,"time_and_duration":"","kusto_affinity":"Focado"} |
base de dados ("Amostras"). ConferênciasSessões | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Advanced Kusto query language topics","session_type":"Mesa redonda","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.0000000Z","duration":60,"time_and_duration":"Quarta-feira, 26 de maio de\n8:30 AM - 9:30 AM GMT","kusto_affinity":"Focado"} |
... | ... |
Pesquisa de termos que correspondem a um padrão de nome no cluster
A consulta localiza todas as linhas de todas as tabelas cujo nome começa com K
em todos os bancos de dados cujo nome começa com B
e nos quais qualquer coluna inclui a palavra Kusto
.
Os registros resultantes são transformados de acordo com o esquema de saída .
find in (database("S*").C*) where * has "Kusto"
Output
Esta tabela mostra as três primeiras linhas da saída.
source_ | pack_ |
---|---|
ConferênciasSessões | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Advanced Kusto query language topics","session_type":"Mesa redonda","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.0000000Z","duration":60,"time_and_duration":"Quarta-feira, 26 de maio de\n8:30 AM - 9:30 AM GMT","kusto_affinity":"Focado"} |
ConferênciasSessões | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Advanced Kusto query language topics","session_type":"Mesa redonda","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.0000000Z","duration":60,"time_and_duration":"Quarta-feira, 26 de maio de\n8:30 AM - 9:30 AM GMT","kusto_affinity":"Focado"} |
ConferênciasSessões | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Advanced Kusto query language topics","session_type":"Mesa redonda","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.0000000Z","duration":60,"time_and_duration":"Quarta-feira, 26 de maio de\n8:30 AM - 9:30 AM GMT","kusto_affinity":"Focado"} |
... | ... |
Pesquisa de termos em vários clusters
A consulta localiza todas as linhas de todas as tabelas cujo nome começa com K
em todos os bancos de dados cujo nome começa com B
e nos quais qualquer coluna inclui a palavra Kusto
.
Os registros resultantes são transformados de acordo com o esquema de saída .
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
Pesquisa de termos em todas as tabelas
A consulta localiza todas as linhas de todas as tabelas nas quais qualquer coluna inclui a palavra Kusto
.
Os registros resultantes são transformados de acordo com o esquema de saída .
find "Kusto"
Exemplos de find
resultados de produção
Os exemplos a seguir mostram como find
pode ser usado em duas tabelas: EventsTable1 e EventsTable2.
Suponha que temos o próximo conteúdo dessas duas tabelas:
EventosTabela 1
Session_Id | Nível | EventText | Versão |
---|---|---|---|
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informação | Alguns Textos1 | v1.0.0 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erro | Alguns Textos2 | v1.0.0 |
28B8E46E-3C31-43CF-83CB-48921C3986FC | Erro | Alguns textos3 | v1.0.1 |
8F057B11-3281-45C3-A856-05EBB18A3C59 | Informação | Alguns Textos4 | v1.1.0 |
EventosTabela 2
Session_Id | Nível | EventText | Nome do Evento |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informação | Alguns outros textos1 | Evento1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informação | Outro texto2 | Evento2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erro | Outro texto3 | Evento3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Erro | Alguns outros textos4 | Evento4 |
Pesquise em colunas comuns, comuns do projeto e colunas incomuns e empacote o restante
A consulta procura registos específicos no EventsTable1 e EventsTable2 com base num determinado Session_Id e num Nível de de Erro. Em seguida, projeta três colunas específicas: EventText, Versione EventNamee empacota todas as outras colunas restantes em um objeto dinâmico.
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Output
source_ | EventText | Versão | Nome do Evento | pack_ |
---|---|---|---|---|
EventosTabela 1 | Alguns Textos2 | v1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Nível":"Erro"} | |
EventosTabela 2 | Outro texto3 | Evento3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Nível":"Erro"} |
Pesquisar em colunas comuns e incomuns
A consulta procura registos que tenham Versão como 'v1.0.0' ou EventName como 'Event1' e, em seguida, projeta (seleciona) quatro colunas específicas: Session_Id, EventText, Versione EventName a partir desses resultados filtrados.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Output
source_ | Session_Id | EventText | Versão | Nome do Evento |
---|---|---|---|---|
EventosTabela 1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Alguns Textos1 | v1.0.0 | |
EventosTabela 1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Alguns Textos2 | v1.0.0 | |
EventosTabela 2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Alguns outros textos1 | Evento1 |
Observação
Na prática, linhas de EventsTable1 são filtradas com Version == 'v1.0.0'
predicado e linhas de EventsTable2 são filtradas com EventName == 'Event1'
predicado.
Use notação abreviada para pesquisar em todas as tabelas no banco de dados atual
Esta consulta procura na base de dados quaisquer registos com um Session_Id que corresponda a 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'. Ele recupera registros de todas as tabelas e colunas que contêm esse Session_Idespecífico.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Output
source_ | Session_Id | Nível | EventText | pack_ |
---|---|---|---|---|
EventosTabela 1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informação | Alguns Textos1 | {"Versão":"v1.0.0"} |
EventosTabela 1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erro | Alguns Textos2 | {"Versão":"v1.0.0"} |
EventosTabela 2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informação | Outro texto2 | {"EventName":"Event2"} |
EventosTabela 2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erro | Outro texto3 | {"EventName":"Event3"} |
Retornar os resultados de cada linha como um saco de propriedades
Essa consulta pesquisa registros no banco de dados com o Session_Id especificado e retorna todas as colunas desses registros como um único objeto dinâmico.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Output
source_ | pack_ |
---|---|
EventosTabela 1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"} |
EventosTabela 1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"} |
EventosTabela 2 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"} |
EventosTabela 2 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Other Text3", "EventName":"Event3"} |
Exemplos de casos em que find
atua como union
O operador find
em Kusto às vezes pode agir como um operador union
, principalmente quando é usado para pesquisar em várias tabelas.
Usando uma expressão não tabular como operando de localização
A consulta primeiro cria um modo de exibição que filtra EventsTable1 para incluir apenas registros de nível de erro. Em seguida, ele pesquisa nessa exibição filtrada e na tabela EventsTable2 registros com um Session_Idespecífico.
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Fazer referência a uma coluna que aparece em várias tabelas e tem vários tipos
Para este exemplo, crie duas tabelas executando:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- A consulta a seguir é executada como
union
.
find in (Table1, Table2) where ProcessId == 1001
O esquema de resultado de saída é (Level:string, Timestamp, ProcessId_string, ProcessId_int).
- A consulta a seguir é executada como
union
, mas produz um esquema de resultado diferente.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
O esquema de resultado de saída é (Level:string, Timestamp, ProcessId_string)