Partilhar via


localizar o operador

Aplica-se a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Localiza linhas que correspondem a um predicado em um conjunto de tabelas.

O escopo do 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 funcionará bem quando o espaço de trabalho contiver um grande número de tabelas e colunas e o volume de dados que está sendo verificado for alto e o intervalo de tempo da consulta for alto.

Sintaxe

  • find[withsource= ColumnName] [in (Tabelas)] where Predicado [ project-smart | project ColumnName[ : ColumnType , ... ] , pack_all()[ ]]

  • findPredicado [ | project-smartproject ColumnName[ : ColumnType , ... ] [ ]], 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 incluirá uma coluna chamada source_ cujos valores indicam qual tabela de origem contribuiu com 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, as qualificações de cluster e 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 procurará em todas as tabelas do 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 incluirá 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 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, find pesquisará em todas as tabelas:

    • 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 com E.
  • 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 incluirá 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 de predicado serão filtradas.

Quando você usa project-smarto , as colunas que aparecerão na saída serão:

  • Colunas que aparecem explicitamente no predicado.
  • Colunas comuns a todas as tabelas filtradas.

O restante das colunas será empacotado em um recipiente de propriedades e aparecerá em uma coluna adicional pack . Uma coluna que é referenciada explicitamente pelo predicado e aparece em várias tabelas com vários tipos terá uma coluna diferente no esquema de resultados para cada tipo. Cada um dos nomes de coluna será construído a partir do nome e tipo de coluna original, separados por um sublinhado.

Ao usar project ColumnName[ : ColumnType , ... ] [, pack_all()]:

  • A tabela de resultados incluirá as colunas especificadas na lista. Se uma tabela de origem não contiver uma determinada coluna, os valores nas linhas correspondentes serão nulos.
  • Ao especificar um ColumnType com um ColumnName, essa coluna no "resultado" terá o tipo fornecido e os valores serão convertidos nesse tipo, se necessário. A conversão não terá 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 adicional, 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 * has termo e, usando apenas o termo, pesquisará um termo em todas as colunas de entrada.

Para obter um resumo de algumas funções de filtragem, consulte o operador where.

Observaçõ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 do find, conforme descrito em união
  • Quando você usa o project-smart, 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 project
  • find O escopo não pode incluir funções. Para incluir uma função no escopo de localização, defina uma instrução let com a palavra-chave view.

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á para union. Por exemplo, veja exemplos de casos em que find atuará como uma união.

Exemplos

Pesquisa de termos em todas as tabelas no banco de dados atual

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"

Pesquisa de termos em todas as tabelas que correspondem a um padrão de nome no banco de dados atual

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"

Pesquisa de termos em todas as tabelas em todos os bancos de dados no cluster

A consulta localiza todas as linhas de todas as tabelas em todos os bancos de dados nos quais 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"

Pesquisa de termos em todas as tabelas e bancos de dados 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"

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, projete colunas comuns e incomuns e empacote o restante

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

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 serão filtradas com Version == 'v1.0.0' predicado e as linhas EventsTable2 serão filtradas com EventName == 'Event1' predicado.

Use a notação abreviada para pesquisar em todas as tabelas no banco de dados atual

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

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 atuará como union

Usando uma expressão não tabular como operando find

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

Suponha que criamos duas tabelas executando:

.create tables 
  Table1 (Level:string, Timestamp:datetime, ProcessId:string),
  Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
  • A consulta a seguir será executada como union.
find in (Table1, Table2) where ProcessId == 1001

O esquema de resultado de saída será (Level:string, Timestamp, ProcessId_string, ProcessId_int).

  • A consulta a seguir também será executada como union, mas produzirá um esquema de resultado diferente.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

O esquema de resultado de saída será (Level:string, Timestamp, ProcessId_string)