1 min de lecturaPor Sergey Matrosov
Desanidar datos clave-valor relativos a objetos en columnas distintas.
Si tienes una base de datos con una tabla de datos en bruto, en la que la primera columna es el user-id o la fecha y las otras dos son el nombre y el valor de los parámetros de tu URL, tal que así:

y quieres transformarla en una tabla como esta:

He preparado soluciones para dos bases de datos: Clickhouse y PostgreSQL. Este artículo se basa en la primera, pero aquí también encontrarás una consulta para PostgreSQL.
Primero tenemos que generar una tabla de datos con una consulta, usando las columnas «userid», «name» y «value», igual que hicimos al escribir los modelos de atribución sencillos con BigQuery.

El resultado es una tabla como la de la primera captura. Después hay que usar la construcción CASE...WHEN para convertir la columna «name» en columnas cuyo nombre sean los valores de esa columna. El valor de esas columnas nuevas será el valor de la columna «value».

Este es nuestro resultado:

El problema salta a la vista: no solo hay muchas celdas vacías, sino que queríamos una sola fila por usuario. Si has pensado en GROUP BY, vas bien encaminado, pero necesitamos la función adecuada. Primero eché mano de una función de arrays llamada groupArray:

No olvides usar la instrucción GROUP BY userid:
![]()
Esta es la tabla ya modificada:

Ya casi estamos; la última función es arrayJoin, que desanidará ese array en las filas de siempre.

Y aquí está:

Espero que te haya servido. ¡Suerte!
Traducido del inglés con Claude.
← Volver a Last Click City