Compartir a través de


Consultas entre clústeres y entre bases de datos

Se aplica a: ✅Microsoft FabricAzure Data Explorer✅Azure MonitorMicrosoft Sentinel

Las consultas se ejecutan con una base de datos determinada designada como base de datos en contexto. Esta base de datos actúa como valor predeterminado para la comprobación de permisos. Si se hace referencia a una entidad en una consulta sin especificar el clúster o la base de datos, se resuelve en esta base de datos.

Las consultas se ejecutan con una base de datos determinada designada como base de datos en contexto. Esta base de datos actúa como valor predeterminado para la comprobación de permisos. Si se hace referencia a una entidad en una consulta sin especificar el contexto, se resuelve en esta base de datos.

En este artículo se explica cómo ejecutar consultas que implican entidades ubicadas fuera de la base de datos de contexto actual.

Requisitos previos

Identificación del clúster y la base de datos en contexto

Identificar el centro de eventos y la base de datos en contexto

En la tabla siguiente se explica cómo identificar la base de datos en contexto por entorno de consulta.

Entorno Base de datos en contexto
Kusto Explorer La base de datos predeterminada es la seleccionada en el panel de conexiones y el clúster actual es el clúster que contiene esa base de datos.
Interfaz de usuario web de Azure Data Explorer La base de datos predeterminada es la seleccionada en el panel de conexión y el clúster actual es el clúster que contiene esa base de datos.
Bibliotecas de cliente Especifique la base de datos y el clúster predeterminados por las Data Source propiedades y Initial Catalog de los cadena de conexión de Kusto.
Entorno Database/Eventhouse en contexto
Kusto Explorer La base de datos predeterminada es la seleccionada en el panel de conexiones y el centro de eventos actual es el centro de eventos que contiene esa base de datos.
Conjunto de consultas KQL de Inteligencia en tiempo real La base de datos predeterminada es la base de datos actual seleccionada directamente o a través de un centro de eventos.
Bibliotecas de cliente Especifique la base de datos predeterminada con el URI de base de datos, que se usa para las Data Source propiedades de kusto cadena de conexión s. Para el centro de eventos, use su URI de clúster. Para encontrarlo, seleccione Información general del sistema en la sección Detalles del centro de eventos para el centro de eventos seleccionado.

Realización de consultas entre clústeres o entre bases de datos

Realización de consultas entre centros de eventos o entre bases de datos

Para acceder a entidades fuera de la base de datos en contexto, use las funciones cluster() y database() para calificar el nombre de entidad.

Para una tabla de una base de datos diferente dentro del mismo clúster:

database("<DatabaseName>").<TableName>

Para una tabla de un clúster remoto:

cluster("<ClusterName>").database("<DatabaseName>").<TableName>

Para una tabla de una base de datos diferente dentro del mismo centro de eventos:

database("<DatabaseName>").<TableName>

Para una tabla de un centro de eventos remoto o un servicio remoto (como Azure Data Explorer):

cluster("<EventhouseClusterURI>").database("<DatabaseName>").<TableName>

Nota:

Para ejecutar una consulta, debe tener permiso de visor para la base de datos predeterminada y para todas las demás bases de datos a las que se hace referencia en la consulta. Para más información, consulte Control de acceso basado en roles de Kusto.

Sugerencia

El número de registros devueltos desde una consulta está limitado de forma predeterminada, incluso si no hay ningún uso específico del take operador. Para eliminar este límite, use la opción de solicitud de cliente notruncation . Para más información, consulte Límites de la consulta.

Nombres calificados y el operador de unión

Cuando un nombre completo aparece como operando del operador union, se pueden usar caracteres comodín para especificar varias tablas y varias bases de datos. Los caracteres comodín no se permiten en los nombres de clúster.

union withsource=TableName *, database("OtherDb*").*Table, cluster("OtherCluster").database("*").*

Cuando un nombre completo aparece como operando del operador union, se pueden usar caracteres comodín para especificar varias tablas y varias bases de datos. Los caracteres comodín no se permiten en los nombres de los centros de eventos.

union withsource=TableName *, database("OtherDb*").*Table, cluster("OtherEventhouseClusterURI").database("*").*

Nota:

El nombre de la base de datos predeterminada también es una coincidencia potencial, por lo que database("*") especifica todas las tablas de todas las bases de datos, incluido el valor predeterminado.

Nombres completos y restricción de instrucciones de acceso

Los nombres o patrones completos también se pueden incluir en la instrucción restrict access . No se permiten caracteres comodín en nombres de clúster.

No se permiten caracteres comodín en nombres de centros de eventos.

La consulta siguiente restringe el acceso de las consultas a las siguientes entidades:

  • Cualquier nombre de entidad que empiece por mi... en la base de datos predeterminada.
  • Cualquier tabla de todas las bases de datos denominada MyOther... del clúster actual.
  • Cualquier tabla de todas las bases de datos denominadas my2... en el clúster OtherCluster.kusto.windows.net.
restrict access to (my*, database("MyOther*").*, cluster("OtherCluster").database("my2*").*);
  • Cualquier nombre de entidad a partir de event... en la base de datos predeterminada.
  • Cualquier tabla de todas las bases de datos denominada EventOther... del centro de eventos actual.
  • Cualquier tabla de todas las bases de datos denominadas event2... en el centro de eventos OtherEventhouse.kusto.data.microsoft.com.
restrict access to (event*, database("EventOther*").*, cluster("OtherEventhouseClusterURI").database("event2*").*);

Control de los cambios de esquema de las entidades remotas

Para procesar una consulta entre clústeres, el clúster que realiza la interpretación inicial de la consulta debe tener el esquema de las entidades a las que se hace referencia en clústeres remotos. Para obtener esta información, se envía un comando para recuperar los esquemas, que luego se almacenan en una memoria caché.

Si hay un cambio de esquema en el clúster remoto, es posible que un esquema almacenado en caché quede obsoleto. Esto puede provocar efectos no deseados, incluidos los escenarios en los que las columnas nuevas o eliminadas provocan un Partial query failure. Para resolver estos problemas, actualice manualmente el esquema con el comando .clear cache remote-schema .

Para procesar una consulta de clúster entre centros de eventos o de un centro de eventos a ADX, el centro de eventos que realiza la interpretación inicial de la consulta debe tener el esquema de las entidades a las que se hace referencia en los centros de eventos o clústeres remotos. Para obtener esta información, se envía un comando para recuperar los esquemas, que luego se almacenan en una memoria caché.

Si hay un cambio de esquema remoto, es posible que un esquema almacenado en caché quede obsoleto. Esto puede provocar efectos no deseados, incluidos los escenarios en los que las columnas nuevas o eliminadas provocan un Partial query failure. Para resolver estos problemas, actualice manualmente el esquema con el comando .clear cache remote-schema .

Funciones y vistas

Las funciones y vistas (persistentes y creadas en línea) pueden hacer referencia a tablas entre los límites de la base de datos y del clúster. El código siguiente es válido.

let MyView = Table1 join database("OtherDb").Table2 on Key | join cluster("OtherCluster").database("SomeDb").Table3 on Key;
MyView | where ...

Se puede acceder a funciones y vistas persistentes desde otra base de datos del mismo clúster.

Por ejemplo, supongamos que crea la siguiente función tabular (vista) en una base de datos OtherDb:

.create function MyView(v:string) { Table1 | where Column1 has v ...  }  

A continuación, cree la siguiente función escalar en una base de datos OtherDb:

.create function MyCalc(a:double, b:double, c:double) { (a + b) / c }  

En la base de datos predeterminada, se puede hacer referencia a estas entidades de la siguiente manera:

database("OtherDb").MyView("exception") | extend CalCol=database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10

Las funciones y vistas (persistentes y creadas en línea) pueden hacer referencia a tablas entre los límites de la base de datos y del centro de eventos. El código siguiente es válido.

let EventView = Table1 join database("OtherDb").Table2 on Key | join cluster("OtherEventhouseClusterURI").database("SomeDb").Table3 on Key;
EventView | where ...

Se puede acceder a funciones y vistas persistentes desde otra base de datos del mismo centro de eventos.

Por ejemplo, supongamos que crea la siguiente función tabular (vista) en una base de datos OtherDb:

.create function EventView(v:string) { Table1 | where Column1 has v ...  }  

A continuación, cree la siguiente función escalar en una base de datos OtherDb:

.create function EventCalc(a:double, b:double, c:double) { (a + b) / c }  

Por ejemplo, supongamos que crea la siguiente función tabular (vista) en una base de datos OtherDb:

.create function EventView(v:string) { Table1 | where Column1 has v ...  }  

A continuación, cree la siguiente función escalar en una base de datos OtherDb:

.create function EventCalc(a:double, b:double, c:double) { (a + b) / c }  

En la base de datos predeterminada, se puede hacer referencia a estas entidades de la siguiente manera:

database("OtherDb").EventView("exception") | extend CalCol=database("OtherDb").EventCalc(Col1, Col2, Col3) | take 10

Limitaciones de las llamadas a funciones entre clústeres

Se puede hacer referencia a funciones tabulares o vistas entre clústeres. Se presentan las siguientes limitaciones:

  • Las funciones remotas deben devolver el esquema tabular. Solo se puede acceder a las funciones escalares en el mismo clúster.
  • Las funciones remotas solo pueden aceptar argumentos escalares. Solo se puede acceder a funciones que obtienen uno o varios argumentos de tabla en el mismo clúster.
  • El esquema de resultados de las funciones remotas debe corregirse (conocido de antemano sin ejecutar partes de la consulta). Por lo tanto, no se pueden usar construcciones de consulta como el pivot complemento. Algunos complementos, como el bag_unpack complemento, admiten una manera de indicar el esquema de resultados estáticamente y, en este formato , se pueden usar en llamadas de función entre clústeres.
  • Por motivos de rendimiento, el clúster que realiza la llamada almacena en caché el esquema de las entidades remotas después de la llamada inicial. Por lo tanto, los cambios realizados en la entidad remota podrían dar lugar a una discrepancia con la información de esquema almacenada en caché, lo que podría provocar errores de consulta. Para obtener más información, consulte Consultas entre clústeres y cambios de esquema.

Limitaciones de las llamadas a funciones entre centros de eventos

Se puede hacer referencia a funciones tabulares o vistas entre centros de eventos. Se presentan las siguientes limitaciones:

  • Las funciones remotas deben devolver el esquema tabular. Solo se puede acceder a las funciones escalares en el mismo centro de eventos.
  • Las funciones remotas solo pueden aceptar argumentos escalares. Solo se puede acceder a las funciones que obtienen uno o varios argumentos de tabla en el mismo centro de eventos.
  • El esquema de resultados de las funciones remotas debe corregirse (conocido de antemano sin ejecutar partes de la consulta). Por lo tanto, no se pueden usar construcciones de consulta como el pivot complemento. Algunos complementos, como el bag_unpack complemento, admiten una manera de indicar el esquema de resultados estáticamente y, en este formato, se pueden usar en llamadas a funciones entre centros de eventos.
  • Por motivos de rendimiento, el centro de eventos que realiza la llamada almacena en caché el esquema de entidades remotas después de la llamada inicial. Por lo tanto, los cambios realizados en la entidad remota podrían dar lugar a una discrepancia con la información de esquema almacenada en caché, lo que podría provocar errores de consulta. Para obtener más información, consulte Consultas entre clústeres y cambios de esquema.

Ejemplos

La siguiente llamada entre clústeres es válida.

cluster("OtherCluster").database("SomeDb").MyView("exception") | count

La consulta siguiente llama a una función MyCalcescalar remota . Esta llamada infringe la regla 1, por lo que no es válida.

MyTable | extend CalCol=cluster("OtherCluster").database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10

La consulta siguiente llama a la función MyCalc remota y proporciona un parámetro tabular. Esta llamada infringe la regla 2, por lo que no es válida.

cluster("OtherCluster").database("OtherDb").MyCalc(datatable(x:string, y:string)["x","y"] )

La siguiente llamada entre centros de eventos es válida.

cluster("OtherEventhouseURI").database("SomeDb").EventView("exception") | count

La consulta siguiente llama a una función EventCalcescalar remota . Esta llamada infringe la regla 1, por lo que no es válida.

Eventtable | extend CalCol=cluster("OtherEventhouseClusterURI").database("OtherDb").MyCalc(Col1, Col2, Col3) | take 10

La consulta siguiente llama a la función EventCalc remota y proporciona un parámetro tabular. Esta llamada infringe la regla 2, por lo que no es válida.

cluster("EventhouseClusterURI").database("OtherDb").MyCalc(datatable(x:string, y:string)["x","y"] )

La consulta siguiente llama a la función SomeTable remota que tiene una salida de esquema variable basada en el parámetro tablename. Esta llamada infringe la regla 3, por lo que no es válida.

Función tabular en OtherDb.

.create function SomeTable(tablename:string) { table(tablename)  }  

En la base de datos predeterminada.

cluster("OtherCluster").database("OtherDb").SomeTable("MyTable")
cluster("OtherEventhouseClusterURI").database("OtherDb").SomeTable("EventTable")

La consulta siguiente llama a la función GetDataPivot remota que tiene una salida de esquema variable basada en el complemento de datos (pivot() tiene salida dinámica). Esta llamada infringe la regla 3, por lo que no es válida.

Función tabular en OtherDb.

.create function GetDataPivot() { T | evaluate pivot(PivotColumn) }  

Función tabular en la base de datos predeterminada.

cluster("OtherCluster").database("OtherDb").GetDataPivot()
cluster("OtherEventhouseClusterURI").database("OtherDb").GetDataPivot()