Compartir a través de


Operador find

Busca filas que coinciden con un predicado en un conjunto de tablas.

El ámbito de también puede ser entre bases de find 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 funcionará 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)] where Predicate [project-smart | project ColumnName[: ColumnType , ... ] [, pack_all()]]

  • findPredicado [project-smart | project ColumnName[: ColumnType , ... ] [, pack_all()]]

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Type Obligatorio Descripción
ColumnName string De forma predeterminada, la salida incluirá una columna denominada source_ cuyos valores indican qué tabla de origen ha contribuido cada fila. Si se especifica, se usará 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 tendrá un nombre de tabla calificado con la base de datos. De forma similar , los títulos de clúster y base de datos estará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 buscará en todas las tablas de la base de datos actual. Puede usar:
1. Nombre de una tabla, como Events
2. 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 usará de forma predeterminada. Para obtener más información, consulte detalles del esquema de salida.
  • withsource=ColumnName: opcional. De forma predeterminada, la salida incluirá una columna denominada source_ cuyos valores indican qué tabla de origen contribuyó cada fila. Si se especifica, se usará ColumnName en lugar de source_.

  • Predicado: expresión boolean sobre las columnas de las tablas de entrada Table [, 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á todas las tablas para:

    • 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 por E.
  • project-smart | project: si no se especifica project-smart , se usará de forma predeterminada. Para obtener más información, consulte detalles del esquema de salida.

Devoluciones

Transformación de filas en Tabla [, 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 incluirá 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 del predicado se filtrarán.

Al usar project-smart, las columnas que aparecerán en la salida serán:

  • Columnas que aparecen explícitamente en el predicado.
  • Columnas comunes a todas las tablas filtradas.

El resto de las columnas se empaquetarán en un contenedor de propiedades y aparecerán en una columna adicional pack . Una columna a la que hace referencia explícitamente el predicado y aparece en varias tablas con varios tipos, tendrá una columna diferente en el esquema de resultados para cada tipo de este tipo. Cada uno de los nombres de columna se construirá a partir del nombre y el tipo de columna originales, separados por un carácter de subrayado.

Cuando se usa project ColumnName[ : ColumnType , ... ] [ pack_all(), ]:

  • La tabla de resultados incluirá las columnas especificadas en la lista. Si una tabla de origen no contiene una columna determinada, los valores de las filas correspondientes serán NULL.
  • Al especificar un ColumnType con columnName, esta columna del "resultado" tendrá el tipo especificado y los valores se convertirán en ese tipo si es necesario. La conversión no tendrá ningún efecto en el tipo de columna al evaluar el predicado.
  • Cuando pack_all() se usa, 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 * has término y, al usar simplemente término, buscará un término en todas las columnas de entrada.

Para obtener un resumen de algunas funciones de filtrado, consulte el operador where.

Notas

  • Si la project clá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-smart está en uso, habrá una columna correspondiente para cada tipo en el findresultado de , tal y como se describe en unión.
  • Cuando se usa project-smart, los cambios en el predicado, en el conjunto de tablas de origen o en el esquema de tablas, pueden dar lugar a un cambio en el esquema de salida. Si se necesita un esquema de resultados constantes, use el proyecto en su lugar.
  • find scope no puede incluir funciones. Para incluir una función en el ámbito de búsqueda, defina una instrucción let con la 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 union rendimiento 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 se revertirá a la unión. Por ejemplo, vea ejemplos de casos en los que la búsqueda actuará como una unión.

Ejemplos

Búsqueda de términos en todas las tablas de la base de datos actual

La consulta busca 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"

Búsqueda de términos en todas las tablas que coinciden con un patrón de nombre en la base de datos actual

La consulta busca 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"

Búsqueda de términos en todas las tablas de todas las bases de datos del clúster

La consulta busca todas las filas de todas las tablas de todas las bases de datos 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"

Búsqueda de términos en todas las tablas y bases de datos que coinciden con un patrón de nombre en el clúster

La consulta busca 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"

Búsqueda de términos en varios clústeres

La consulta busca 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"

Búsqueda de términos en todas las tablas

La consulta busca 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

En los ejemplos siguientes se muestra cómo find se puede usar en dos tablas: EventsTable1 y EventsTable2. Supongamos que tenemos el siguiente contenido de estas dos tablas:

EventsTable1

Session_Id Nivel EventText 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 EventText EventName
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

Buscar en columnas comunes, proyectar columnas comunes y poco frecuentes, y empaquetar el resto

find in (EventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e' and Level == 'Error' 
     project EventText, Version, EventName, pack_all()

Salida

fuente_ EventText Versión EventName 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"}

Búsqueda en columnas comunes y poco frecuentes

find Version == 'v1.0.0' or EventName == 'Event1' project Session_Id, EventText, Version, EventName

Salida

fuente_ Session_Id EventText Versión EventName
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 filtrarán con Version == 'v1.0.0' predicado y las filas EventsTable2 se filtrarán con EventName == 'Event1' predicado.

Uso de la notación abreviada para buscar en todas las tablas de la base de datos actual

find Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

Salida

fuente_ Session_Id Nivel EventText 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"}

Devolver los resultados de cada fila como contenedor de propiedades

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 actuarán como union

Uso de una expresión no tabular como operando find

let PartialEventsTable1 = view() { EventsTable1 | where Level == 'Error' };
find in (PartialEventsTable1, EventsTable2) 
     where Session_Id == 'acbd207d-51aa-4df7-bfa7-be70eb68f04e'

Hacer referencia a una columna que aparece en varias tablas y tiene varios tipos

Supongamos que hemos creado 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 ejecutará como union.
find in (Table1, Table2) where ProcessId == 1001

El esquema de resultados de salida será (Level:string, Timestamp, ProcessId_string, ProcessId_int).

  • La consulta siguiente también se ejecutará como union, pero generará un esquema de resultados diferente.
find in (Table1, Table2) where ProcessId == 1001 project Level, Timestamp, ProcessId:string 

El esquema de resultados de salida será (Level:string, Timestamp, ProcessId_string)