Cloud

¿Está SQL Server realmente muerto como dicen algunos?

Cada pocos años alguien anuncia la muerte de SQL Server con la misma convicción con la que se predice el fin del mundo. Y, como suele pasar, seguimos aquí, con instancias vivas, bases de datos respirando y DBAs quejándose de los mismos problemas de siempre… y de unos nuevos. El auge de las bases de datos analíticas, la popularidad de entornos cloud como Snowflake o Microsoft Fabric, el ruido de las soluciones NoSQL y la omnipresencia de alternativas relacionales como MySQL o PostgreSQL han creado un escenario donde cualquiera podría pensar que el reinado de SQL Server se tambalea. Sin embargo, las novedades anunciadas para SQL Server 2025 apuntan a todo lo contrario: el producto sigue mutando para seguir siendo relevante, incluso si eso implica acercarse peligrosamente al mundo de la ciencia de datos. Y todo esto sin soltar la bandera que le hizo grande: el motor transaccional.

El entorno actual: cada uno en su liga

No es ningún secreto que las bases de datos analíticas están en su momento. Snowflake, BigQuery o Azure Synapse se han convertido en la herramienta preferida para quienes necesitan triturar terabytes de datos con más rapidez que un analista quemando su último café. Microsoft, por su parte, ha apostado fuerte con Fabric, un entorno que quiere ser la navaja suiza del dato: integración, ingeniería, análisis, IA… y todo en la nube, sin que te preocupes por el hardware (o eso dicen, hasta que llega la factura).

En paralelo, el ecosistema NoSQL sigue vivo, aunque su hype inicial ya no llena auditorios. MongoDB, Cassandra y compañía encontraron su nicho: estructuras flexibles, escalabilidad horizontal y consultas rápidas para ciertos patrones de uso. Pero conviene recordar que no es la primera vez que la industria promete que “lo nuevo” es la panacea. Antes fue XML en bases de datos, luego el OLAP embebido en todo, más tarde los lagos de datos que acabarían con los almacenes tradicionales… y ahí siguen las bases relacionales, 50 años después, ejecutando transacciones sin descanso. “Sin esquema” no significa “sin problemas”, y muchos que lo ignoraron pagaron el precio en migraciones forzadas y dolores de cabeza técnicos.

Mientras tanto, las bases de datos relacionales de código abierto siguen creciendo. PostgreSQL ha dejado de ser el “hermano alternativo” para convertirse en la opción principal de muchos nuevos proyectos. MySQL, que sobrevive gracias a su inercia y al ecosistema que lo rodea, sigue presente en millones de aplicaciones. Y hasta SQLite, ese motor minimalista, tiene más implantación de la que muchos sospechan, realmente es la base de datos relacional más utilizada, gracias en parte a que está embebido en aplicaciones móviles, navegadores y dispositivos IoT.

SQL Server en 2025: más que un SGBD relacional

Si echamos un vistazo a las novedades anunciadas para SQL Server 2025, el mensaje es claro: Microsoft no quiere que SQL Server se perciba solo como “la base de datos transaccional de siempre” y a la vez sí. La integración nativa con capacidades de ciencia de datos, el soporte extendido para Python y R, y la mejora de conectores con entornos como Fabric o Azure Machine Learning junto con las optimizaciones y mejoras del motor transaccional lo colocan como una plataforma híbrida, capaz de manejar tanto cargas OLTP como escenarios analíticos complejos.

Esto no es nuevo. Llevamos años viendo cómo SQL Server incluye características que antes parecían fuera de lugar: PolyBase para consultar datos externos, Graph Database para modelar relaciones no relacionales, o el soporte para formatos como Parquet y ORC a través de EXTERNAL TABLE. Pero en 2025 la apuesta es más decidida: acercar al científico de datos a la misma herramienta donde ya vive el dato empresarial. Porque mover datos sigue siendo caro y lento, aunque lo disfracemos de “pipelines”.

El motor OLTP: la base que no se toca

Entre tanta novedad es fácil olvidar lo obvio: SQL Server sigue siendo, ante todo, un motor OLTP sólido, fiable y maduro. Es el tipo de sistema que lleva años procesando millones de transacciones diarias sin que nadie lo ponga en duda. No será el más rápido del mundo en benchmarks aislados, pero tampoco se estrella en ninguna disciplina. Es ese jugador de equipo que no siempre marca goles espectaculares, pero nunca falla un pase. En entornos de misión crítica, eso vale más que el hype de la semana.

Aplicaciones financieras, sistemas de reservas, ERPs, CRMs… todos siguen necesitando un motor transaccional robusto, y SQL Server continúa cumpliendo sin dramas. Es cierto que el mercado está más fragmentado, pero en el terreno de las operaciones diarias, la consistencia y la integridad de datos no pasan de moda. Y ahí, el producto sigue ofreciendo un equilibrio que otros todavía no alcanzan.

Azure SQL: el motor en modo nube

En paralelo, Microsoft ha sabido llevar el ADN de SQL Server a la nube con Azure SQL Database y Azure SQL Managed Instance. Ambos ofrecen el mismo motor relacional, pero con las ventajas del cloud: elasticidad, alta disponibilidad automática y actualizaciones gestionadas. Azure SQL Database brilla para cargas modernas, escalables y distribuidas, mientras que Managed Instance resulta un salvavidas para migraciones lift-and-shift desde entornos on-premises, evitando reescribir medio catálogo de procedimientos almacenados.

Pero no todo es perfecto. La nube te da elasticidad, sí, pero también facturas que crecen más rápido que una tabla de log que no mantienes. Y ciertas configuraciones avanzadas siguen teniendo limitaciones frente al on-premises clásico. Aun así, en la pelea contra RDS for SQL Server, Cloud SQL o Aurora, Azure SQL compite muy decentemente, sobre todo cuando se integra con el resto del ecosistema Microsoft.

Competencia y convivencia: ahora con Oracle en la foto

Intencionadamente no había hablado de Oracle en este artículo aun. Esto es porque merecía su apartado dedicado. Ignorar a Oracle sería como hablar de fútbol sin mencionar a Messi o Cristiano. Oracle sigue siendo el otro gran titán del mundo relacional empresarial. Su estrategia ha ido en dos direcciones claras: reforzar su motor transaccional con mejoras de rendimiento y disponibilidad (la famosa RAC sigue siendo un argumento fuerte) y empujar con fuerza su base de datos autónoma en la nube, que promete optimización automática, parches sin downtime y escalabilidad elástica. En papel suena a ciencia ficción; en la realidad, sigue siendo un producto potente, aunque con el mismo talón de Aquiles que siempre: licenciamiento complejo y costes elevados.

Oracle mantiene una cuota sólida en sectores donde el riesgo no se negocia, como banca o telecomunicaciones, pero su imagen de “producto premium” lo aleja de entornos más ágiles o con presupuestos ajustados. En ese hueco es donde SQL Server ha sabido jugar sus cartas: más versátil en despliegues, más sencillo de administrar y con una curva de entrada menos intimidante.

La mayoría de grandes organizaciones que usan Oracle no prescinden de SQL Server; al contrario, los combinan. Oracle se queda con lo que justifica su precio (OLTP ultra crítico, escenarios de HA extrema) y SQL Server cubre aplicaciones empresariales, integraciones y cargas mixtas donde la flexibilidad pesa más que la pureza del rendimiento.

Oracle en entornos analíticos

En el frente analítico, Oracle ha optado por un enfoque doble. Por un lado, ha ido incorporando capacidades analíticas directamente en su motor transaccional, con funciones in-database, modelos estadísticos y procesamiento in-memory columnar para ejecutar cargas masivas sin mover los datos. Por otro, ha desarrollado Oracle Autonomous Data Warehouse, su servicio cloud gestionado para analítica, con escalabilidad automática y optimización asistida, pensado para competir con Snowflake o BigQuery. La diferencia es que Oracle sigue apostando por la especialización y la potencia de su propio ecosistema, mientras que Microsoft, con Fabric, ha preferido unificar integración, ingeniería y consumo en un solo marco. Solo el tiempo nos dirá quien ha optado por la solución correcta.

¿Un viraje o una extensión natural?

Visto lo que hay, los puristas dirán que SQL Server se está “contaminando” con funciones que no le corresponden. Los pragmáticos vemos otra cosa: un intento lógico de mantenerse en un mercado donde ya no basta con ser bueno en lo tuyo, sino que hay que ser útil en lo que otros necesitan. Si el científico de datos puede trabajar sobre el mismo entorno donde el ERP graba transacciones, se ahorran latencias, ETLs y errores humanos. Y si encima puedes exponer los resultados a Power BI o Fabric sin montar un festival de integraciones, más puntos a favor.

Esto no significa que SQL Server vaya a sustituir a Snowflake o a un motor columnar puro en un data warehouse masivo. Significa que cada vez será más común ver entornos mixtos, donde el dato crudo se procese en un sistema especializado y SQL Server actúe como nodo central para servir datos curados, combinados y gobernados.

El veredicto: no, no está muerto

Si algo nos enseña la historia de la tecnología es que las modas pasan y las bases sólidas permanecen. El hype del NoSQL, los lagos de datos milagrosos o las bases “autónomas” con inteligencia artificial han tenido su momento, y en muchos casos han acabado como piezas útiles pero de uso específico. Las bases de datos relacionales llevan medio siglo alimentando aplicaciones críticas y, lejos de extinguirse, siguen adaptándose.

SQL Server no se está apagando, se está transformando. Lo que vemos en 2025 es un motor más abierto, más conectado y con capacidades que hace diez años habrían hecho reír a cualquier DBA clásico. Pero, sobre todo, sigue siendo un motor transaccional de referencia, capaz de mover operaciones críticas día tras día sin pestañear. No será el mejor en todo, pero tampoco es malo en nada, y esa consistencia es la que mantiene viva su posición.

Y además tiene su versión en la nube bien armada, con Azure SQL plantando cara a las alternativas cloud sin complejos. El futuro del producto no es blanco o negro; es híbrido. Y, por ahora, SQL Server sigue siendo muy bueno en eso.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

¿Cómo convertirse en DBA este 2025?

Desde que tengo más visibilidad en redes sociales y empiezo a aparecer en eventos, hay una pregunta que se repite una y otra vez: ¿Cómo se convierte uno en DBA si todas las ofertas, incluso las de junior, piden años de experiencia?

Y es que, convertirse en DBA en 2025 es un poco como intentar entrar en una sala VIP donde no hay puerta ni cartel. Todo el mundo te dice que necesitas experiencia, pero nadie te da la oportunidad de adquirirla. Las ofertas que se etiquetan como junior piden tres años de experiencia, conocimientos avanzados de T-SQL, algo de PowerShell, HA/DR, y si puedes ser experto en Azure, mejor. Y todo eso por, digamos, 24K y una guardia cada dos semanas.

No es que el mercado esté cerrado. Es que el rol del DBA, tal y como se entiende hoy, no es un puesto de entrada. Es una evolución.

No hay un camino único para ser DBA, pero sí dos rutas habituales

Los que acabamos siendo DBAs casi nunca lo decidimos desde el principio. No es como querer ser desarrollador backend o administrador de sistemas. Normalmente nadie sueña con revisar alertas de TempDB a las 3 de la mañana o analizar por qué una MERGE se ha cargado 4 millones de filas de más (y de paso, media reputación del equipo). Pero un día estás ahí, y te das cuenta de que sabes más que nadie del rendimiento de la base de datos, del modelo de datos y de por qué la aplicación se cae todos los lunes a las 9:03.

En mi experiencia, los perfiles que acaban siendo buenos DBAs vienen sobre todo de dos mundos: desarrollo o administración de sistemas. Cada ruta tiene sus fortalezas, sus trampas y su forma particular de enseñarte a base de golpes.

Llegar a DBA desde el desarrollo

Los que vienen del desarrollo conocen bien el lenguaje T-SQL, entienden cómo piensan los desarrolladores y tienen facilidad para leer y optimizar consultas. Es habitual que en equipos sin DBA, el dev más curioso empiece a encargarse de las bases de datos “porque se le da bien”. Lo típico: arregla un SELECT, luego otro, y cuando se quiere dar cuenta, está explicando a los demás cómo hacer un JOIN decente o por qué ese UPDATE va camino del desastre. Sin saberlo, ya está ejerciendo de DBA. Solo falta que lo asuma.

Llegar a DBA desde la infraestructura

Desde administración de sistemas, el camino es distinto. Aquí se llega por la capa de infraestructura: gestionar instancias, montar clústeres, configurar copias de seguridad, monitorizar el espacio en disco y automatizar tareas repetitivas. Lo bueno de este enfoque es que la persona ya tiene mentalidad de disponibilidad, control, mantenimiento y alertas. Lo malo: si no se mete de lleno con el código, acaba siendo un DBA a medias. Y con el tiempo, esos se quedan fuera de juego.

La clave, en ambos casos, es la misma: asumir responsabilidades de DBA antes de que te lo reconozcan oficialmente. Nadie te va a dar el título. Te lo tienes que ganar.

Cursos, formación y el eterno dilema de si certificarse o no

Vamos con un tema sensible: ¿sirven para algo los cursos y las certificaciones? Pues depende. Como casi todo.

Empecemos por los cursos. En SQL Server no existen cursos oficiales de formación como tal. Microsoft tiene la certificación (de eso hablaremos luego), pero no ofrece un itinerario formativo estructurado y mantenido. Hay empresas que imparten cursos propios, algunos buenos, otros reciclados de 2012 con pantallazos de Management Studio en modo arqueológico.

Eso sí, en otras tecnologías la cosa cambia. Oracle, PostgreSQL, MongoDB… ahí sí hay formación oficial, bien montada, con laboratorios y materiales decentes. Pero claro, si quieres ser DBA de SQL Server, eso no te sirve de mucho (aunque nunca está de más abrir el radar).

Ahora, las certificaciones

¿Vale la pena sacar la DP-300 de Microsoft? Vamos por partes.

Seamos sinceros, yo por ejemplo no la tengo. En mi opinión personal (OPINIÓN EXCLUSIVAMENTE MIA), si tienes experiencia, la certificación no te va a enseñar nada que no sepas ya. Pero te da una credencial, y a veces, eso abre puertas que no abre tu CV. Es útil si quieres justificar conocimiento frente a RRHH, a una consultora o a un cliente que no sabe distinguir un WAIT STATS de un WAITRESS (chiste malo para los que saben inglés). Para mi, no mide lo que sabes, pero sí que sabes “lo suficiente como para certificarte”.

Ahora bien, si no tienes experiencia real, aunque la DP-300 no te va a convertir en DBA por arte de magia si puede servirte para marcar el terreno. Demuestra interés, compromiso y, al menos, cierto conocimiento básico. Si estás empezando y puedes permitirte el esfuerzo, mejor tenerla que no tener nada. Pero no esperes que te contraten como DBA solo por tenerla. No funciona así.

El laboratorio personal: mejor que mil cursos, o complemento a ellos

Una de las formas más efectivas de adquirir experiencia como DBA es montarte tu propio laboratorio. Aquí puedes poner en práctica todo lo que aprendes en cursos o por tu cuenta. No hay tutores, no hay guías de solución, cuando algo no arranca, el culpable eres tú. Justo como en producción, vaya.

Tampoco te asustes, no hace falta hipotecarse y comprar un super servidor para jugar con SQL Server. Con Docker, Azure o incluso un mini PC de segunda mano puedes hacer pruebas más que decentes. Lo importante no es montarse un Always On para enseñarselo a tu madre. Es aprender, romper cosas, configurarlas mal, arreglarlas, medir, volver a romper… y así hasta que entiendas por qué las cosas funcionan (o no).

Y sí, tengo en marcha una serie completa en YouTube donde explico cómo montar un SQL Server Home Lab, con Proxmox, Windows Server, Active Directory, SQL Server 2022 y conexiones remotas. Pero ojo, no es porque piense que todo el mundo tenga que hacerlo. Es porque si decides dar ese paso, quiero que lo hagas con criterio. Y sobre todo, sabiendo lo que estás montando y para qué. Puedes ver la serie completa aquí.

¿Y si no hay ofertas de DBA junior? Pues se crea experiencia sin que te la den hecha

Vamos al meollo. ¿Cómo consigues experiencia si no hay ofertas junior? Pues haciendo de DBA sin permiso, literalmente.

Me explico antes de que nadie me salte al cuello. Si estás en un equipo de desarrollo, asume todo lo que puedas relacionado con la base de datos. Revisa el código SQL, pregunta por los planes de ejecución, mide los tiempos, analiza los índices. Que cada vez que haya un problema en SQL Server, alguien diga que la solución pasa por preguntarte a ti. Hazlo bien una, dos, tres veces. Y cuando lo hayas hecho suficientes veces, empieza a firmar como DBA en tu perfil de LinkedIn. Lo eres, aunque tu contrato diga otra cosa.

Si vienes de sistemas, empieza a documentar los entornos, automatiza backups y monitorización, identifica ineficiencias, saca métricas y mejora procesos. Aprende a leer logs de errores como si fueran novelas de misterio. Y luego mete la cabeza en el rendimiento. Aunque dé vértigo.

Nada de esto va en el CV con letras doradas, pero todo se nota cuando hablas con propiedad en una entrevista.

¿Y qué pasa si te piden experiencia de DBA y tú no la tienes?

Pasa constantemente. Las ofertas junior no existen o son un eufemismo. Pero si te presentas con actitud, con conocimiento técnico razonable, con un entorno montado por ti y capacidad para hablar con claridad de lo que has hecho (aunque sea sin contrato), tienes más opciones de las que parece.

Muchos de nosotros no tuvimos un puesto de “DBA Junior”. Tuvimos un puesto donde nadie se ocupaba de las bases de datos, y nos tocó hacerlo a base de errores. Y desde ahí crecimos.

La diferencia entre los que entran y los que no suele ser una: no esperar a que alguien les diga que ya pueden intentarlo.

Conclusión: nadie te da el título de DBA. Te lo ganas

Ser DBA no es un primer empleo. Es una evolución. Pero puedes empezar ese camino desde desarrollo, desde sistemas o incluso desde BI. Lo importante es asumir esas tareas, resolver problemas reales, meter las manos en el motor y no esperar a que venga alguien a explicarte cómo se hace.

Y sí, la DP-300 ayuda. Pero no sustituye la experiencia. Los cursos también. Si sabes elegirlos.

Y sobre todo: si nadie te da experiencia… róbala. Haz de DBA antes de serlo. Porque en este mundillo, la validación llega después del trabajo. Nunca antes.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

¿Trabajar 15 horas (o menos) a la semana como DBA? Depende del tipo de DBA que seas

Hace poco, Brent Ozar publicó un artículo comentando una conversación en Reddit que planteaba una pregunta tan ingenua como recurrente: ¿de verdad hay DBAs cobrando un pastizal por trabajar 15 horas a la semana mientras el resto del tiempo ven vídeos o están “de guardia”?

Spoiler: sí, pero no es lo habitual, ni llega de la nada, ni cualquiera puede aspirar a eso. El artículo analiza muy bien los matices detrás de ese escenario, y ya que yo llevo más de una década trabajando con SQL Server, quiero aportar mi perspectiva sobre cómo se vive esto aquí. Porque el contexto importa, y mucho.

DBA de Infraestructura vs DBA de optimización

En el mercado español, y esto lo digo por experiencia directa, los perfiles DBA suelen dividirse claramente entre los que se encargan de la infraestructura y los que nos centramos en la optimización. Los primeros están más cerca del mundo sysadmin: alta disponibilidad, backups, parches, clústeres, automatización de tareas rutinarias. Los segundos vivimos más pegados al código: tuning de queries, revisión de planes de ejecución, diseño de índices y control del rendimiento.

Ahora bien, los que realmente marcamos la diferencia somos los que hemos aprendido a movernos en ambos mundos. Ese es el perfil que he desarrollado con los años y al que creo que todos deberíamos aspirar. No tiene sentido saber montar un AG perfecto si luego no detectas un SELECT * a pelo en una tabla de 300 millones de filas. Y viceversa.

El entorno lo define todo: DBA interno vs. DBA externalizado

Otra diferencia clave, y que marca el tipo de trabajo que hacemos, es si estamos dentro de un cliente final o trabajamos en una consultora o equipo de soporte multicliente.

Yo he pasado por ambos mundos, y la diferencia es abismal. Cuando estás en cliente final, con un parque de servidores limitado (pongamos menos de 20), tienes margen para hacer las cosas bien. Puedes auditar el entorno, meter procesos de automatización, eliminar errores históricos y acabar interviniendo en decisiones de diseño. Incluso te conviertes en un filtro obligado antes de subir cambios a producción.

Después de ese primer año o dos de “puesta a punto”, el trabajo se estabiliza. Las incidencias bajan, los entornos están controlados y puedes dedicar tiempo a tareas de más valor. A veces, incluso, te conviertes en esa figura que aparece poco… pero cuando aparece, es por algo serio.

En cambio, cuando estás en un cliente grande o en una consultora gestionando cientos o miles de servidores, el enfoque cambia. Hay que actuar por patrones, automatizar a escala y asumir que no vas a conocer cada entorno al detalle. Te pasas más tiempo apagando fuegos que optimizando consultas. Lo urgente gana a lo importante, y profundizar se convierte en un lujo.

¿Y los desarrolladores que ejercen de DBA?

Aquí conviene puntualizar. Existen desarrolladores SQL que asumen funciones de DBA y lo hacen bien. He trabajado con varios y sé que hay perfiles muy sólidos que entienden el motor, cuidan el rendimiento, diseñan esquemas con criterio y se preocupan por el coste real de sus consultas.

Este artículo también va por ellos. Porque son, en esencia, parte del mismo ecosistema. Saben lo que hacen, aunque su tarjeta no ponga “DBA”.

Ahora bien, también todos hemos visto el otro extremo, equipos donde nadie tiene perfil de base de datos y se asume que “el que más sabe de SQL” llevará los servidores. En esos casos, se sobrevive como se puede. Backups por defecto (con suerte), configuraciones sin revisar y scripts de producción lanzados con los dedos cruzados.

No es raro ver scripts de mantenimiento programados en el Post-it Engine, versión papel pegado al monitor. Y la documentación vive, cómo no, en la bandeja de entrada de alguien que ya no está en la empresa.

No es raro, pero no es lo que nos interesa hoy. Aquí estamos hablando de roles expertos. De gente que sabe lo que es un latch y por qué TEMPDB puede ser un cuello de botella aunque no tenga muchos datos.

¿Trabajar 15 horas o menos a la semana como DBA? Sí, pero no como te imaginas

Lo que cuenta Brent sobre ese DBA que trabaja 15 horas a la semana o menos y el resto del tiempo está en “modo guardia” es perfectamente posible. Pero no es un privilegio aleatorio, ni una herencia. Es el resultado de años de trabajo bien hecho.

Yo he estado en esa posición. He tenido entornos donde, después de automatizar, revisar, auditar y consolidar, apenas había incidencias. Y cuando las había, las resolvía rápido. No porque tuviera suerte, sino porque conocía el entorno al detalle.

En esos escenarios, no estás “siempre productivo”. De hecho, a veces ni siquiera un 10% del tiempo. Pero cuando hay un problema, tu intervención marca la diferencia. No puedes dudar, no puedes consultar la documentación. Tienes que actuar con precisión y rapidez. Porque si tardas 30 minutos más de la cuenta, el sistema de ventas se cae, el almacén se para o la factura al cliente se multiplica por dos.

No estás al 100%. Ni falta que hace. Estás como los extintores: colgado en la pared, sin moverse, hasta que alguien grita y hay que actuar. Solo que tú sabes más de índices que de espuma.

Este tipo de puesto no es para cualquiera. Y desde luego, no es un trabajo cómodo. Es un rol de alta responsabilidad y alta exigencia, aunque no lo parezca desde fuera.

¿El rol del DBA está en peligro?

Llevamos años oyendo que el DBA está muerto. Que si la nube automatiza todo, que si los desarrolladores se bastan solos, que si la IA lo va a arreglar todo con cuatro sugerencias inteligentes.

La realidad es que el rol está cambiando, no desapareciendo. Los DBAs de infraestructura han tenido que evolucionar hacia entornos híbridos, servicios PaaS, IaC, automatización. Pero los problemas siguen existiendo, solo que tienen otro nombre.

Y los DBAs de optimización somos ahora más importantes que nunca. Especialmente en entornos cloud, donde cada milisegundo extra tiene un precio literal. Cuando un SELECT mal optimizado empieza a generar 30 euros por hora de DTUs, todo el mundo mira al DBA. No al desarrollador, no al arquitecto, no al jefe de proyecto. A nosotros.

DBA cada segundo cuenta

Las herramientas (de IA o no) que prometen optimizarlo todo aún están lejos de ser útiles, al menos sin intervención. Usamos Copilot, sí. Pero lo que da miedo no es lo que sugiere, sino que alguien lo acepte sin parpadear.

Copilot a veces acierta… como un reloj parado. Dos veces al día, da una respuesta aceptable. El problema es todo lo que sugiere entre medias.

Saber distinguir el buen consejo del disparate es, y seguirá siendo, trabajo nuestro.

Conclusión: menos horas, más impacto

Trabajar 15 horas a la semana o menos no significa trabajar poco. Significa haber llegado a un punto donde aportamos valor real justo cuando hace falta.

No estamos todo el día productivos. Pero cuando algo revienta, actuamos con decisión. Y eso solo se consigue con años de experiencia, conocimiento técnico profundo y sangre fría. Porque cada minuto cuenta cuando la producción está caída.

El puesto de DBA no está en peligro. Lo que está en peligro es seguir pensando que esto va de hacer backups y mirar gráficas. El futuro es de los que afinan, automatizan y cuando hay que actuar… no preguntan, resuelven. Y sí, puede parecer que no hacemos mucho. Pero cuando hacemos, salvamos el día, la semana y la cuenta de resultados de la empresa. Y eso vale más que cualquier KPI de los Project Manager.

Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de LinkedIn y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

SQL contra el Apocalipsis Mutante (Parte 5): Última defensa

Pensábamos que lo peor ya había pasado. Que después de clasificar refugios, contar infectados y trazar mapas de avistamientos podríamos respirar. Ilusos.

La tercera y última parte nos obligó a sacar toda la artillería. Ya no bastaba con consultar datos. Había que analizar patrones, construir rutas de evacuación dinámicas y generar informes multidimensionales. Y sí, todo eso con SQL.

Aquí tienes las soluciones explicadas de los últimos cinco retos. Si estás leyendo esto, es que todavía no te han comido.

Reto 3.1 – Ranking por armamento: quién manda aquí

La cosa está cada vez peor, necesitamos urgentemente asignar un número a cada refugio según la cantidad de armas que tiene. Así de simple. O así de esencial, si estás organizando una defensa coordinada y necesitas saber a quién se le puede confiar una ametralladora sin que se dispare en el pie.

Empezamos suavecito, hay que calentar. ROW_NUMBER() es una función de ventana que genera un contador dentro del conjunto de datos, según el orden que tú le digas. Aquí lo ordenamos por Weapons DESC, es decir, del más armado al menos. Cada refugio recibe un número único, sin importar si hay empates.

Esto no devuelve “quién tiene más armas”, sino quién va primero, segundo, tercero…. Una forma de tomar decisiones rápidas sin tener que pensar demasiado. Como debe ser en medio de un asalto mutante.

Reto 3.2 – Comparar infectados entre refugios vecinos

Se nos pide una labor fundamental para analizar la situación, ver si los números de infectados suben o bajan en los refugios contiguos. No para hacer turismo sanitario, sino para prever si un brote se está expandiendo.

Y ahora si, funciones de ventana de verdad, LAG(Infected, 1) devuelve el número de infectados del refugio anterior mientras que LEAD(Infected, 1) devuelve el número de infectados del siguiente. Ambos requieren un orden: en este caso, ORDER BY RefugeID.

Esta es una forma elegante de comparar filas sin tener que auto-unir la tabla consigo misma. Ideal para ver tendencias, anomalías… o refugios que están a punto de convertirse en un problema.

Reto 3.3 – Avistamientos y totales con ROLLUP

Otro imprescindible, crear un informe con los avistamientos de mutantes por día y ubicación, pero incluyendo totales parciales. ¿Por qué? Porque en el apocalipsis, igual que en el día a día en la oficina, alguien en la cadena de mando pidió “una vista agregada para facilitar la toma de decisiones” y no supimos decir que no.

En este caso ROLLUP nos permite agrupar en varios niveles:

  • Día + coordenadas → número de avistamientos
  • Día (sin coordenadas) → total de ese día
  • Total global

Esto genera filas con valores NULL en las columnas que se van agregando. Si no sabes leer esas NULL, no estás leyendo totales. Estás leyendo confusión. Lo bueno: es más limpio que hacer varias consultas. Lo malo: requiere que el que lo lea sepa lo que está viendo. No apto para jefes con prisas.

Reto 3.4 – Rutas de evacuación dinámicas con CTE recursiva

Entre los datos de infectados y los avistamientos nos empezamos a preocupar, ¿y si salir corriendo es la mejor opción? Por si acaso vamos a construir todas las rutas de evacuación posibles a partir del refugio 1, siguiendo las conexiones que tenemos en la tabla EvacuationRoutes.

Esto es una CTE recursiva de manual. Traducido: una tabla temporal que se llama a sí misma para recorrer un camino paso a paso. En la parte “ancla” seleccionamos las rutas que salen del refugio 1 mientras que en la parte recursiva vamos empalmando los destinos como si siguiéramos el hilo de Ariadna, construyendo la ruta completa en texto (Path).

CAST y CONVERT se usan aquí para concatenar el camino en una cadena legible: 1 -> 2 -> 3 -> 4 -> 5.

¿Tiene límites? Claro. Sin control de ciclos puede acabar en bucle infinito, como los correos entre departamentos. Pero para rutas simples, esto es perfecto.

Reto 3.5 – Informes multidimensionales con CUBE

Por si acaso antes de irnos vamos a sacar un último informe de situación. Nos han pedido sacar un informe de cuántos refugios hay por estado (CRITICAL u OK) y por nivel de armamento, incluyendo subtotales y totales. Porque si, a alguien le ha parecido bien hacer una tabla dinámica sin usar Excel.

Esto tiene miga, lo sé. Vamos por partes. Primero agrupamos por dos variables derivadas con CASE estado (CRITICAL o OK) y rango de armas (0–20, 21–50, >50). Después, con CUBE generamos todas las combinaciones posibles:

  • Cada grupo individual
  • Totales por estado
  • Totales por grupo de armas
  • Total general (cuando ambas columnas son NULL)

Si ROLLUP ya era potente, CUBE es una navaja suiza para informes complejos. Útil, pero peligroso si no sabes leer lo que devuelve.

Conclusión

Estas consultas no se escriben con prisas. Se escriben con estrategia. En esta última fase, SQL dejó de ser una herramienta de lectura para convertirse en un lenguaje de decisión.

Desde rutas de evacuación recursivas hasta informes multidimensionales, estas técnicas separan a los que saben ejecutar un SELECT de los que pueden liderar una operación de supervivencia basada en datos.

¿Es el final? Por ahora. La amenaza mutante ha sido contenida. Pero si algo hemos aprendido de los datos… es que siempre vuelven.Y esta vez, estaremos listos.

Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

SQL contra el Apocalipsis Mutante (Parte 4) La resistencia responde.

Cuando empezó el apocalipsis, todo era caos: refugios al límite, suministros escasos, datos sin contexto. Pero gracias a nuestras habilidades a base de SELECT, de JOIN, de WHERE y de horas frente al terminal, la resistencia se organizó.

En esta entrega, volvemos sobre los 10 retos iniciales (parte 1 y parte 2) para mostrar cómo lo resolvimos. No simplemente hablamos de respuestas frías, estamos hablando de pasos clave en la defensa de la humanidad. Porque cada consulta lanzada a la base de datos fue una decisión crítica, y cada decisión… salvó vidas.

Parte 1: Primeros pasos bajo presión

Empezaba la primera parte, sin mucha complicación, sin imaginarnos lo que después se iba a complicar. En estos primeros retos pudimos salir del paso con consultas sencillas que vamos a ver a continuación.

Reto 1.1 – Detectar refugios al borde del colapso

Tras semanas sin recibir suministros, varios refugios estaban al borde del colapso. Necesitábamos listar los refugios con menos de 10 raciones de comida o menos de 50 litros de agua. Teníamos que conocer el RefugeID, FoodRations y WaterLiters, ordenados de menor a mayor por FoodRations. 

Para resolver este reto necesitabamos ejecutar la consulta:

En este caso seleccionamos solo las columnas que necesitábamos, seleccionar más iría contra el rendimiento. Además, el WHERE nos filtra por las condiciones críticas que necesitamos y el ORDER BY pone en primer lugar a los que se están quedando sin comida. Porque el hambre puede causar más bajas que los mutantes. Los filtros se combinan con un OR porque con cumplir cualquiera de las dos condiciones el refugio está en riesgo de colapso.

Reto 1.2 – Localizar los mejor armados

Los refugios que hemos detectado antes necesitan ayuda y solo los mejor armados podrán proporcionarles. En este momento tenemos que localizar los 5 refugios con más armamento disponible.

En esta consulta, el TOP 5 combinado con el ORDER BY nos da los resultados deseados. Ordenamos descendente para tener primero los refugios con más armas y nos quedamos con los 5 primeros resultados.

Reto 1.3 – Delimitar la zona caliente

Nos informan de movimiento de mutantes entre las latitudes 39 y 41 y longitudes -75 y -73. Tenemos que localizar qué refugios están en esa zona.

Seleccionamos solo las columnas necesarias y usamos BETWEEN para filtrar por latitud y longitud. Al contrario que en el primer escenario, usamos un AND para combinar los filtros porque para estar en la zona de los mutantes los registros tienen que cumplir ambas condiciones (estar en la misma latitud y longitud).

Reto 1.4 – Cruzar población y recursos

Tener recursos está bien. Tener gente también. Pero si no cruzas esos datos, vuelas a ciegas. Esta unión entre tablas nos permitió ver la capacidad real de cada refugio: cuántas personas había y con qué contaban para resistir.

En este caso usamos INNER JOIN para unir las tablas RefugeSupplies y SurvivorStats usando el campo RefugeID que es común entre ellas en el ON. Sin esta consulta, no puedes tomar decisiones que impliquen vidas humanas.

Reto 1.5 – Refugios en riesgo inmediato

La cosa se ponía fea, teníamos que detectar que refugios tenían demasiada gente y pocas armas. Pero claro, esos datos para filtrar estaban en tablas distintas. Primero debíamos unirlas y después filtrar por los refugios que cumpliesen con las dos condiciones.

En este caso no hay nada nuevo, simplemente combinamos el INNER JOIN del reto anterior con filtros del WHERE que combinan las dos condiciones, muchas bocas, pocas balas. Si no se actuaba rápido, no quedaría nadie a quien alimentar.

Parte 2: Cuando los informes salvan vidas

La cosa se empieza a complicar, hasta ahora hemos leído datos tal como están en la base de datos pero no hemos operado con ellos. Si queremos salvar a la humanidad tenemos que ir un paso más allá.

Reto 2.1 – Calcular la tasa de infección

No basta con contar infectados. Hay que calcular su proporción. Este cálculo nos dará la tasa de infección por refugio, y necesitábamos saber los que superaban el 5%. Una columna más que números: un indicador de si la situación estaba bajo control… o fuera de él

Hay que hacer una división entre campos pero no es tan sencillo. El doble CAST es esencial, primero lo usamos para convertir a FLOAT para que la división no se redondee a entero y luego ya, el resultado multiplicado por 100 lo convertimos a DECIMAL(5,2) para obtener un porcentaje legible. Podríamos haberlo hecho también con CONVERT en vez de CAST siguiendo la misma lógica. 

Reto 2.2 – Clasificar automáticamente los refugios

El tiempo iba en nuestra contra y no podíamos revisar cada fila a mano. Necesitábamos etiquetar los refugios automáticamente. 

Usamos CASE para definir una lógica simple, si la comida o el agua está por debajo del mínimo, el refugio está en estado CRITICAL. Si no, está OK. Esta clasificación era la base de cualquier estrategia.

Reto 2.3 – ¿Cuántos están en cada estado?

Somos gente de datos, y de automatismos, no podemos estar contando cuántos refugios están bien y cuántos críticos. Tenemos que dar ese dato en la misma consulta.

Ya teníamos el estado individual de cada refugio. Nos basamos en la consulta anterior, quitamos las columnas que no nos interesan y usamos GROUP BY para agrupar por estado (CRITICAL u OK). Con eso y un COUNT(*) nos daba el número de refugios en cada grupo. 

Reto 2.4 – Avistamientos recientes por día

Las hordas no atacan a ciegas. Tampoco nosotros. Necesitábamos construir una consulta para seguir la evolución diaria de los avistamientos durante la última semana.

En este caso el CAST(… AS DATE) elimina la hora para agrupar correctamente por dia. Después, con DATEADD(…, -7, GETDATE()) calculábamos la fecha hace siete días. El resultado: una línea temporal del infierno.

Reto 2.5 – Amenazas cercanas a refugios vulnerables

Este fue el punto en que las cosas se pusieron serias de verdad. Necesitábamos una consulta que detectara avistamientos recientes cerca de los refugios más vulnerables.

Para ello crearemos una CTE con los refugios críticos y luego la consultaremos cruzando los datos con los de los avistamientos y las zonas.

Como decía primero creamos una CTE (CriticalRefuges) para aislar a los vulnerables. Luego, hacemos un JOIN con los avistamientos y filtramos:

  • Usamos ABS(…) < 0.5 para ver si la distancia (en coordenadas) entre refugio y avistamiento es menor de medio grado. ABS devuelve el valor absoluto (sin negativo), útil para comparar distancias.
  • También filtramos por fecha: solo avistamientos de los últimos 3 días.

Esta consulta era difícil. No tenemos un filtro de igualdad en el JOIN, lo que no es habitual. En su lugar tenemos los filtros con ABS que nos dan un cuadrado de 1 grado (0.5 arriba, abajo, izquierda y derecha) alrededor del refugio. En lugar de pedir que las coordenadas sean exactamente iguales, que sería muy improbable, buscamos avistamientos que estén dentro de una distancia tolerable.

¿Es correcto este JOIN sin filtro de igualdad? 

Si lo es. Mientras la condición del ON devuelva TRUE o FALSE para evaluar combinaciones de filas entre tablas, puedes usar cualquier lógica que tenga sentido: comparaciones, funciones, expresiones booleanas…

Eso sí, no es eficiente a gran escala. Si estás trabajando con millones de filas y distancias reales, lo suyo es usar funciones geoespaciales (GEOGRAPHY, STDistance, índices espaciales, etc.). Pero para nuestro contexto postapocalíptico con pocos refugios y unos pocos mutantes… sobra potencia.

En otras palabras, ese JOIN actúa como un filtro espacial aproximado, no como un emparejamiento exacto.

Conclusión

Estos diez retos no son simples ejercicios de SQL. Son decisiones técnicas con consecuencias narrativas y operativas. Cada uno nos enseñó algo: a leer mejor los datos, a cruzarlos con cabeza, a anticipar problemas. Pero si pensabas que eso era todo… no conoces el apocalipsis. Porque las consultas más complejas aún están por llegar. Y cuando lo hagan, necesitaremos algo más que SELECT. Nos vemos en la última entrega. Por si acaso trae casco. …O un bate con clavos.

Publicado por Roberto Carrancio en Cloud, SQL Server, 0 comentarios

Azure MI Failover Group vs SQL Server Always On

Hablar de alta disponibilidad en entornos SQL Server es como entrar en un congreso de arquitectos y preguntar por el hormigón armado: todo el mundo tiene una opinión, pero no todos entienden lo que hace que no se les caiga el edificio. Desde que apareció Azure SQL Managed Instance, muchos han querido comparar su Failover Group con el clásico y reputado Always On Availability Groups (AO AG) de SQL Server. Spoiler: no son lo mismo. Ni en arquitectura, ni en control, ni en flexibilidad. Y por mucho que Microsoft los presente como soluciones “equivalentes” en diferentes contextos, la verdad está en los detalles. Ahí donde el marketing calla y el diagrama de red grita.

¿Qué es un Failover Group en Azure SQL Managed Instance?

El Failover Group (FOG, para los amigos) en Managed Instance es un servicio de Azure PaaS que nos permite tener una réplica automática en otra región, con conmutación por error (failover) automática o manual. No hay que gestionar clústeres, ni certificados, ni configurar endpoints: todo se cocina dentro de la infraestructura de Azure. ¿Ventajas? Sencillez. ¿Limitaciones? También las hay, pero menos de lo que algunos creen.

El Failover Group actúa a nivel de instancia. Replica automáticamente todas las bases de datos del grupo seleccionado, manteniendo sincronización asincrónica entre regiones. Y aunque históricamente tenía fama de ser unidireccional y sin opciones de lectura secundaria, eso ya no es cierto: podemos habilitar acceso de solo lectura a la réplica secundaria a través del listener. Eso sí, solo una réplica, y nada de topologías a medida. Pero para muchos escenarios de DR, es más que suficiente.

¿Y qué hace SQL Server con su Always On Availability Groups?

Aquí volvemos al SQL Server clásico, el de verdad, el que instalamos en máquinas (físicas o virtuales), con clústeres de Windows, certificados, endpoints, y todo lo que da gusto configurar a las tres de la mañana cuando algo falla. El AO AG es un modelo de alta disponibilidad y recuperación ante desastres (HA/DR) basado en grupos de disponibilidad, con réplicas sincronizadas (para HA) y asincrónicas (para DR). Admite múltiples réplicas, balanceo de lectura, conmutación automática o manual, y una flexibilidad que muchos aún no saben que están mal usando.

¿Requiere trabajo? Mucho. ¿Te da control absoluto? También. Y eso, en infraestructuras exigentes, marca la diferencia entre diseñar alta disponibilidad y simplemente esperar que Azure haga lo suyo.

Diferencias técnicas clave

Aquí es donde empieza lo interesante. El Failover Group en MI está limitado por diseño: solo una réplica secundaria, sincronización asincrónica entre regiones y sin opción a topologías complejas. Pero lo compensa con gestión simplificada, y sí, un listener que permite direccionar tráfico de lectura y escritura de forma bastante transparente. El parámetro ApplicationIntent=ReadOnly funciona como esperamos, siempre que tengamos configurado el grupo correctamente.

AO AG, por su parte, permite hasta ocho réplicas, elegir sincronización o asincronía según la necesidad, distribuir la carga de lectura, gestionar failover policies con precisión quirúrgica y hasta usar clusterless AGs para entornos que no necesitan HA pero sí replicación. También nos permite ajustar los parámetros internos de cada réplica, implementar scripts personalizados ante fallos y mantener una visibilidad completa del estado del clúster.

La diferencia crítica sigue siendo el acceso al entorno. En SQL Server AO AG tienes control del sistema operativo, del almacenamiento, de la red y del motor de base de datos en sí. En Managed Instance estás dentro de una caja cerrada: puedes administrar lo que te dejan, y cuando algo se rompe, dependes completamente del soporte de Azure. Que sí, son majos. Pero a veces el SLA no consuela cuando tienes al CTO respirando en la nuca.

Ventajas y limitaciones prácticas

El Failover Group de Azure Managed Instance es ideal para quienes quieren alta disponibilidad sin complicaciones, sin pelearse con Windows Server Failover Clustering, sin pensar en discos compartidos ni quorum. Y con la posibilidad de lectura secundaria, gana puntos en escenarios de DR que también exigen analítica o reporting en caliente.

AO AG, por su parte, permite arquitecturas híbridas, complejas y a medida. Pero requiere un nivel de experiencia y de mantenimiento que no todos los equipos pueden asumir. No es para todos, pero en manos expertas es una bestia formidable. Eso sí, como toda bestia, necesita cuidado constante y algo de cariño (o miedo). Cuidado con meterte en esta solución tan compleja si tu equipo no está preparado o tendrás el caldo de cultivo perfecto para un problema grave.

¿Qué debemos elegir para nuestro entorno?

La decisión real no es entre Failover Group y Always On, sino entre PaaS y IaaS (o on-premises). Si tu equipo no puede o no quiere gestionar infraestructura, el Failover Group en Azure MI es una solución más que decente. Pero si necesitas múltiples réplicas, balanceo de lectura avanzado, configuración personalizada o integración con entornos complejos… entonces AO AG sigue siendo la referencia.

También hay que mirar la criticidad del sistema. ¿Puedes tolerar unos minutos de pérdida de servicio mientras Azure detecta y conmuta? ¿O necesitas failover inmediato y con cero pérdida de datos? El RPO y RTO no son iguales, y en algunos casos eso marca la diferencia entre continuidad del negocio y justificación al comité de crisis.

Los precios de ambas soluciones también son decisivos, en Azure Managed Instance tienes que pagar todos los meses depende del tamaño de tu servidor y eso a la larga puede salir caro. Always On, por su parte, no se queda corto ya que vas a necesitar licencias SQL Server Enterprise y, eso no es barato precisamente.

Casos reales y decisiones que duelen

Recientemente, en un proyecto de consultoría, el cliente tenía que mover un entorno crítico de Always On a Azure MI. Las restricciones del Failover Group se hicieron evidentes al tercer día, cuando se dieron cuenta de que no podían controlar la latencia ni ajustar parámetros finos de sincronización. ¿Solución? Replantear parte de la arquitectura y asumir limitaciones. ¿Resultado? Un entorno funcional, sí, pero menos flexible. Y con la sensación de haber pasado de un Fórmula 1 a un coche automático: cómodo, sí. Pero que no te deja cambiar de marcha cuando más lo necesitas.

Conclusión

Failover Group en Azure MI no es el sucesor espiritual de Always On. Es una solución distinta, pensada para escenarios distintos. Si necesitas control, flexibilidad y múltiples réplicas, Always On sigue siendo el rey. Si priorizas simplicidad y mantenimiento mínimo, Failover Group cumple su papel. Y ahora, con acceso de lectura en la réplica secundaria, es más potente de lo que muchos creen.

Pero no confundamos comodidad con equivalencia. Porque cuando llegue el fallo, lo que importa no es la tecnología, sino cómo responde. Y en ese momento, más vale haber elegido bien. ¿Quieres alta disponibilidad sin sustos? Elige con cabeza, no con prisas. Porque lo único peor que una base de datos caída… es una mal diseñada que no sabe caer.

Publicado por Roberto Carrancio en Alta Disponibilidad, Cloud, SQL Server, 0 comentarios

SQL contra el Apocalipsis Mutante (Parte 3): El último asalto

Las noches son cada vez más largas. Los refugios que siguen en pie son fortalezas solitarias rodeadas de silencio y muerte. Pero los supervivientes que completaron las dos primeras partes de esta serie son distintos: dominan SELECTs afilados, JOINs letales y cálculos capaces de prever el caos. Han llegado hasta aquí por méritos propios.

Si acabas de llegar: detente. Aquí no hay atajos. Vuelve al primer capítulo y luego al segundo capítulo para convertirte en un verdadero experto en análisis de datos para sobrevivir al apocalipsis.

Hoy cruzaremos la última frontera: funciones de ventana, CTEs, ROLLUP y CUBE. Con estas habilidades, no solo resistirás: podrás planificar la evacuación, anticiparte a cada ataque y construir un futuro para los últimos humanos.

SurvivalDB: el campo de batalla definitivo

Nuestra base de datos SurvivalDB ha sido nuestro campo de entrenamiento y nuestra línea de defensa y en este último asalto no iba a ser menos. Sus tablas ya te son conocidas: RefugeSupplies, SurvivorStats, MutantSightings y EvacuationRoutes. Hoy, sacaremos todo el jugo posible de sus datos.

Ejercicios: la misión final para salvar a la humanidad

Después de una semana de resistencia, los refugios que aún aguantan necesitan más que coraje: requieren análisis avanzados para planificar el contragolpe o la evacuación definitiva. Hoy vamos a cruzar la última frontera de SQL: funciones de ventana que muestran lo que sucede a tu alrededor, CTEs que revelan rutas de huida imposibles y agregaciones que transforman el caos en información estratégica.

Cada consulta que planteamos a continuación no es sólo un ejercicio: es un paso esencial para decidir si la humanidad logra resistir un día más… o se convierte en recuerdo. Afilad vuestro teclado: el futuro se escribe en T-SQL.

Ejercicio 1: Prioriza refugios con funciones de ventana

Necesitamos saber el orden de prioridad para reforzar refugios: los que más armas tengan irán al final; primero hay que ayudar a los peores armados.

Tu misión: mostrar la información de los refugios con una columna WeaponsRank que indique la posición de cada refugio en el ranking por número de armas. 

Pista: cuando la prioridad depende del orden, las funciones de ventana son tu aliado.

Ejercicio 2: Compara infectados con LAG y LEAD

El Consejo de la Resistencia necesita saber si las infecciones están empeorando refugio a refugio. Comparar cada refugio con el anterior y el siguiente permitirá identificar focos crecientes.

Tu misión: mostrar RefugeID e Infected para cada refugio además de PrevInfected y NextInfected con los valores del refugio anterior y siguiente respectivamente.

Pista: dos funciones en la misma cláusula OVER te darán el pasado y el futuro.

Ejercicio 3: Totaliza avistamientos con ROLLUP

Los analistas necesitan saber la actividad mutante diaria y por zona, pero también los totales diarios y el gran total. Esta vista global decidirá si debemos evacuar o resistir.

Tu misión: agrupar avistamientos por fecha y coordenadas (Latitude, Longitude) y usa ROLLUP para incluir los totales parciales y el gran total.

Pista: agrupar con ROLLUP es como un seguro: te dará todos los niveles de resumen.

Ejercicio 4: Construye rutas de evacuación con CTE recursiva

La evacuación debe organizarse como una cadena desde el refugio inicial al último refugio seguro. Cada ruta conecta dos refugios; necesitamos todas las rutas posibles desde el refugio 1 para planificar el éxodo.

Tu misión: crear una CTE recursiva que muestre todas las rutas desde el refugio 1, listando la secuencia completa de refugios visitados como Path.

Pista: una CTE que se llame a sí misma traza caminos que una simple consulta jamás encontraría.

Ejercicio 5: Agrega por combinaciones con CUBE

Para decidir la distribución de suministros y armas, necesitamos un análisis de refugios agrupados por su estado (CRITICAL u OK) y por rango de armas (0-20, 21-50, >50). Los totales por cada combinación y los globales son imprescindibles.

Tu misión: agrupar por ambos criterios y usar CUBE para obtener todos los totales parciales y el gran total, mostrando también el número de refugios (RefugeCount).

Pista: CUBE permite ver cada combinación posible y cada subtotal en una sola consulta.

Consejo final: sobrevivir no es suerte, es optimización

Llegar hasta aquí no ha sido casualidad. Cada consulta ha reforzado tus habilidades y tu refugio. Pero como cualquier buen plan de supervivencia, hay que mantenerlo actualizado: los índices se fragmentan, los datos crecen y las hordas evolucionan. No bajes la guardia.

¿Quieres las respuestas?

El próximo martes tendremos en YouTube un vídeo con las soluciones paso a paso de este y los anteriores capítulos para que compruebes tu progreso y consolides tu aprendizaje. Pero si lo ves sin practicar antes… no esperes sobrevivir mucho tiempo. Trata de resolver estos ejercicios por tu cuenta antes de recurrir al vídeo y deja en comentarios tus respuestas.

El amanecer tras la noche más oscura

Han pasado varios días desde los primeros ataques. Gracias a los análisis, los refugios críticos fueron reforzados, los más armados ayudaron a los demás y las rutas de evacuación se activaron a tiempo. Los mutantes siguen ahí, pero los supervivientes también. Ahora dominan SQL como nadie y han aprendido que los datos, más que las balas, son el arma definitiva.

Mientras el sol asoma sobre un paisaje todavía plagado de ruinas, una última transmisión interfiere la radio de los refugios: un código desconocido que habla de nuevas hordas, más grandes, más rápidas… y de supervivientes que podrían estar organizándose más allá de lo que creíamos posible.

Porque en este apocalipsis, el verdadero final nunca llega. Y cuando vuelva la oscuridad, volveremos con nuevas queries, nuevas estrategias… y la misma sed de seguir vivos.

 

Publicado por Roberto Carrancio en Cloud, SQL Server, 1 comentario