localizar o 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 find
também pode ser entre bancos de dados ou entre 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
é substancialmente menos eficiente do que a filtragem de texto específica da coluna. Sempre que as colunas forem conhecidas, recomendamos usar o operador where.
find
não funciona bem quando o workspace 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[,
... ] [ ]],
pack_all()
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Digitar | Obrigatória | 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 é 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 qualificações de banco de dados estarão presentes no valor se mais de um cluster for referenciado. | |
Predicado | bool |
✔️ | Essa expressão booleana é avaliada para cada linha em cada tabela de entrada. Para obter mais informações, consulte detalhes da sintaxe do predicado. |
Tabelas | string |
Zero ou mais referências de tabela separadas por vírgulas. Por padrão, find examina todas as tabelas no banco de dados atual. Você pode usar: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 será 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 é usado em vez de source_.Predicado: Uma
boolean
expressão sobre as colunas das tabelas de entrada Tabela [,
Tabela, ...]. Ele é avaliado para cada linha em cada tabela de entrada. Para obter mais informações, consulte detalhes da sintaxe do predicado.Tabelas: Opcional. Zero ou mais referências de tabela separadas por vírgulas. Por padrão, localizar pesquisa todas as tabelas para:
- O nome da 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 da tabela, como
project-smart
|project
: se não for especificado,project-smart
será usado por padrão. Para obter mais informações, consulte detalhes do esquema de saída.
Devoluções
Transformação de linhas na Tabela [,
Tabela, ...] para a qual o 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 withsource
parâmetro.
Colunas de resultados
As tabelas de origem que não contêm nenhuma coluna usada pela avaliação do predicado são filtradas.
Quando você usa project-smart
, as colunas que aparecem na saída são:
- Colunas que aparecem explicitamente no predicado.
- Colunas comuns a todas as tabelas filtradas.
O restante das colunas são empacotadas em um recipiente de propriedades e aparecem 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 da coluna original, separados por um sublinhado.
Ao usar project
ColumnName[ ,
... ] [,
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 "resultado" tem o tipo fornecido e os valores são convertidos nesse tipo, se necessário. A conversã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 empacotadas em um recipiente de propriedades e aparecem em uma coluna extra, por padrão 'column1'. No recipiente 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 predicado
O operador find
dá suporte a 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 o operador where.
Considerações
- Se a
project
cláusula fizer referência a uma coluna que aparece em várias tabelas e tem vários tipos, um tipo deverá 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 do projeto, 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 project
-
find
O escopo não pode incluir funções. Para incluir uma função no escopofind
, defina uma instrução let com exibição de palavra-chave.
Dicas de desempenho
- Use tabelas em vez de expressões tabulares.
Se for uma expressão tabular, o operador find retornará a uma
union
consulta que pode resultar em desempenho degradado. - Se uma coluna que aparece em várias tabelas e tem vários tipos fizer parte da cláusula project, prefira adicionar um ColumnType à cláusula project em vez de modificar a tabela antes de passá-la para
find
. - Adicione filtros baseados em tempo ao predicado. Use um valor de coluna datetime ou ingestion_time().
- Pesquise 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 retornará à união.
Por exemplo, consulte exemplos de casos em que
find
atua como umunião.
Exemplos
Os exemplos neste artigo usam tabelas disponíveis publicamente no de cluster de ajuda, como a tabela
StormEvents
no banco de dados exemplos de.
Os exemplos neste artigo usam tabelas disponíveis publicamente, como a tabela
StormEvents
na análise de clima 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 em que 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 Customers
tabela e da SalesTable
tabela do ContosoSales
banco de dados.
find "Hernandez"
Saída
Esta tabela mostra as três primeiras linhas da saída.
fonte_ | embalar_ |
---|---|
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 Customers
tabela.
find in (C*) where * has "Hernandez"
Saída
Esta tabela mostra as três primeiras linhas da saída.
fonte_ | embalar_ |
---|---|
ConferenceSessions | {"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.0000000Z", "duration":60,"time_and_duration":"Wednesday, 26 de maio\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
ConferenceSessions | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: aprofundamento 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":"Focused"} |
ConferenceSessions | {"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.0000000Z", "duration":60,"time_and_duration":"Wednesday, 26 de maio\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
... | ... |
Pesquisa de termos em todo o cluster
A consulta localiza todas as linhas de todas as tabelas em todos os bancos de dados no cluster em que qualquer coluna inclui a palavra Kusto
.
Essa consulta é uma consulta entre bancos de dados .
Os registros resultantes são transformados de acordo com o esquema de saída.
find in (database('*').*) where * has "Kusto"
Saída
Esta tabela mostra as três primeiras linhas da saída.
fonte_ | embalar_ |
---|---|
database("Samples"). ConferenceSessions | {"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.0000000Z", "duration":60,"time_and_duration":"Wednesday, 26 de maio\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
database("Samples"). ConferenceSessions | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: aprofundamento 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":"Focused"} |
database("Samples"). ConferenceSessions | {"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.0000000Z", "duration":60,"time_and_duration":"Wednesday, 26 de maio\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
... | ... |
Pesquisa de termos que corresponde 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"
Saída
Esta tabela mostra as três primeiras linhas da saída.
fonte_ | embalar_ |
---|---|
ConferenceSessions | {"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.0000000Z", "duration":60,"time_and_duration":"Wednesday, 26 de maio\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
ConferenceSessions | {"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.0000000Z", "duration":60,"time_and_duration":"Wednesday, 26 de maio\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
ConferenceSessions | {"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.0000000Z", "duration":60,"time_and_duration":"Wednesday, 26 de maio\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
... | ... |
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 resultados de find
saída
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:
EventosTabela1
Session_Id | Nível | EventText | Versão |
---|---|---|---|
ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Informações | Algum texto1 | v1.0.0 |
ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Erro | Algum texto2 | v1.0.0 |
28b8e46e-3c31-43cf-83cb-48921c3986fc | Erro | Algum texto3 | v1.0.1 |
8f057b11-3281-45c3-a856-05ebb18a3c59 | Informações | Algum texto4 | v1.1.0 |
EventosTabela2
Session_Id | Nível | EventText | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informações | Algum outro texto1 | Evento 1 |
ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Informações | Algum outro texto2 | Evento 2 |
ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Erro | Algum outro texto3 | Evento 3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Erro | Algum outro texto4 | Evento 4 |
Pesquise em colunas comuns, projetos comuns e colunas incomuns e empacote o restante
A consulta pesquisa registros específicos em EventsTable1 e EventsTable2 com base em um determinado Session_Id e em um nível de de erro de. Em seguida, ele 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()
Saída
fonte_ | EventText | Versão | EventName | embalar_ |
---|---|---|---|---|
EventosTabela1 | Algum texto2 | v1.0.0 | {"Session_Id":"ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E", "Nível":"Erro"} | |
EventosTabela2 | Algum outro texto3 | Evento 3 | {"Session_Id":"ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E", "Nível":"Erro"} |
Pesquisar em colunas comuns e incomuns
A consulta pesquisa registros que têm versão como 'v1.0.0' ou EventName como 'Event1' e, em seguida, projeta (seleciona) quatro colunas específicas: Session_Id, EventText, Versione EventName desses resultados filtrados.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Saída
fonte_ | Session_Id | EventText | Versão | EventName |
---|---|---|---|---|
EventosTabela1 | ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Algum texto1 | v1.0.0 | |
EventosTabela1 | ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Algum texto2 | v1.0.0 | |
EventosTabela2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Algum outro texto1 | Evento 1 |
Observação
Na prática, as linhas EventsTable1 são filtradas com predicado Version == 'v1.0.0'
e linhas EventsTable2 são filtradas com predicado EventName == 'Event1'
.
Use a notação abreviada para pesquisar em todas as tabelas no banco de dados atual
Essa consulta pesquisa o banco de dados em busca de registros 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'
Saída
fonte_ | Session_Id | Nível | EventText | embalar_ |
---|---|---|---|---|
EventosTabela1 | ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Informações | Algum texto1 | {"Versão":"v1.0.0"} |
EventosTabela1 | ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Erro | Algum texto2 | {"Versão":"v1.0.0"} |
EventosTabela2 | ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Informações | Algum outro texto2 | {"Nome do Evento":"Evento2"} |
EventosTabela2 | ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E | Erro | Algum outro texto3 | {"Nome do Evento":"Evento3"} |
Retornar os resultados de cada linha como um recipiente de propriedades
Essa consulta pesquisa o banco de dados em busca de registros 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()
Saída
fonte_ | embalar_ |
---|---|
EventosTabela1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "level":"Informações", "EventText":"Algum texto1", "Version":"v1.0.0"} |
EventosTabela1 | {"Session_Id":"ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E", "Level":"Erro", "EventText":"Algum texto2", "Version":"v1.0.0"} |
EventosTabela2 | {"Session_Id":"ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E", "Level":"Informações", "EventText":"Algum outro texto2", "EventName":"Event2"} |
EventosTabela2 | {"Session_Id":"ACBD207D-51AA-4DF7-BFA7-BE70EB68F04E", "Level":"Erro", "EventText":"Algum outro texto3", "EventName":"Event3"} |
Exemplos de casos em que find
atua como union
O operador find
no Kusto às vezes pode agir como um operador de union
, principalmente quando é usado para pesquisar em várias tabelas.
Usando uma expressão nontabular como localizar operando
A consulta primeiro cria uma exibição que filtra EventsTable1 para incluir apenas registros no nível de erro. Em seguida, ele pesquisa nesse modo de exibição filtrado e na tabela EventsTable2 para 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'
Referenciando 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)