sql - Transponer filas en columnas en BigQuery(implementación dinámica)
google-bigquery google-cloud-platform (1)
BigQuery aún no admite funciones pivotantes
Todavía puede hacer esto en BigQuery usando el siguiente enfoque
Pero primero, además de dos columnas en los datos de entrada, debe tener una columna más que especifique grupos de filas en la entrada que deben combinarse en una fila en la salida
Entonces, supongo que su tabla de entrada (yourTable) se ve a continuación
**id** **Key** **Value**
1 channel_title Mahendra Guru
1 youtube_id ugEGMG4-MdA
1 channel_id UCiDKcjKocimAO1tV
1 examId 72975611-4a5e-11e5
1 postId 1189e340-b08f
2 channel_title Ab Live
2 youtube_id 3TNbtTwLY0U
2 channel_id UCODeKM_D6JLf8jJt
2 examId 72975611-4a5e-11e5
2 postId 0c3e6590-afeb
Entonces, primero debes ejecutar debajo de la consulta
SELECT ''SELECT id, '' +
GROUP_CONCAT_UNQUOTED(
''MAX(IF(key = "'' + key + ''", value, NULL)) as ['' + key + '']''
)
+ '' FROM yourTable GROUP BY id ORDER BY id''
FROM (
SELECT key
FROM yourTable
GROUP BY key
ORDER BY key
)
El resultado de la consulta anterior será una cadena que (si formatea) se verá a continuación
SELECT
id,
MAX(IF(key = "channel_id", value, NULL)) AS [channel_id],
MAX(IF(key = "channel_title", value, NULL)) AS [channel_title],
MAX(IF(key = "examId", value, NULL)) AS [examId],
MAX(IF(key = "postId", value, NULL)) AS [postId],
MAX(IF(key = "youtube_id", value, NULL)) AS [youtube_id]
FROM yourTable
GROUP BY id
ORDER BY id
ahora debe copiar el resultado anterior (nota: realmente no necesita formatearlo, lo hice solo para presentar) y ejecutarlo como consulta normal
El resultado será el esperado
id channel_id channel_title examId postId youtube_id
1 UCiDKcjKocimAO1tV Mahendra Guru 72975611-4a5e-11e5 1189e340-b08f ugEGMG4-MdA
2 UCODeKM_D6JLf8jJt Ab Live 72975611-4a5e-11e5 0c3e6590-afeb 3TNbtTwLY0U
Tenga en cuenta: puede omitir el Paso 1 si puede construir la consulta adecuada (como en el paso 2) usted mismo y el número de campos pequeños y constantes o si se trata de una sola vez. ¡Pero el Paso 1 es solo un paso de ayuda que lo hace por usted, para que pueda crearlo rápidamente en cualquier momento!
Si está interesado, puede ver más sobre pivotar en mis otras publicaciones.
¿Cómo escalar Pivoting en BigQuery?
Tenga en cuenta que hay una limitación de 10K columnas por tabla, por lo que está limitado con organizaciones de 10K.
También puede ver a continuación ejemplos simplificados (si el anterior es demasiado complejo / detallado):
¿Cómo transponer filas a columnas con gran cantidad de datos en BigQuery / SQL?
¿Cómo crear columnas variables ficticias para miles de categorías en Google BigQuery?
Pivotar campos repetidos en BigQuery
Quiero generar una nueva tabla y colocar todos los pares de valores clave con claves como nombres de columna y valores como sus respectivos valores usando BigQuery.
Ejemplo:
**Key** **Value**
channel_title Mahendra Guru
youtube_id ugEGMG4-MdA
channel_id UCiDKcjKocimAO1tV
examId 72975611-4a5e-11e5
postId 1189e340-b08f
channel_title Ab Live
youtube_id 3TNbtTwLY0U
channel_id UCODeKM_D6JLf8jJt
examId 72975611-4a5e-11e5
postId 0c3e6590-afeb
Quiero convertirlo a:
**channel_title youtube_id channel_id examId postId**
Mahendra Guru ugEGMG4-MdA UCiDKcjKocimAO1tV 72975611-4a5e-11e5 1189e340-b08f
Ab Live 3TNbtTwLY0U UCODeKM_D6JLf8jJt 72975611-4a5e-11e5 0c3e6590-afeb
¿Cómo hacerlo usando BigQuery?