SQLazy empareja registros de entrada y salida en sesiones sin SQL complejo
La herramienta de esProc SPL genera SQL nativo a partir de pasos descriptivos para pivotar logs de acceso, ahorrando las consultas con ventanas.

SQLazy, la nueva herramienta de esProc SPL, promete simplificar la transformación de datos que suele exigir SQL complejo. Su ejemplo de uso, publicado esta semana, convierte registros de acceso (IN/OUT) por persona y edificio en filas de sesión emparejadas, algo que en SQL puro requeriría funciones de ventana y subconsultas anidadas.
El problema es conocido: la tabla userBuilding guarda cada evento de entrada o salida como una fila separada. Para saber cuánto tiempo pasó alguien dentro, hay que emparejar cada IN con su OUT siguiente. Si los registros llegaran perfectos, un simple JOIN bastaría. Pero en la realidad hay eventos huérfanos y acciones consecutivas repetidas, así que hace falta lógica de segmentación.
SQLazy ataca el caso con cuatro pasos: ordenar por persona, edificio y tiempo; detectar límites de sesión con una condición relativa; agregar condicionalmente para girar las filas; y limpiar la columna auxiliar. La clave está en el paso de segmentación, donde se define que una nueva sesión empieza cuando el registro anterior es OUT o cuando hay dos IN seguidos. Eso impide agrupar de más y mantiene la semántica de cada sesión.
Lo interesante para quien ha sufrido este tipo de transformaciones es que no necesitas escribir la función LAG ni el acumulado con SUM OVER. El compilador de SQLazy lo hace por ti. A partir de descripciones como condition (action = "IN") max timestamp as 'IN', genera SQL nativo, que en el ejemplo se muestra en sintaxis Oracle. Si has hecho alguna vez un pivotado de este estilo, sabes que manualmente son dos subconsultas, un LAG y un MAX(CASE...). Aquí se resume en cuatro pasos legibles y verificables de forma independiente.
SQLazy está disponible como experiencia online gratuita sin registro, y el código fuente está en GitHub. De momento es un proyecto joven, pero la propuesta de abstraer lógica de negocio para generar SQL podría encajar en flujos donde la productividad del desarrollador pesa más que la optimización manual. Habrá que ver el rendimiento del SQL generado en conjuntos de datos grandes, pero para tareas de limpieza y modelado como este ejemplo, la simplicidad es atractiva.


