google-bigquery

google bigquery - Pivotar campos repetidos en BigQuery



google-bigquery (2)

Mi esquema se parece a esto:

userid:string timestamp:integer params:nested/repeated field with 2 fields - name:string (possible values: "a", "b","c") - value:string

Quiero que mi consulta devuelva lo siguiente:

userid, timestamp, a, b, c 123, 1447799796, foo, bar, xyz 233, 1447799900, bob, xxx, yyy : :

¿Cuál es la forma más fácil de hacer esto?


Algo en este sentido:

SELECT userid, timestamp, FIRST(name == "a", value, NULL) WITHIN RECORD a, FIRST(name == "b", value, NULL) WITHIN RECORD b, FIRST(name == "c", value, NULL) WITHIN RECORD c, FROM t


cuando los valores posibles se conocen de antemano y no hay muchos de ellos para escribir manualmente SQL, puede usar a continuación:

SELECT userid, ts, MAX(IF(params.name = "a", params.value, NULL)) WITHIN RECORD a, MAX(IF(params.name = "b", params.value, NULL)) WITHIN RECORD b, MAX(IF(params.name = "c", params.value, NULL)) WITHIN RECORD c FROM yourTable

Si los valores posibles son "desconocidos" de antemano y / o dinámicos de una ejecución a otra, puede usar el siguiente SQL auxiliar para generar el tipo de SQL anterior.

SELECT ''select userid, ts, '' + GROUP_CONCAT_UNQUOTED( ''max(if(params.name = "'' + STRING(params.name) + ''", params.value, null)) WITHIN RECORD as ['' + STRING(params.name) + '']'' ) + '' from yourTable '' FROM (SELECT params.name FROM yourTable GROUP BY params.name)