Copilot en Azure SQL Database ¿El fin de los DBA?
Bienvenidos/as a un nuevo post en el blog de Aleson ITC. Si estás aquí es por que sabes que la IA se ha convertido en un actor fundamental en el futuro de todas las compañias, y si la tuya utiliza SQL Server también va a poder disfrutar de todas las ventajas que aporta. Hoy hablaremos de Microsoft Copilot en Azure SQL Database.
¿Qué es Microsoft Copilot para Azure SQL Database?
Microsoft Copilot para Azure SQL Database es una herramienta que integra capacidades de IA con Azure SQL Database para mejorar la administración y funcionamiento de aplicaciones que utilicen SQL.
Está orientado a administradores de bases de datos (DBA) y desarrolladores, ayudándoles en gestión de bases de datos, resolución de problemas y a escribir consultas SQL más eficientes.
Que incluye la versión preliminar
Hay que tener en cuenta, que a fecha de redacción de este post, Copilot para Azure SQL DB se encuentra en versión preview, por lo que el conjunto de funcionalidades disponibles es pequeño frente a las previstas en un futuro. Actualmente incluye dos experiencias principales:
- Integración de Microsoft Copilot en Azure: Agrega asistencia y capacidades de administración de bases de datos y resolución de problemas.
- Lenguaje natural a query SQL: Traducción de consultas de lenguaje natural a SQL en el editor de consultas de Azure Portal.
Vamos a profundizar un poco en cada una de estas experiencias, para ello he creado una Azure SQL Database con los datos de ejemplo de AdventureWorksLT.
Integración de Microsoft Copilot en Azure
El acceso a Copilot en Azure se realiza desde el portal, en el botón disponible en la barra superior.
Es recomendable que antes de abrir Copilot, te hayas dirigido al recurso de tu Azure SQL Database donde quieras probarlo, de lo contrario, y si dispones de varias, lo primero que hará cuando le escribas un prompt, es preguntarte sobre que Azure SQL DB quieres actuar.
La integración está preparada para dar respuesta sobre múltiples áreas dentro de SQL Server, tales como configuración, conexiones, querys lentas, índices, query store, estadísticas, rendimiento, backups… En este enlace puedes encontrar muchos prompts de ejemplo. Algunos de ellos son:
- Ayúdame a encontrar índices fragmentados.
- ¿Por qué funciona lenta mi base de datos?
- Comprueba las principales sesiones bloqueadas.
- ¿Cuándo se creó la copia de seguridad más reciente?
Por ejemplo, voy a preguntarle sobre problemas de fragmentación en índices:
Vemos que al momento nos da información sobre los índices que habría que desfragmentar. Ahora vamos a pedirle el script para solucionarlo.
Se puede ver como da la información perfectamente para solucionar el problema.
Lenguaje natural a query SQL
Ahora que ya hemos visto como funciona la integración con Azure Copilot, vamos a probar la traducción de lenguaje natural a TSQL que está diponible en el editor de consultas del portal de Azure.
Lo primero es dirigirnos a nuestra Azure SQL Database y después al apartado Query Editor.
Una vez hayamos hecho login y hagamos click en New Query, veremos el botón con texto Launch inline copilot
Al pulsar, nos aparecen nuevas opciones sobre las que vamos a ampliar un poco la información:
- El cuadro de texto donde introduciremos en lenguaje natural la consulta que necesitamos. A fecha de redacción de este post únicamente se permite texto en Inglés
- Un mensaje advirtiendo que el código puede contener errores y que actualmente solo permite la creación de SELECT.
- Si quieres que Copilot únicamente busque en algunas tablas, aquí puedes indicarlo.
- Nos muestra que es una funcionalidad en Public Preview.
Ahora vamos a probar que tal funciona la traducción. Esta es la lista de tablas y vistas:
El primer prompt de prueba es:
Spanish: Dime el nombre y apellido de todos los clientes cuya compañia contenga la palabra Bike, ordenalos en orden alfabético English: Tell me the name and surname of all the customers whose company contains the word Bike, in alphabetical order
La respuesta muestra el Prompt, una explicación y la consulta generada.
Analizando la consulta, parece correcta, apunta a la tabla Customers, el filtro del where es correcto, el select también y el order by también.
SELECT FirstName, LastName FROM [SalesLT].[Customer] WHERE CompanyName LIKE '%Bike%' ORDER BY LastName, FirstName;
Y si procedemos a ejecutarla, el dato que devuelve es el correcto, ordenado por LastName.
Vamos a complicarlo un poco añadiendo información nueva al segundo prompt:
Spanish: Dime el nombre, los apellidos, el nombre de empresa, el número de pedidos que han realizado y el importe total del pedido de todos los clientes cuya empresa contenga la palabra Bike, por orden alfabético. English: Tell me the name, surname, company name, the number of orders they have placed, and the total amount of the order of all the customers whose company contains the word Bike, in alphabetical order.
La query generada cumple perfectamente con todo lo solicitado:
SELECT c.FirstName AS [Name], c.LastName AS [Surname], c.CompanyName, COUNT(soh.SalesOrderID) AS [Number of Orders], SUM(sod.LineTotal) AS [Total Amount of Orders] FROM SalesLT.Customer AS c JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID JOIN SalesLT.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID WHERE c.CompanyName LIKE '%Bike%' GROUP BY c.FirstName, c.LastName, c.CompanyName ORDER BY c.LastName, c.FirstName ASC;
Por último, vamos a complicar este tercer prompt un poco más.
Spanish: Dime el nombre, los apellidos, el nombre de empresa, el número de pedidos que han realizado y el importe total del pedido de todos los clientes cuya empresa contenga la palabra Bike, por orden alfabético. Añada también el número de caracteres que tiene el nombre de la empresa y si ese número es par o impar. English: Tell me the name, surname, company name, the number of orders they have placed, and the total amount of the order of all the customers whose company contains the word Bike, in alphabetical order. Also, add the number of characters the company name has, and whether that number is odd or even.
Nuevamente la consulta que nos devuelve es correcta:
SELECT c.FirstName AS [Name], c.LastName AS [Surname], c.CompanyName, COUNT(soh.SalesOrderID) AS [Number of Orders], SUM(sod.LineTotal) AS [Total Order Amount], LEN(c.CompanyName) AS [Company Name Length], CASE WHEN LEN(c.CompanyName) % 2 = 0 THEN 'Even' ELSE 'Odd' END AS [Odd/Even] FROM SalesLT.Customer AS c INNER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID INNER JOIN SalesLT.SalesOrderDetail AS sod ON soh.SalesOrderID = sod.SalesOrderID WHERE c.CompanyName LIKE '%Bike%' GROUP BY c.FirstName, c.LastName, c.CompanyName ORDER BY c.CompanyName ASC;
Se puede decir que Copilot ha pasado la prueba con bastante buena nota, el truco está en ser claro con el prompt y tratar de dar todo el detalle necesario.
Información de interés
Para finalizar, os dejo aquí algunos datos que he ido recopilando y que creo que serán de ayuda.
- Copilot en Azure SQL Database no utilizará los datos de tus bases de datos para entrenar a modelos de Open AI.
- De momento Copilot solo está disponible para Azure SQL Database, se espera que proximamente llegue al resto del portfolio de SQL Server, empezando por Managed Instance y continuando con las versiones On Premise.
- Mientras esté en Preview, Copilot será gratuito. No hay información del precio futuro que tendrá.
Mi opinión
Copilot para SQL se va a convertir en una herramienta indispensable en el día a día, y con esta evolución que estamos teniendo, en pocos meses/años la profesión de programador y de DBA va a sufrir un gran cambio reduciendo mucho el tiempo necesario para realizar las tareas.
Me despido, espero que te haya gustado mucho el post, te invito a seguirme en LinkedIn para estar al tanto de todas las novedades en el área de Data y Analytics.
¿Tienes problemas con tu base de datos? ¿Te planteas adoptar Copilot en tu empresa? Somos expertos en Data y podemos ayudarte.
Consultor Senior SQL Server & BI con 9 años de experiencia, MCSE Data Platform con conocimientos de toda la herramienta y enfocado principalmente a la detección y mejora de problemas de rendimiento en Base de Datos. En mi tiempo libre soy un gran aficionado a la fotografía de estilo urbano y de lugares abandonados.