Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Busca filas que coinciden con un predicado en un conjunto de tablas.
El ámbito del operador find también puede ser entre bases de datos o entre clústeres.
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 operator es considerablemente menos eficaz que el filtrado de texto específico de columna. Siempre que se conozcan las columnas, se recomienda usar el operador where.
find no funciona bien cuando el área de trabajo contiene un gran número de tablas y columnas y el volumen de datos que se está examinando es alto y el intervalo de tiempo de la consulta es alto.
Sintaxis
find[withsource= ColumnName] [in(Tables)]wherePredicate [project-smart|projectColumnName[:ColumnType,... ] [,pack_all()]]findPredicado [project-smart|projectColumnName[:ColumnType,... ] [,pack_all()]]
Obtenga más información sobre las convenciones de sintaxis.
Parámetros
| Nombre | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| columnName | string |
De forma predeterminada, la salida incluye una columna denominada source_ cuyos valores indican qué tabla de origen ha contribuido a cada fila. Si se especifica, se usa columnName en lugar de source_. Después de la coincidencia de caracteres comodín, si la consulta hace referencia a tablas de más de una base de datos, incluida la base de datos predeterminada, el valor de esta columna tiene un nombre de tabla calificado con la base de datos. Del mismo modo, de clúster y calificaciones de base de datos están presentes en el valor si se hace referencia a más de un clúster. | |
| Predicado | bool |
✔️ | Esta expresión booleana se evalúa para cada fila de cada tabla de entrada. Para obtener más información, consulte detalles de la sintaxis de predicado. |
| Tablas | string |
Cero o más referencias de tabla separadas por comas. De forma predeterminada, find busca en todas las tablas de la base de datos actual. Puede usar:1. Nombre de una tabla, como Events2. Expresión de consulta, como (Events | where id==42)3. Un conjunto de tablas especificadas con un carácter comodín. Por ejemplo, E* formaría la unión de todas las tablas de la base de datos cuyos nombres comienzan por E. |
|
project-smart o project |
string |
Si no se especifica, project-smart se usa de forma predeterminada. Para obtener más información, consulte detalles del esquema de salida. |
withsource=ColumnName: opcional. De forma predeterminada, la salida incluye una columna denominada source_ cuyos valores indican qué tabla de origen contribuyó cada fila. Si se especifica, se usa columnName en lugar de source_.Predicado: expresión
booleansobre las columnas de las tablas de entrada Table [,, ...]. Se evalúa para cada fila de cada tabla de entrada. Para obtener más información, consulte detalles de la sintaxis de predicado.Tablas: opcional. Cero o más referencias de tabla separadas por comas. De forma predeterminada, buscar busca en todas las tablas:
- Nombre de una tabla, como
Events; - Una expresión de consulta, como
(Events | where id==42) - Un conjunto de tablas especificado con un carácter comodín. Por ejemplo,
E*formaría la unión de todas las tablas cuyos nombres comienzan porE.
- Nombre de una tabla, como
project-smart|project: si no se especificaproject-smartse usa de forma predeterminada. Para obtener más información, consulte detalles del esquema de salida.
Devoluciones
Transformación de filas en Tabla [,, ...] para la que predicado es true. Las filas se transforman según el esquema de salida.
Esquema de salida
columna source_
La salida del operador find siempre incluye una columna source_ con el nombre de la tabla de origen. Se puede cambiar el nombre de la columna mediante el withsource parámetro .
columnas de resultados
Las tablas de origen que no contienen ninguna columna usada por la evaluación de predicado se filtran.
Cuando se usa project-smart, las columnas que aparecen en la salida son:
- Columnas que aparecen explícitamente en el predicado.
- Columnas comunes a todas las tablas filtradas.
El resto de las columnas se empaquetan en un contenedor de propiedades y aparecen en una columna de pack adicional.
Una columna a la que hace referencia explícitamente el predicado y aparece en varias tablas con varios tipos, tiene una columna diferente en el esquema de resultados para cada tipo de este tipo. Cada uno de los nombres de columna se construye a partir del nombre y el tipo de columna original, separados por un carácter de subrayado.
Cuando se usa project ColumnName
- La tabla de resultados incluye las columnas especificadas en la lista. Si una tabla de origen no contiene una determinada columna, los valores de las filas correspondientes son NULL.
- Cuando se especifica un ColumnType con un ColumnName, esta columna del "resultado" tiene el tipo especificado y los valores se convierten a ese tipo si es necesario. La conversión no tiene ningún efecto en el tipo de columna al evaluar el predicado de .
- Cuando se usa
pack_all(), todas las columnas, incluidas las columnas proyectadas, se empaquetan en un contenedor de propiedades y aparecen en una columna adicional, de forma predeterminada "column1". En el contenedor de propiedades, el nombre de la columna de origen actúa como nombre de propiedad y el valor de la columna actúa como valor de propiedad.
Sintaxis de predicado
El operador find admite una sintaxis alternativa para el término de * has, y usando solo término, busca un término en todas las columnas de entrada.
Para obtener un resumen de algunas funciones de filtrado, consulte el operador where.
Consideraciones
- Si la
projectcláusula hace referencia a una columna que aparece en varias tablas y tiene varios tipos, un tipo debe seguir esta referencia de columna en la cláusula project. - Si una columna aparece en varias tablas y tiene varios tipos y
project-smartestá en uso, hay una columna correspondiente para cada tipo en el resultado delfind, como se describe en unión - Cuando se usa inteligente del proyecto , los cambios en el predicado, en el conjunto de tablas de origen o en el esquema de tablas, podrían dar lugar a un cambio en el esquema de salida. Si se necesita un esquema de resultados constantes, use el proyecto en su lugar.
-
findscope no puede incluir funciones. Para incluir una función en el ámbito defind, defina una instrucción let de con palabra clave view.
Consejos de rendimiento
- Use tablas en lugar de expresiones tabulares.
Si la expresión tabular, el operador find vuelve a una consulta que puede dar lugar a un
unionrendimiento degradado. - Si una columna que aparece en varias tablas y tiene varios tipos, forma parte de la cláusula project, prefiere agregar columnType a la cláusula project sobre la modificación de la tabla antes de pasarla a
find. - Agregue filtros basados en tiempo al predicado. Use un valor de columna datetime o ingestion_time()..
- Busque en columnas específicas en lugar de en una búsqueda de texto completo.
- Es mejor no hacer referencia a columnas que aparecen en varias tablas y que tienen varios tipos. Si el predicado es válido al resolver este tipo de columnas para más de un tipo, la consulta vuelve a unión.
Por ejemplo, vea ejemplos de casos en los que
findactúa como una unión.
Ejemplos
Ejemplos generales
En el ejemplo siguiente se buscan todas las filas de todas las tablas de la base de datos actual en la que cualquier columna incluye la palabra Hernandez. Los registros resultantes se transforman según el esquema de salida. La salida incluye filas de la Customers tabla y la SalesTable tabla de la ContosoSales base de datos.
find "Hernandez"
Salida
En esta tabla se muestran las tres primeras filas de la salida.
| fuente_ | empaquetar_ |
|---|---|
| Clientela | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":5023,"Education":"Partial High School","FirstName":"Devin",""Gender":"M","LastName":"Hernandez","CivilStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
| Clientela | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7814,"Education":"Partial College","FirstName":"Kristy","Kristy","Gender":"F","LastName":"Hernandez","CivilStatus":"S","Occupation":"Professional","RegionCountryName":"United States","StateProvinceName":"Washington"} |
| Clientela | {"CityName":"Ballard","CompanyName":"NULL","ContinentName":"North America","CustomerKey":7888,"Education":"Partial High School","FirstName":"Kari",""Kari",""Gender":"F","LastName":"Hernandez","CivilStatus":"S","Occupation":"Clerical","RegionCountryName":"United States","StateProvinceName":"Washington"} |
| ... | ... |
En el ejemplo siguiente se buscan todas las filas de todas las tablas de la base de datos actual cuyo nombre comienza por Cy en la que cualquier columna incluye la palabra Hernandez. Los registros resultantes se transforman según el esquema de salida. Ahora, la salida solo contiene registros de la Customers tabla.
find in (C*) where * has "Hernandez"
Salida
En esta tabla se muestran las tres primeras filas de la salida.
| fuente_ | empaquetar_ |
|---|---|
| ConferenceSessions | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Temas avanzados del lenguaje de consulta kusto","session_type":"Mesa redonda","owner":"Avner Aharoni","participantes":"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.000000Z","duration":60,"time_and_duration":"Miércoles, 26 de mayo\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
| ConferenceSessions | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Profundización en el lenguaje de consulta de Azure Kusto. ","session_type":"Theater","owner":"Jean Francois Berenguer","participants":"","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":"Mesa redonda: Temas avanzados del lenguaje de consulta kusto","session_type":"Mesa redonda","owner":"Avner Aharoni","participantes":"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.000000Z","duration":60,"time_and_duration":"Miércoles, 26 de mayo\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
| ... | ... |
En el ejemplo siguiente se buscan todas las filas de todas las tablas de todas las bases de datos del clúster en las que cualquier columna incluye la palabra Kusto.
Esta consulta es una consulta entre bases de datos .
Los registros resultantes se transforman según el esquema de salida.
find in (database('*').*) where * has "Kusto"
Salida
En esta tabla se muestran las tres primeras filas de la salida.
| fuente_ | empaquetar_ |
|---|---|
| database("Samples"). ConferenceSessions | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Temas avanzados del lenguaje de consulta kusto","session_type":"Mesa redonda","owner":"Avner Aharoni","participantes":"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.000000Z","duration":60,"time_and_duration":"Miércoles, 26 de mayo\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
| database("Samples"). ConferenceSessions | {"conference":"Ignite 2018","sessionid":"THR3115","session_title":"Azure Log Analytics: Profundización en el lenguaje de consulta de Azure Kusto. ","session_type":"Theater","owner":"Jean Francois Berenguer","participants":"","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":"Mesa redonda: Temas avanzados del lenguaje de consulta kusto","session_type":"Mesa redonda","owner":"Avner Aharoni","participantes":"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.000000Z","duration":60,"time_and_duration":"Miércoles, 26 de mayo\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
| ... | ... |
En el ejemplo siguiente se buscan todas las filas de todas las tablas cuyo nombre comienza por K en todas las bases de datos cuyo nombre comienza por B y en el que cualquier columna incluye la palabra Kusto.
Los registros resultantes se transforman según el esquema de salida.
find in (database("S*").C*) where * has "Kusto"
Salida
En esta tabla se muestran las tres primeras filas de la salida.
| fuente_ | empaquetar_ |
|---|---|
| ConferenceSessions | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Temas avanzados del lenguaje de consulta kusto","session_type":"Mesa redonda","owner":"Avner Aharoni","participantes":"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.000000Z","duration":60,"time_and_duration":"Miércoles, 26 de mayo\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
| ConferenceSessions | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Temas avanzados del lenguaje de consulta kusto","session_type":"Mesa redonda","owner":"Avner Aharoni","participantes":"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.000000Z","duration":60,"time_and_duration":"Miércoles, 26 de mayo\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
| ConferenceSessions | {"conference":"Build 2021","sessionid":"CON-PRT103","session_title":"Mesa redonda: Temas avanzados del lenguaje de consulta kusto","session_type":"Mesa redonda","owner":"Avner Aharoni","participantes":"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.000000Z","duration":60,"time_and_duration":"Miércoles, 26 de mayo\n8:30 - 9:30 AM GMT","kusto_affinity":"Focused"} |
| ... | ... |
En el ejemplo siguiente se buscan todas las filas de todas las tablas cuyo nombre comienza por K en todas las bases de datos cuyo nombre comienza por B y en el que cualquier columna incluye la palabra Kusto.
Los registros resultantes se transforman según el esquema de salida.
find in (cluster("cluster1").database("B*").K*, cluster("cluster2").database("C*".*))
where * has "Kusto"
En el ejemplo siguiente se buscan todas las filas de todas las tablas en las que cualquier columna incluye la palabra Kusto.
Los registros resultantes se transforman según el esquema de salida.
find "Kusto"
Ejemplos de resultados de find salida
Supongamos que tenemos el siguiente contenido de estas dos tablas:
EventsTable1
| Session_Id | Nivel | Texto del Evento | Versión |
|---|---|---|---|
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Información | Algunos text1 | v1.0.0 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Algunos texto2 | v1.0.0 |
| 28b8e46e-3c31-43cf-83cb-48921c3986fc | Error | Algunos text3 | v1.0.1 |
| 8f057b11-3281-45c3-a856-05ebb18a3c59 | Información | Algunos text4 | v1.1.0 |
EventsTable2
| Session_Id | Nivel | Texto del Evento | Nombre del evento |
|---|---|---|---|
| f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Información | Algún otro texto1 | Event1 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Información | Algún otro texto2 | Event2 |
| acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Otro texto3 | Event3 |
| 15eaeab5-8576-4b58-8fc6-478f75d8fee4 | Error | Algún otro texto4 | Evento4 |
En el ejemplo siguiente se buscan registros específicos en EventsTable1 y EventsTable2 en función de un Session_Id determinado y un nivel de error . A continuación, proyecta tres columnas específicas: EventText, Versiony EventNamey empaqueta todas las demás columnas restantes en un objeto dinámico.
find in (EventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error'
project EventText, Version, EventName, pack_all()
Salida
| fuente_ | Texto del Evento | Versión | Nombre del evento | empaquetar_ |
|---|---|---|---|---|
| EventsTable1 | Algunos texto2 | v1.0.0 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} | |
| EventsTable2 | Otro texto3 | Event3 | {"Session_Id":"acbd207d-51aa-4df7-bfa7-be70eb68f04e", "Level":"Error"} |
En el ejemplo siguiente se buscan registros que tengan version como "v1.0.0" o EventName como "Event1" y, a continuación, proyecta (selecciona) cuatro columnas específicas: Session_Id, EventText, Version y EventName de esos resultados filtrados.
find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName
Salida
| fuente_ | Session_Id | Texto del Evento | Versión | Nombre del evento |
|---|---|---|---|---|
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Algunos text1 | v1.0.0 | |
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Algunos texto2 | v1.0.0 | |
| EventsTable2 | f7d5f95f-f580-4ea6-830b-5776c8d64fdd | Algún otro texto1 | Event1 |
Nota:
En la práctica, las filas EventsTable1 se filtran con Version == 'v1.0.0' predicado y EventsTable2 filas se filtran con predicado EventName == 'Event1'.
En el ejemplo siguiente se busca en la base de datos los registros con un Session_Id que coincida con "acbd207d-51aa-4df7-bfa7-be70eb68f04e". Recupera registros de todas las tablas y columnas que contienen este Session_Idespecífico.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
Salida
| fuente_ | Session_Id | Nivel | Texto del Evento | empaquetar_ |
|---|---|---|---|---|
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Información | Algunos text1 | {"Version":"v1.0.0"} |
| EventsTable1 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Algunos texto2 | {"Version":"v1.0.0"} |
| EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Información | Algún otro texto2 | {"EventName":"Event2"} |
| EventsTable2 | acbd207d-51aa-4df7-bfa7-be70eb68f04e | Error | Otro texto3 | {"EventName":"Event3"} |
En el ejemplo siguiente se busca en la base de datos registros con el Session_Id especificado y se devuelven todas las columnas de esos registros como un único objeto dinámico.
find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' project pack_all()
Salida
| fuente_ | empaquetar_ |
|---|---|
| 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"} |
Ejemplos de casos en los que find actúa como unión
El operador find de Kusto a veces puede actuar como un operador de union, principalmente cuando se usa para buscar en varias tablas.
En el ejemplo siguiente se crea primero una vista que filtra EventsTable1 para incluir solo registros de nivel de error. A continuación, busca en esta vista filtrada y en la tabla EventsTable2 los registros con un Session_Idespecífico.
let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2)
where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'
En los ejemplos siguientes se muestra cómo el find operador puede actuar como cuando union una columna aparece en varias tablas con diferentes tipos. En este caso, la ProcessId columna está presente en Table1 y Table2, pero con tipos diferentes.
Para este ejemplo, cree dos tablas mediante la ejecución de:
.create tables
Table1 (Level:string, Timestamp:datetime, ProcessId:string),
Table2 (Level:string, Timestamp:datetime, ProcessId:int64)
- La consulta siguiente se ejecuta como
union.
find in (Table1, Table2) where ProcessId == 1001
El esquema de resultados de salida es (Level:string, Timestamp, ProcessId_string, ProcessId_int).
- La consulta siguiente se ejecuta como
union, pero genera un esquema de resultados diferente.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string
El esquema de resultados de salida es (Level:string, Timestamp, ProcessId_string)