Consultas entre clústeres y entre bases de datos
Se aplica a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft 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
- Si los clústeres están en distintos inquilinos, siga las instrucciones de Permitir consultas y comandos entre inquilinos.
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 elbag_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 elbag_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 MyCalc
escalar 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 EventCalc
escalar 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()