Partilhar via


encontrar operador

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft 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()]]

  • find Predicado [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 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 com E.
  • 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 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 do find, 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 escopo find, 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 Ce 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)