remove - firebase events sign_up
Seleccione varios parĂ¡metros de evento en una sola fila para eventos de Firebase almacenados en Google BigQuery (2)
Usando SQL estándar (desmarque "Usar SQL heredado" en "Opciones de Mostrar" en la interfaz de usuario), puede expresar la consulta como:
SELECT
event_dim.name as name,
(SELECT value.int_value FROM UNNEST(event_dim.params)
WHERE key = "productID") AS productID,
(SELECT value.int_value FROM UNNEST(event_dim.params)
WHERE key = "value") AS value
FROM `dataset.mytable` AS t,
t.event_dim AS event_dim;
Editar: ejemplo actualizado para incluir int_value
como parte del value
basado en el comentario a continuación. Aquí hay un ejemplo autónomo que también demuestra el enfoque:
WITH T AS (
SELECT ARRAY_AGG(event_dim) AS event_dim
FROM (
SELECT STRUCT(
"foo" AS name,
ARRAY<STRUCT<key STRING, value STRUCT<int_value INT64, string_value STRING>>>[
("productID", (10, NULL)), ("value", (5, NULL))
] AS params) AS event_dim
UNION ALL
SELECT STRUCT(
"bar" AS name,
ARRAY<STRUCT<key STRING, value STRUCT<int_value INT64, string_value STRING>>>[
("productID", (13, NULL)), ("value", (42, NULL))
] AS params) AS event_dim
)
)
SELECT
event_dim.name as name,
(SELECT value.int_value FROM UNNEST(event_dim.params)
WHERE key = "productID") AS productID,
(SELECT value.int_value FROM UNNEST(event_dim.params)
WHERE key = "value") AS value
FROM T AS t,
t.event_dim AS event_dim;
Intento realizar una consulta muy simple para los eventos de Firebase almacenados en Google BigQuery, pero no puedo encontrar la manera de hacerlo.
En la aplicación de Android, estoy registrando un evento como este:
Bundle params = new Bundle();
params.putInt("productID", productId);
params.putInt(FirebaseAnalytics.Param.VALUE, value);
firebaseAnalytics.logEvent("productEvent", params);
Entonces, en BigQuery tengo algo como esto:
___________________ _______________________ ____________________________ | event_dim.name | event_dim.params.key | event_dim.params.int_value | |___________________|_______________________|____________________________| | productEvent | productID | 25 | | |_______________________|____________________________| | | value | 1253 | |___________________|_______________________|____________________________|
Cuando obtengo los datos de esta tabla, obtengo dos filas:
___________________ _______________________ ____________________________ |event_dim.name | event_dim.params.key | event_dim.params.int_value | |___________________|_______________________|____________________________| | productEvent | productID | 25 | | productEvent | value | 12353 |
Pero lo que realmente necesito es una cláusula SELECT de esta tabla para obtener los datos de la siguiente manera:
___________________ _____________ _________ | name | productID | value | |___________________|_____________|_________| | productEvent | 25 | 12353 |
Alguna idea o sugerencia?
Puede pivotar los valores en columnas como esta
SELECT
event_dim.name as name,
MAX(IF(event_dim.params.key = "productID", event_dim.params.int_value, NULL)) WITHIN RECORD productID,
MAX(IF(event_dim.params.key = "value", event_dim.params.int_value, NULL)) WITHIN RECORD value,
FROM [events]
En caso de que desee generar este comando usando SQL, consulte esta solución: Pivotar campos repetidos en BigQuery