Después de exportar tus datos de Crashlytics y (opcionalmente) de sesiones de Firebase a BigQuery, puedes comenzar a trabajar con los datos:
Analiza datos con consultas en SQL
Puedes ejecutar consultas en tus datos de Crashlytics para generar informes y resúmenes personalizados. Dado que estos tipos de informes personalizados no están disponibles en el panel de Crashlytics de la consola de Firebase, pueden complementar tu análisis y comprensión de los datos de fallas. Consulta la colección de consultas de ejemplo más adelante en esta página.Combina datos de diferentes conjuntos de datos
Por ejemplo, si eliges exportar datos de sesiones de Firebase cuando configures la exportación de datos de Crashlytics, podrás comprender mejor a los usuarios y las sesiones sin fallas (consulta la consulta de ejemplo). Además, puedes exportar datos de varios productos de Firebase (como Performance Monitoring) o de Google Analytics y, luego, unir y analizar esos datos en BigQuery con tus datos de Crashlytics.Crea vistas
Con la IU de BigQuery, puedes crear una vista, que es una tabla virtual definida por una consulta en SQL. Para obtener instrucciones detalladas sobre los diferentes tipos de vistas y cómo crearlas, consulta la documentación de BigQuery.
Para obtener detalles sobre el esquema del conjunto de datos, consulta Esquema del conjunto de datos para los datos exportados en BigQuery.
Más información sobre BigQuery SQL
Obtén información sobre los tipos de consultas que puedes ejecutar, incluidos los trabajos de consultas interactivas, los trabajos de consultas por lotes y los trabajos de consultas continuas.
Obtén más información sobre las sentencias compatibles y los dialectos de SQL en BigQuery.
Descubre cómo escribir consultas con asistencia potenciada por IA (Gemini).
Ejemplo de consultas para datos de Crashlytics
En esta sección, se proporcionan algunas situaciones y consultas de ejemplo que demuestran cómo puedes usar el lenguaje SQL de BigQuery con tus datos de Crashlytics exportados y los datos de sesiones de Firebase.
- Cómo calcular métricas sin fallas con los datos de sesiones de Firebase
- Fallas por día
- Busca las fallas más generalizadas
- Los 10 dispositivos con más fallas
- Filtra por clave personalizada
- Extrae los IDs de usuario
- Cómo encontrar a todos los usuarios que experimentan una falla en particular
- Cantidad de usuarios afectados por una falla, desglosada por país
- 5 problemas principales de hoy
- 5 problemas principales desde DATE, incluido el día actual
Ejemplo 1: Calcula métricas sin fallas con los datos de sesiones de Firebase
En la versión más reciente, lanzaste una renovación importante de tu app para abordar las fallas en un recorrido crítico del usuario. Recibiste opiniones excelentes de los usuarios, pero te gustaría tener evidencia cuantitativa de que tu app es más estable que antes.
Las métricas de usuarios sin fallas pueden ayudarte a proporcionar esta información. Estas métricas son mediciones importantes que te ayudan a comprender el estado general de tu app. Con los datos de las sesiones de Firebase y los eventos de Crashlytics, puedes calcular estas métricas con una consulta básica.
Estas son consultas de ejemplo para una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
Usuarios sin fallas en una versión específica:
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT installation_uuid) / COUNT (DISTINCT instance_id))) AS CFU FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND crashlytics.application.display_version="APP_VERSION" AND sessions.application.display_version = "APP_VERSION" GROUP BY event_date ORDER BY event_date
Sesiones sin fallas durante la última semana (últimas 168 horas):
SELECT TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date, (1 - (COUNT (DISTINCT crashlytics.firebase_session_id) / COUNT (DISTINCT sessions.session_id))) AS CFS FROM `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions LEFT JOIN `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics ON TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) WHERE crashlytics.error_type="FATAL" AND _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND _PARTITIONTIME < CURRENT_TIMESTAMP() GROUP BY event_date ORDER BY event_date
Ejemplo 2: Fallas por día
Luego de resolver la mayor cantidad de errores posible, crees que tu equipo ya puede lanzar una app nueva para compartir fotos. Pero antes de hacerlo, quieres revisar la cantidad de fallas por día durante el último mes para asegurarte de que la búsqueda de errores haya hecho que la app sea más estable a lo largo del tiempo.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT COUNT(DISTINCT event_id) AS number_of_crashes, FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` GROUP BY date_of_crashes ORDER BY date_of_crashes DESC LIMIT 30;
Ejemplo 3: Busca las fallas más generalizadas
Para priorizar adecuadamente los planes de producción, quieres encontrar las 10 fallas más generalizadas de tu app. Generas una consulta que proporciona los datos pertinentes.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT DISTINCT issue_id, COUNT(DISTINCT event_id) AS number_of_crashes, COUNT(DISTINCT installation_uuid) AS number_of_impacted_user, blame_frame.file, blame_frame.line FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY issue_id, blame_frame.file, blame_frame.line ORDER BY number_of_crashes DESC LIMIT 10;
Ejemplo 4: Los 10 dispositivos con más fallas
El otoño es la temporada de los teléfonos nuevos Tu empresa sabe que esto también significa que durante esta temporada aparecen problemas específicos de cada teléfono, en especial para Android. Para adelantarte a los inminentes problemas de compatibilidad, crea una consulta que identifique los 10 dispositivos que presentaron la mayor cantidad de fallas en la semana anterior (168 horas).
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT device.model, COUNT(DISTINCT event_id) AS number_of_crashes FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` WHERE event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR) AND event_timestamp < CURRENT_TIMESTAMP() GROUP BY device.model ORDER BY number_of_crashes DESC LIMIT 10;
Ejemplo 5: Filtra por clave personalizada
Eres un desarrollador de videojuegos que quiere saber cuál de los niveles de su juego presenta la mayor cantidad de fallas.
Para hacer un seguimiento de esa estadística, configura una clave de Crashlytics personalizada (iOS+ | Android | Flutter | Unity) llamada current_level y actualízala cada vez que el usuario alcance un nivel nuevo.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Con esa clave en tu exportación a BigQuery, puedes escribir una consulta para
informar la distribución de los valores de current_level asociados con cada evento
de falla.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
value
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
key = "current_level"
GROUP BY
key,
value
ORDER BY
num_of_crashes DESCEjemplo 6: Extrae IDs de usuario
Tienes una app para Android en acceso anticipado. A la mayoría de sus usuarios les encanta, pero tres han experimentado una cantidad inusual de fallas. Para llegar a la raíz del problema, escribe una consulta que extrae todos los eventos de fallas de esos usuarios a través de sus ID de usuario.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT *
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
user.id
Ejemplo 7: Busca a todos los usuarios que experimentan una falla en particular
Tu equipo lanzó accidentalmente un error crítico a un grupo de verificadores beta. Tu equipo pudo usar la consulta del ejemplo "Busca fallas más generalizadas" anterior para identificar el ID de la falla específica. Ahora tu equipo desea ejecutar una consulta para extraer la lista de usuarios de la app que sufrieron esta falla.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT user.id as user_id
FROM
`PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
issue_id = "ISSUE_ID"
AND application.display_version = "APP_VERSION"
AND user.id != ""
ORDER BY
user.id;Ejemplo 8: Cantidad de usuarios afectados por una falla, desglosada por país
Tu equipo detectó un error crítico durante el lanzamiento de una versión nueva. Pudiste usar la consulta del ejemplo "Busca fallas más generalizadas" anterior para identificar el ID de la falla específica. Tu equipo quiere comprobar si esta falla se propagó a los usuarios de distintos países del mundo.
Para escribir esta consulta, tu equipo deberá hacer lo siguiente:
Habilitar la exportación de datos de Google Analytics a BigQuery. Consulta Exporta datos de proyectos a BigQuery.
Actualizar la app para que pase un ID de usuario al SDK de Google Analytics y al SDK de Crashlytics.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");Escribir una consulta que use el campo ID de usuario para unir los eventos del conjunto de datos de Google Analytics con las fallas del conjunto de datos de Crashlytics.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete y
IOS(en lugar del nombre del paquete yANDROID).SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c INNER JOIN `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id WHERE c.issue_id = "ISSUE_ID" AND a._TABLE_SUFFIX BETWEEN '20190101' AND '20200101' GROUP BY c.issue_id, a.geo.country, c.user.id
Ejemplo 9: 5 problemas principales de hoy
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` WHERE DATE(event_timestamp) = CURRENT_DATE() GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Ejemplo 10: 5 problemas principales desde DATE, incluido el día actual
También puedes combinar las tablas por lotes y en tiempo real con una consulta de unión para agregar
información en tiempo real a los datos por lotes confiables. Como event_id es una clave
primaria, puedes usar DISTINCT event_id para anular la duplicación de los eventos comunes de ambas
tablas.
Esta es una consulta de ejemplo de una app para Android. En el caso de una app para iOS, usa su ID del paquete
y IOS (en lugar del nombre del paquete y ANDROID).
SELECT issue_id, COUNT(DISTINCT event_id) AS events FROM ( SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME` UNION ALL SELECT issue_id, event_id, event_timestamp FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`) WHERE event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD") GROUP BY issue_id ORDER BY events DESC LIMIT 5;
Próximos pasos
Crea paneles personalizados con los datos exportados y varios servicios de Google Cloud, como Looker Studio.
Obtén información sobre el esquema del conjunto de datos para los datos exportados.