Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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)]wherePredicado [project-smart|projectColumnName[:ColumnType,... ] [,pack_all()]]findPredicado [project-smart|projectColumnName[: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 Events2. 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
booleansobre 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 projectColumnName[: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
projectfizer 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-smartestiver 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
-
findescopo 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
unionque 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
findatua como um sindicato.
Exemplos
Exemplos gerais
O exemplo a seguir 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"
Realização
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"} |
| ... | ... |
O exemplo a seguir 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"
Realização
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"} |
| ... | ... |
O exemplo a seguir 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"
Realização
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"} |
| ... | ... |
O exemplo a seguir 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"
Realização
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"} |
| ... | ... |
O exemplo a seguir 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"
O exemplo a seguir 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
Suponha que temos o próximo conteúdo dessas duas tabelas:
EventosTabela 1
| Session_Id | Nível | Texto do Evento | 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 | Texto do Evento | 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 |
O exemplo a seguir procura registros específicos em EventsTable1 e EventsTable2 com base em um determinado Session_Id e um Nível 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()
Realização
| source_ | Texto do Evento | 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"} |
O exemplo a seguir procura registros que tenham Version como 'v1.0.0' ou EventName como 'Event1' e, em seguida, projeta (seleciona) quatro colunas específicas: Session_Id, EventText, Version e EventName desses resultados filtrados.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Realização
| source_ | Session_Id | Texto do Evento | 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.
O exemplo a seguir pesquisa no banco de dados quaisquer 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'
Realização
| source_ | Session_Id | Nível | Texto do Evento | 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"} |
O exemplo a seguir 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()
Realização
| 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 sindicato
O operador find em Kusto às vezes pode agir como um operador union, principalmente quando é usado para pesquisar em várias tabelas.
O exemplo a seguir 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'
Os exemplos a seguir demonstram como o find operador pode agir como um union quando uma coluna aparece em várias tabelas com tipos diferentes. Neste caso, a ProcessId coluna está presente na Tabela 1 e na Tabela 2, mas com tipos diferentes.
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)