operador find
Localiza linhas que correspondem a um predicado num conjunto de tabelas.
O âmbito do find
também pode ser entre bases 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"
Nota
find
O operador é substancialmente menos eficiente do que a filtragem de texto específica de colunas. Sempre que as colunas forem conhecidas, recomendamos que utilize o operador where. find
não funcionará bem quando a área de trabalho contiver um grande número de tabelas e colunas e o volume de dados que está a ser analisado for elevado e o intervalo de tempo da consulta for elevado.
Syntax
find
[withsource
= ColumnName] [in
(
Tables)
]where
Predicate [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]find
Predicado [project-smart
|project
ColumnName[:
ColumnType,
... ] [,
pack_all()
]]
Saiba mais sobre as convenções de sintaxe.
Parâmetros
Nome | Tipo | Necessário | Descrição |
---|---|---|---|
ColumnName | string |
Por predefinição, o resultado incluirá uma coluna denominada source_ cujos valores indicam qual a tabela de origem que contribuiu com cada linha. Se especificado, ColumnName será utilizado em vez de source_. Após a correspondência de carateres universais, se a consulta referenciar tabelas de mais do que uma base de dados, incluindo a base de dados predefinida, o valor desta coluna terá um nome de tabela qualificado com a base de dados. Da mesma forma, as qualificações de clusters e bases de dados estarão presentes no valor se for referenciado mais do que um cluster. | |
Predicado | bool |
✔️ | Esta expressão booleana é avaliada para cada linha em cada tabela de entrada. Para obter mais informações, veja detalhes de predicado-sintaxe. |
Tabelas | string |
Zero ou mais referências de tabelas separadas por vírgulas. Por predefinição, find irá procurar em todas as tabelas na base 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 caráter universal. Por exemplo, E* formaria a união de todas as tabelas na base de dados cujos nomes começam por E . |
|
project-smart ou project |
string |
Se não for especificado, project-smart será utilizado por predefinição. Para obter mais informações, veja output-schema details (Detalhes do esquema de saída). |
withsource=
ColumnName: opcional. Por predefinição, o resultado incluirá uma coluna denominada source_ cujos valores indicam qual a tabela de origem que contribuiu com cada linha. Se especificado, ColumnName será utilizado em vez de source_.Predicado: uma
boolean
expressão sobre as colunas das tabelas de entrada Tabela [,
Tabela, ...]. É avaliado para cada linha em cada tabela de entrada. Para obter mais informações, veja detalhes de predicado-sintaxe.Tabelas: opcional. Zero ou mais referências de tabelas separadas por vírgulas. Por predefinição, a localização irá procurar em todas as tabelas:
- O nome de uma tabela, como
Events
- Uma expressão de consulta, como
(Events | where id==42)
- Um conjunto de tabelas especificadas com um caráter universal. Por exemplo,
E*
formaria a união de todas as tabelas cujos nomes começam porE
.
- O nome de uma tabela, como
project-smart
|project
: se não for especificadoproject-smart
, será utilizado por predefinição. Para obter mais informações, veja output-schema details (Detalhes do esquema de saída).
Devoluções
Transformação de linhas na 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 incluirá sempre uma coluna source_ com o nome da tabela de origem. O nome da coluna pode ser mudado com o withsource
parâmetro .
colunas de resultados
As tabelas de origem que não contenham nenhuma coluna utilizada pela avaliação do predicado serão filtradas.
Quando utilizar project-smart
o , as colunas que serão apresentadas na saída serão:
- Colunas que aparecem explicitamente no predicado.
- Colunas comuns a todas as tabelas filtradas.
As restantes colunas serão colocadas num saco de propriedades e aparecerão numa coluna adicional pack
.
Uma coluna que é referenciada explicitamente pelo predicado e que aparece em múltiplas tabelas com vários tipos, terá uma coluna diferente no esquema de resultados para cada tipo desse tipo. Cada um dos nomes das colunas será construído a partir do nome e tipo da coluna original, separados por um caráter de sublinhado.
Ao utilizar 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, esta coluna no "resultado" terá o tipo especificado e os valores serão convertidos nesse tipo, se necessário. A conversão não terá um efeito no tipo de coluna ao avaliar o Predicado.
- Quando
pack_all()
é utilizado, todas as colunas, incluindo as colunas projetadas, são embaladas num saco de propriedades e aparecem numa coluna adicional, por predefinição "column1". No conjunto 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 predicado
O operador find suporta uma sintaxe alternativa para o termo e, utilizando apenas o * has
termo, irá procurar um termo em todas as colunas de entrada.
Para obter um resumo de algumas funções de filtragem, veja onde operador.
Notas
- Se a
project
cláusula referenciar uma coluna que aparece em várias tabelas e tem vários tipos, um tipo tem de seguir esta referência de coluna na cláusula project - Se uma coluna aparecer em múltiplas tabelas e tiver vários tipos e
project-smart
estiver a ser utilizada, existirá uma coluna correspondente para cada tipo nofind
resultado do , conforme descrito em união - Quando utiliza project-smart, as alterações no predicado, no conjunto de tabelas de origem ou no esquema de tabelas, podem resultar numa alteração ao esquema de saída. Se for necessário um esquema de resultados constante, utilize o projeto como alternativa
find
O âmbito não pode incluir funções. Para incluir uma função no âmbito localizar, defina uma instrução let com a palavra-chave view.
Sugestões de desempenho
- Utilize tabelas em vez de expressões tabulares.
Se for uma expressão tabular, o operador find reverterá para uma
union
consulta que pode resultar num desempenho degradado. - Se uma coluna que aparece em múltiplas tabelas e tem vários tipos, fizer parte da cláusula de projeto, prefira adicionar um ColumnType à cláusula de projeto em vez de modificar a tabela antes de a transmitir para
find
. - Adicione filtros baseados no tempo ao predicado. Utilize um valor de coluna datetime ou ingestion_time().
- Pesquise em colunas específicas em vez de uma pesquisa em texto completo.
- É melhor não referenciar colunas que aparecem em múltiplas tabelas e têm vários tipos. Se o predicado for válido ao resolver esse tipo de colunas para mais do que um tipo, a consulta reverterá para união. Por exemplo, veja exemplos de casos em que a localização funcionará como uma união.
Exemplos
Pesquisa de termos em todas as tabelas na base de dados atual
A consulta localiza todas as linhas de todas as tabelas na base de dados atual na qual qualquer coluna inclui a palavra Hernandez
. Os registos resultantes são transformados de acordo com o esquema de saída. O resultado inclui linhas da Customers
tabela e da SalesTable
tabela da ContosoSales
base de dados.
find "Hernandez"
Pesquisa de termos em todas as tabelas que correspondem a um padrão de nome na base de dados atual
A consulta localiza todas as linhas de todas as tabelas na base de dados atual cujo nome começa com C
e em que qualquer coluna inclui a palavra Hernandez
. Os registos resultantes são transformados de acordo com o esquema de saída. Agora, o resultado contém apenas registos da Customers
tabela.
find in (C*) where * has "Hernandez"
Pesquisa de termos em todas as tabelas em todas as bases de dados no cluster
A consulta localiza todas as linhas de todas as tabelas em todas as bases de dados em que qualquer coluna inclui a palavra Kusto
.
Esta consulta é uma consulta entre bases de dados .
Os registos 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 bases 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 todas as bases de dados cujo nome começa com B
e em que qualquer coluna inclui a palavra Kusto
.
Os registos 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 todas as bases de dados cujo nome começa com B
e em que qualquer coluna inclui a palavra Kusto
.
Os registos 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 registos resultantes são transformados de acordo com o esquema de saída.
find "Kusto"
Exemplos de resultados de find
saída
Os exemplos seguintes mostram como find
pode ser utilizado em duas tabelas: EventsTable1 e EventsTable2.
Suponha que temos o conteúdo seguinte destas duas tabelas:
EventsTable1
Session_Id | Level | 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 |
EventsTable2
Session_Id | Level | EventText | EventName |
---|---|---|---|
f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Informações | Outro Texto1 | Evento1 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informações | Outro Texto2 | Evento2 |
acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erro | Outro Texto3 | Evento3 |
15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Erro | Outro Texto4 | Evento4 |
Procurar em colunas comuns, projetar colunas comuns e invulgares e empacotar o resto
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Saída
source_ | EventText | Versão | EventName | pack_ |
---|---|---|---|---|
EventsTable1 | Algum Texto2 | v1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
EventsTable2 | Outro Texto3 | Evento3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
Procurar em colunas comuns e invulgares
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Saída
source_ | Session_Id | EventText | Versão | EventName |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Algum Texto1 | v1.0.0 | |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Algum Texto2 | v1.0.0 | |
EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Outro Texto1 | Evento1 |
Nota: 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.
Utilizar a notação abreviada para procurar em todas as tabelas na base de dados atual
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Saída
source_ | Session_Id | Level | EventText | pack_ |
---|---|---|---|---|
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informações | Algum Texto1 | {"Version":"v1.0.0"} |
EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erro | Algum Texto2 | {"Version":"v1.0.0"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Informações | Outro Texto2 | {"EventName":"Event2"} |
EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Erro | Outro Texto 3 | {"EventName":"Event3"} |
Devolver os resultados de cada linha como um saco de propriedades
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Saída
source_ | pack_ |
---|---|
EventsTable1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Text1", "Version":"v1.0.0"} |
EventsTable1 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Text2", "Version":"v1.0.0"} |
EventsTable2 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Information", "EventText":"Some Other Text2", "EventName":"Event2"} |
EventsTable2 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error", "EventText":"Some Other Text3", "EventName":"Event3"} |
Exemplos de casos em que find
irão funcionar como union
Utilizar uma expressão não tabular como operando localizar
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Referenciar uma coluna que aparece em várias tabelas e tem vários tipos
Suponha que criámos duas tabelas ao executar:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- A seguinte consulta 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 seguinte consulta 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)
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários