Consultas elasticas en SQL Azure

No les pasa que tenemos todo listo en nuestro servidor Azure (servicio, servidor de base de datos, bases de datos, Certificado SSL, Dominio, etc…); ¡Todo perfecto para que nuestra aplicación ya salga a tope con todos los hierros y de repente surge una escalabilidad o una implementación adicional y tenemos que crear una base de datos o tomar los datos de otra base de datos para respetar la integridad de los datos y tomalaaaa!… donde queremos hacer algo asi?:

Use BaseDeDatos1

SELECT  *  FROM [BaseDeDatos2].dbo.Tabla1

“Msg 40515, Level 15, State 1, Line 16
Reference to database and/or server name in ‘BaseDeDatos2.dbo.Tabla1’ is not supported in this version of SQL Server.”

No sufras más y sigue este pequeño tutorial para poder realizar consultas entre bases de datos en distintos servidores de Azure o en el mismo servidor per se.

cross-search-tools

Consultas elásticas

La función de consulta elástica le permite ejecutar una consulta de Transact-SQL que abarca varias bases de datos en la base de datos SQL de Azure. Le permite realizar consultas entre bases de datos para acceder a tablas remotas y conectar herramientas de Microsoft y de terceros (Excel, PowerBI, Tableau, etc.) para consultar en niveles de datos con múltiples bases de datos. Con esta función, puede escalar consultas a grandes niveles de datos en la base de datos SQL y visualizar los resultados en informes de inteligencia empresarial (BI).

¿Por qué usar consultas elásticas?

Base de datos SQL Azure

Consulta en todas las bases de datos SQL de Azure en T-SQL. Esto permite la consulta de solo lectura de las bases de datos remotas. Esto proporciona una opción para que los clientes actuales de SQL Server local migren aplicaciones con nombres de tres y cuatro partes o un servidor vinculado a SQL DB.

Disponible en nivel estándar

La consulta elástica es compatible con el nivel de rendimiento estándar además del nivel de rendimiento Premium.

Enviar a bases de datos remotas

Las consultas elásticas ahora pueden enviar parámetros SQL a las bases de datos remotas para su ejecución.

Ejecución de procedimiento almacenado

Ejecute llamadas a procedimientos almacenados remotos o funciones remotas utilizando sp_execute _remote.

Flexibilidad

Las tablas externas con consulta elástica ahora pueden hacer referencia a tablas remotas con un esquema o nombre de tabla diferente.

Escenarios elásticos de consulta

El objetivo es facilitar la consulta de escenarios donde múltiples bases de datos aportan filas en un solo resultado global. La consulta puede ser compuesta por el usuario o la aplicación directamente, o indirectamente a través de herramientas que están conectadas a la base de datos. Esto es especialmente útil cuando se crean informes, se usan herramientas comerciales de BI o de integración de datos, o cualquier aplicación que no se puede cambiar. Con una consulta elástica, puede realizar consultas en varias bases de datos utilizando la experiencia de conectividad conocida de SQL Server en herramientas como Excel, PowerBI, Tableau o Cognos. Una consulta elástica permite un acceso fácil a una colección completa de bases de datos a través de consultas emitidas por SQL Server Management Studio o Visual Studio, y facilita la consulta entre bases de datos desde Entity Framework u otros entornos ORM. La Figura 1 muestra un escenario en el que una aplicación en la nube existente (que utiliza la biblioteca del cliente de base de datos elástica) se basa en un nivel de datos escalado, y una consulta elástica para informes entre bases de datos.

Ya leida la teoria vamos a la practica.

1 – Crear las bases de datos de muestra.

Para empezar, necesitamos crear dos bases de datos, Customers y Orders (Clientes y Ordenes ESP), ya sea en el mismo o en diferentes servidores lógicos.

Ejecute las siguientes consultas en la base de datos Orders para crear la tabla OrderInformation e ingresar los datos de muestra.


CREATE TABLE [dbo].[OrderInformation](
[OrderID] [int] NOT NULL,
[CustomerID] [int] NOT NULL
)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (123, 1)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (149, 2)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (857, 2)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (321, 1)
INSERT INTO [dbo].[OrderInformation] ([OrderID], [CustomerID]) VALUES (564, 8)

Ahora, ejecute la consulta siguiente en la base de datos de Customers para crear la tabla CustomerInformation e ingrese los datos de muestra.


CREATE TABLE [dbo].[CustomerInformation](
[CustomerID] [int] NOT NULL,
[CustomerName] [varchar](50) NULL,
[Company] [varchar](50) NULL
CONSTRAINT [CustID] PRIMARY KEY CLUSTERED ([CustomerID] ASC)
)
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (1, 'Jack', 'ABC')
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (2, 'Steve', 'XYZ')
INSERT INTO [dbo].[CustomerInformation] ([CustomerID], [CustomerName], [Company]) VALUES (3, 'Lylla', 'MNO')

2 – Crear objetos de base de datos.

Base de datos de clave maestra y credenciales

  1. Abra SQL Server Management Studio o SQL Server Data Tools en Visual Studio.
  2. Conéctese a la base de datos Pedidos y ejecute los siguientes comandos T-SQL:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
    CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
    WITH IDENTITY = 'username',
    SECRET = 'password';

    El “username” y el “password” deben ser el nombre de usuario y la contraseña utilizados para iniciar sesión en la base de datos de Customers. La autenticación con Azure Active Directory con consultas elásticas no es actualmente compatible.

Fuentes de datos externas

Para crear una fuente de datos externa, ejecute el siguiente comando en la base de datos Orders


CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc WITH
(TYPE = RDBMS,
LOCATION = 'server_name.database.windows.net',
DATABASE_NAME = 'Customers',
CREDENTIAL = ElasticDBQueryCred,
) ;

Tablas externas

Cree una tabla externa en la base de datos Orders, que coincida con la definición de la tabla CustomerInformation:


CREATE EXTERNAL TABLE [dbo].[CustomerInformation]
( [CustomerID] [int] NOT NULL,
[CustomerName] [varchar](50) NOT NULL,
[Company] [varchar](50) NOT NULL)
WITH
( DATA_SOURCE = MyElasticDBQueryDataSrc)

3 – Ejecute una consulta de muestra T-SQL de base de datos elástica.

Una vez que haya definido su fuente de datos externa y sus tablas externas, ahora puede usar T-SQL para consultar sus tablas externas. Ejecute esta consulta en la base de datos de pedidos:


SELECT OrderInformation.CustomerID, OrderInformation.OrderId, CustomerInformation.CustomerName, CustomerInformation.Company
FROM OrderInformation
INNER JOIN CustomerInformation
ON CustomerInformation.CustomerID = OrderInformation.CustomerID

4 – Costo

Actualmente, la función de consulta de base de datos elástica está incluida en el costo de su base de datos SQL de Azure.

 


De esta manera no tienes excusa para poder enlazar una o más bases de datos en una consulta de TSQL y lo mejor que desde Azure.

Espero les sea de utilidad la información y que la puedan implementar en sus trabajos o en algún caso poco común que les pueda ocurrir.

Nos vemos en un próximo articulo 🙂