Exporta datos de Firebase Crashlytics a BigQuery

Puedes exportar tus datos de Firebase Crashlytics a BigQuery para analizarlos en detalle. BigQuery te permite analizar los datos con BigQuery SQL, exportarlos a otro proveedor de servicios en la nube y usarlos en los paneles personalizados y de visualización con Looker Studio.

¿Qué puedes hacer con los datos exportados?

Las exportaciones a BigQuery contienen datos sin procesar sobre fallas que incluyen el tipo de dispositivo, el sistema operativo, las excepciones (apps para Android) o los errores (apps para Apple) y los registros de Crashlytics, entre otros datos. Puedes revisar exactamente qué datos de Crashlytics se exportan y su esquema de la tabla más adelante en esta página.

Estos son algunos ejemplos de lo que puedes hacer con tus datos de Crashlytics exportados:

  • Ejecuta consultas
    Puedes ejecutar consultas en tus datos de Crashlytics para generar informes que agreguen datos de eventos de fallas a resúmenes más fáciles de comprender. Dado que estos tipos de informes no están disponibles en el panel de Crashlytics de Firebase console, pueden complementar tu análisis y comprensión de los datos de fallas. Más adelante en esta página, encontrarás una selección de consultas de ejemplo.

  • Usa una plantilla de Looker Studio
    Crashlytics proporciona una plantilla de Looker Studio prediseñada para visualizar tus datos exportados.

  • 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.

  • Combina datos específicos de Crashlytics con datos de sesiones de Firebase
    También puedes exportar datos de sesiones de Firebase cuando configures la exportación de datos de Crashlytics. Usa estos datos de sesiones para comprender mejor a los usuarios y las sesiones sin fallas.

Beneficios de la exportación mediante transmisión a BigQuery

De forma predeterminada, los datos se exportan a BigQuery en una exportación por lotes diaria. Además, puedes transmitir tus datos de Crashlytics y las sesiones de Firebase en tiempo real con la transmisión de BigQuery. Puedes usarlo para cualquier propósito que requiera datos en vivo, como presentar información en un panel de transmisiones en vivo, mirar un lanzamiento en vivo o supervisar problemas de aplicaciones que activen alertas y flujos de trabajo personalizados.

Cuando habilites la exportación mediante transmisión a BigQuery, también tendrás tablas en tiempo real (además de las tablas por lotes). Ambos tipos de tablas tendrán el mismo esquema de conjunto de datos, pero existen algunas diferencias importantes entre las tablas por lotes y las tablas en tiempo real:

Tabla por lotes Tabla en tiempo real
  • Los datos se exportan una vez al día.
  • Los eventos se almacenan de forma duradera antes de escribirlos por lotes en BigQuery.
  • Los datos se pueden reabastecer hasta 30 días antes.*
  • Los datos se exportan en tiempo real.
  • No hay reabastecimiento de datos disponible.

La tabla por lotes es ideal para el análisis a largo plazo y la identificación de tendencias en el tiempo, ya que se almacenan los eventos de forma duradera antes de escribirlos y se pueden reabastecer en la tabla por hasta 30 días.* Cuando se escriben datos en la tabla en tiempo real, también se escriben de inmediato en BigQuery, por lo que es ideal para los paneles de transmisiones en vivo y las alertas personalizadas. Ambas tablas se pueden combinar con una consulta de unión para obtener los beneficios de ambas.

De forma predeterminada, las particiones de las tablas en tiempo real tienen una fecha de vencimiento de 30 días. Para cambiar esta configuración, consulta Configura el vencimiento de la partición en la documentación de BigQuery.

* Consulta los detalles sobre la compatibilidad con el reabastecimiento en Actualiza a la nueva infraestructura de exportación.



Habilita la exportación a BigQuery

  1. En Firebase console, ve a la página Integraciones.

  2. En la tarjeta de BigQuery, haz clic en Vincular.

  3. Sigue las instrucciones en pantalla para habilitar la exportación a BigQuery, incluidas las siguientes opciones:

¿Qué sucede cuando habilitas la exportación?

  • Firebase exporta datos de las apps vinculadas a BigQuery.

    • Durante la configuración, de forma predeterminada, todas las apps de tu proyecto se vinculan a BigQuery, pero puedes seleccionar no vincular apps específicas durante la configuración.

    • Todas las apps que agregues posteriormente a tu proyecto de Firebase se vincularán automáticamente a BigQuery.

    • En cualquier momento, puedes administrar qué apps exportan datos.

  • Firebase exporta los datos a la ubicación del conjunto de datos que seleccionaste durante la configuración.

    • Esta ubicación se aplica tanto al conjunto de datos de Crashlytics como al conjunto de datos de sesiones de Firebase (si los datos de sesiones están habilitados para la exportación).

    • Esta ubicación solo se aplica a los datos exportados a BigQuery y no afecta la ubicación de los datos almacenados para su uso en el panel Crashlytics de Firebase console o en Android Studio.

    • Después de crear un conjunto de datos, no se puede cambiar su ubicación, pero puedes copiarlo en otra ubicación o moverlo (volver a crearlo) manualmente a otra ubicación. Para obtener más información, consulta Cambia la ubicación de las exportaciones existentes.

  • Firebase configura sincronizaciones diarias de tus datos de lotes con BigQuery.

    • Después de vincularte a BigQuery, es posible que la exportación de datos por lotes inicial tarde hasta 48 horas.

    • La sincronización diaria se realiza una vez al día, independientemente de cualquier exportación programada que hayas configurado en BigQuery. Ten en cuenta que el tiempo y la duración del trabajo de sincronización pueden cambiar, por lo que no recomendamos programar operaciones o tareas descendentes en función de un tiempo específico de la exportación.

  • Firebase exporta una copia de tus datos existentes a BigQuery.

    • Para cada app vinculada, esta exportación incluye una tabla por lotes que contiene los datos de la sincronización diaria.

    • Puedes programar de forma manual el reabastecimiento de datos para la tabla por lotes hasta los últimos 30 días o para la fecha más reciente en la que habilitaste la exportación a BigQuery (la opción que sea más reciente).

    Ten en cuenta que, si habilitaste la exportación de datos de Crashlytics antes de mediados de octubre de 2024, también puedes reabastecer los datos 30 días antes del día en que habilitaste la exportación.

  • Lo siguiente se aplica si habilitas la exportación mediante transmisión a BigQuery.

    • Cada app vinculada también tendrá su propia tabla en tiempo real que contiene datos que se actualizan constantemente (además de la tabla por lotes de la app para la exportación por lotes diaria).

    • Después de habilitar la transmisión, es posible que los datos tarden hasta 1 hora en comenzar a transmitirse.



Consultas de ejemplo

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(_PARTITIONTIME,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.event_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(_PARTITIONTIME,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 Crashlytics personalizada llamada current_level y actualizarla cada vez que un 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 DESC

Ejemplo 6: Extracción del ID 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:

  1. Habilitar la exportación de datos de Google Analytics a BigQuery. Consulta Exporta datos de proyectos a BigQuery.

  2. 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");
    
  3. 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 y ANDROID).

    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;



Visualiza los datos exportados de Crashlytics con Looker Studio

Looker Studio convierte tus conjuntos de datos de Crashlytics en BigQuery en informes que son más fáciles de leer y compartir, y completamente personalizables.

Para obtener más información sobre cómo usar Looker Studio, consulta su guía de bienvenida.

Usa una plantilla de informe de Crashlytics

Looker Studio cuenta con un informe de muestra para Crashlytics que incluye un conjunto completo de dimensiones y métricas del esquema de Crashlytics de BigQuery exportado. Si habilitaste la exportación de flujo de Crashlytics a BigQuery, puedes ver esos datos en la página Tendencias en tiempo real de la plantilla de Looker Studio. Puedes usar la muestra como plantilla para crear con rapidez informes y visualizaciones nuevos en función de los datos de fallas sin procesar de tu propia app:

  1. Abre la plantilla del panel de Crashlytics Looker Studio.

  2. Haz clic en Utilizar plantilla, en la esquina superior derecha.

  3. En el menú desplegable Fuente de datos nueva, selecciona Crear fuente de datos nueva.

  4. Haz clic en Seleccionar en la tarjeta de BigQuery.

  5. Selecciona una tabla que contenga los datos exportados de Crashlytics; para ello, elige Mis proyectos > PROJECT_ID > firebase_crashlytics > TABLE_NAME.

    Tu tabla por lotes siempre está disponible para seleccionarla. Si está habilitada la exportación de flujos de Crashlytics a BigQuery, puedes seleccionar tu tabla en tiempo real.

  6. Ve a Configuración y establece el nivel de la plantilla de Crashlytics como Predeterminado.

  7. Haz clic en Conectar para crear la nueva fuente de datos.

  8. Haz clic en Agregar al informe para volver a la plantilla de Crashlytics.

  9. Por último, haz clic en Crear informe para crear tu copia de la plantilla del panel de CrashlyticsLooker Studio.



Comprende el esquema en BigQuery

Firebase crea conjuntos de datos nuevos en BigQuery para tus datos exportados:

Crashlytics conjunto de datos

Los datos de Crashlytics se exportan a un conjunto de datos BigQuery llamado firebase_crashlytics. El conjunto de datos abarca el proyecto completo, incluso si tiene varias apps.

Tablas

De forma predeterminada, Firebase crea tablas individuales dentro del conjunto de datos Crashlytics para cada app de tu proyecto que esté vinculada a BigQuery.

Las tablas se nombran según el identificador de la app (con los puntos convertidos en guiones bajos) y se les agrega la plataforma de la app (_IOS o _ANDROID). Por ejemplo, los datos de una app para Android con el nombre de paquete com.google.test estarían en una tabla llamada com_google_test_ANDROID.

  • Si está habilitada la exportación mediante transmisión a BigQuery, los datos también se transmitirán en tiempo real a una tabla a la que se agregará _REALTIME (por ejemplo, com_google_test_ANDROID_REALTIME).

  • Cada fila de la tabla representa un evento que ocurrió en la app, incluidas las fallas, los errores recuperables y los ANR.

  • Las tablas contienen un conjunto estándar de datos de Crashlytics, además de las claves personalizadas de Crashlytics que definas en tu app.

Filas

Cada fila de una tabla representa un error que encontró la aplicación.

Columnas

Las columnas de una tabla son idénticas para las fallas, los errores recuperables y los ANR.

  • Si está habilitada la exportación mediante transmisión a BigQuery, la tabla en tiempo real tendrá las mismas columnas que la tabla por lotes.

  • Es posible que tengas columnas en filas que representen eventos que no tienen seguimientos de pila.

A continuación, se indican las columnas de la tabla para los datos de Crashlytics exportados:

Nombre del campo Tipo de datos Descripción
app_orientation STRING Por ejemplo, PORTRAIT, LANDSCAPE, FACE_UP, FACE_DOWN, etcétera.
application RECORD La app que generó el evento
application.build_version STRING La versión de compilación de la app
application.display_version STRING
blame_frame RECORD El marco identificado como la causa raíz de la falla o el error
blame_frame.address INT64 La dirección en la imagen binaria que contiene el código
, no establecida para los marcos de Java
blame_frame.blamed BOOLEAN Si Crashlytics determinó que este marco es la causa de la falla o el error
blame_frame.file STRING El nombre del archivo del marco
blame_frame.library STRING El nombre visible de la biblioteca que contiene el marco
blame_frame.line INT64 El número de línea del archivo del marco
blame_frame.offset INT64 El desplazamiento de bytes hacia la imagen binaria que contiene el código
, no establecido para las excepciones de Java
blame_frame.owner STRING Por ejemplo, DEVELOPER, VENDOR, RUNTIME, PLATFORM o SYSTEM
blame_frame.symbol STRING El símbolo procesado, o sin procesar en caso de que no sea posible
breadcrumbs REPEATED RECORD Rutas de navegación de Google Analytics con marcas de tiempo, si están habilitadas
breadcrumbs.name STRING El nombre asociado con la ruta de navegación
breadcrumbs.params REPEATED RECORD Parámetros asociados con la ruta de navegación
breadcrumbs.params.key STRING Una clave de parámetro asociada con la ruta de navegación
breadcrumbs.params.value STRING Un valor de parámetro asociado con la ruta de navegación
breadcrumbs.timestamp TIMESTAMP La marca de tiempo asociada con la ruta de navegación
bundle_identifier STRING El identificador único de la app tal como se registró en el proyecto de Firebase (por ejemplo, com.google.gmail)
En el caso de las apps de la plataforma de Apple, este es el ID del paquete de la app.
En el caso de las apps para Android, este es el nombre del paquete de la app.
crashlytics_sdk_versions STRING La versión del SDK de Crashlytics que generó el evento
custom_keys REPEATED RECORD Pares clave-valor definidos por el desarrollador
custom_keys.key STRING Una clave definida por el desarrollador
custom_keys.value STRING Un valor definido por el desarrollador
device RECORD El dispositivo en el que ocurrió el evento
device_orientation STRING Por ejemplo, PORTRAIT, LANDSCAPE, FACE_UP, FACE_DOWN, etcétera.
device.architecture STRING Por ejemplo, X86_32, X86_64, ARMV7, ARM64, ARMV7S o ARMV7K
device.manufacturer STRING El fabricante del dispositivo
device.model STRING El modelo del dispositivo
error REPEATED RECORD (Solo para apps de Apple) Errores recuperables
error_type STRING El tipo de error del evento (por ejemplo, FATAL, NON_FATAL, ANR, etcétera).
error.blamed BOOLEAN Si Crashlytics determinó que este marco es la causa del error
error.code INT64 Código de error asociado con el NSError personalizado y registrado de la app
error.frames REPEATED RECORD Los marcos del seguimiento de pila
error.frames.address INT64 La dirección en la imagen binaria que contiene el código
error.frames.blamed BOOLEAN Si Crashlytics determinó que este marco es la causa del error
error.frames.file STRING El nombre del archivo del marco
error.frames.library STRING El nombre visible de la biblioteca que contiene el marco
error.frames.line INT64 El número de línea del archivo del marco
error.frames.offset INT64 El desplazamiento de bytes hacia la imagen binaria que contiene el código
error.frames.owner STRING Por ejemplo, DEVELOPER, VENDOR, RUNTIME, PLATFORM o SYSTEM
error.frames.symbol STRING El símbolo procesado, o sin procesar en caso de que no sea posible
error.queue_name STRING La cola en la que se ejecutaba el subproceso
error.subtitle STRING El subtítulo del subproceso
error.title STRING El título del subproceso
event_id STRING El ID único del evento
event_timestamp TIMESTAMP Cuándo ocurrió el evento
exceptions REPEATED RECORD (Solo para Android) Excepciones que ocurrieron durante este evento. Las excepciones anidadas se presentan en orden cronológico inverso, lo que significa que el último registro es la primera excepción que se lanza
exceptions.blamed BOOLEAN Verdadero si Crashlytics determina que la excepción es responsable del error o la falla
exceptions.exception_message STRING Un mensaje asociado con la excepción
exceptions.frames REPEATED RECORD Los marcos asociados con la excepción
exceptions.frames.address INT64 La dirección en la imagen binaria que contiene el código
, no establecida para los marcos de Java
exceptions.frames.blamed BOOLEAN Si Crashlytics determinó que este marco es la causa de la falla o el error
exceptions.frames.file STRING El nombre del archivo del marco
exceptions.frames.library STRING El nombre visible de la biblioteca que contiene el marco
exceptions.frames.line INT64 El número de línea del archivo del marco
exceptions.frames.offset INT64 El desplazamiento de bytes hacia la imagen binaria que contiene el código
, no establecido para las excepciones de Java
exceptions.frames.owner STRING Por ejemplo, DEVELOPER, VENDOR, RUNTIME, PLATFORM o SYSTEM
exceptions.frames.symbol STRING El símbolo procesado, o sin procesar en caso de que no sea posible
exceptions.nested BOOLEAN Verdadero para todas las excepciones, excepto la última que se lanza (es decir, el primer registro).
exceptions.subtitle STRING El subtítulo del subproceso
exceptions.title STRING El título del subproceso
exceptions.type STRING El tipo de excepción (por ejemplo, java.lang.IllegalStateException)
firebase_session_id STRING Es el ID generado automáticamente para la sesión de Firebase asignada al evento de Crashlytics.
installation_uuid STRING Un ID que identifica una instalación única de una app y un dispositivo
is_fatal BOOLEAN Determina si la app falló
issue_id STRING El problema asociado con el evento
logs REPEATED RECORD Mensajes de registro con marcas de tiempo que genera el registrador de Crashlytics, si se encuentra habilitado
logs.message STRING El mensaje registrado
logs.timestamp TIMESTAMP Cuándo se creó el registro
memory RECORD El estado de la memoria del dispositivo
memory.free INT64 Bytes de memoria restantes
memory.used INT64 Bytes de memoria utilizados
operating_system RECORD Los detalles del SO en el dispositivo
operating_system.device_type STRING El tipo de dispositivo (por ejemplo, MOBILE, TABLET, TV, etcétera), también conocido como "categoría de dispositivo"
operating_system.display_version STRING La versión del SO en el dispositivo
operating_system.modification_state STRING Si el dispositivo se modificó (por ejemplo, una app con jailbreak es MODIFIED y una app con permisos de administrador es UNMODIFIED)
operating_system.name STRING El nombre del SO en el dispositivo
operating_system.type STRING (Solo para apps de Apple) El tipo de SO que se ejecuta en el dispositivo (por ejemplo, IOS, MACOS, etcétera).
platform STRING La plataforma de la app tal como se registró en el proyecto de Firebase (valores válidos: IOS o ANDROID)
process_state STRING BACKGROUND o FOREGROUND
storage RECORD El almacenamiento continuo del dispositivo
storage.free INT64 Bytes de almacenamiento restantes
storage.used INT64 Bytes de almacenamiento utilizados
threads REPEATED RECORD Subprocesos presentes cuando ocurrió el evento
threads.blamed BOOLEAN Si Crashlytics determinó que este marco es la causa de la falla o el error
threads.code INT64 (Solo para apps de Apple) Código de error del NSError personalizado y registrado de la aplicación
threads.crash_address INT64 La dirección del indicador que provocó la falla en la app, solo presente en los subprocesos nativos con fallas
threads.crashed BOOLEAN Si el subproceso falló
threads.frames REPEATED RECORD Los marcos del subproceso
threads.frames.address INT64 La dirección en la imagen binaria que contiene el código
threads.frames.blamed BOOLEAN Si Crashlytics determinó que este marco es la causa del error
threads.frames.file STRING El nombre del archivo del marco
threads.frames.library STRING El nombre visible de la biblioteca que contiene el marco
threads.frames.line INT64 El número de línea del archivo del marco
threads.frames.offset INT64 El desplazamiento de bytes hacia la imagen binaria que contiene el código
threads.frames.owner STRING Por ejemplo, DEVELOPER, VENDOR, RUNTIME, PLATFORM o SYSTEM
threads.frames.symbol STRING El símbolo procesado, o sin procesar en caso de que no sea posible
threads.queue_name STRING (Solo para apps de Apple) La fila en la que se ejecutaba el subproceso
threads.signal_code STRING El código del indicador que provocó la falla en la app, solo presente en los subprocesos nativos con fallas
threads.signal_name STRING El nombre de la señal que provocó la falla en la app, solo presente en los subprocesos nativos con fallas
threads.subtitle STRING El subtítulo del subproceso
threads.thread_name STRING El nombre del subproceso
threads.title STRING El título del subproceso
unity_metadata.debug_build BOOLEAN Si se trata de una compilación de depuración
unity_metadata.graphics_copy_texture_support STRING Corresponde a la compatibilidad con la copia de texturas gráficas, como se define en la API de Unity
unity_metadata.graphics_device_id INT64 Corresponde al identificador del dispositivo gráfico
unity_metadata.graphics_device_name STRING Corresponde al nombre del dispositivo gráfico
unity_metadata.graphics_device_type STRING Corresponde al tipo de dispositivo gráfico
unity_metadata.graphics_device_vendor_id INT64 Corresponde al identificador del proveedor del procesador de gráficos
unity_metadata.graphics_device_vendor STRING Corresponde al proveedor del dispositivo gráfico
unity_metadata.graphics_device_version STRING Corresponde a la versión del dispositivo gráfico
unity_metadata.graphics_max_texture_size INT64 Corresponde al tamaño máximo dedicado a renderizar texturas
unity_metadata.graphics_memory_size_mb INT64 Corresponde a la memoria gráfica en MB
unity_metadata.graphics_render_target_count INT64 Corresponde a la cantidad de objetivos de renderización gráfica
unity_metadata.graphics_shader_level INT64 Corresponde al nivel de sombreador de los gráficos
unity_metadata.processor_count INT64 Corresponde a la cantidad de procesadores (núcleos)
unity_metadata.processor_frequency_mhz INT64 Corresponde a la frecuencia de los procesadores en MHz
unity_metadata.processor_type STRING Corresponde al tipo de procesador
unity_metadata.screen_refresh_rate_hz INT64 Corresponde a la frecuencia de actualización de la pantalla en Hz
unity_metadata.screen_resolution_dpi STRING Corresponde al DPI de la pantalla como número de punto flotante
unity_metadata.screen_size_px STRING Corresponde al tamaño de la pantalla en píxeles, con el formato de ancho × alto
unity_metadata.system_memory_size_mb INT64 Corresponde al tamaño de la memoria del sistema en MB
unity_metadata.unity_version STRING Corresponde a la versión de Unity que se ejecuta en este dispositivo
user RECORD (Opcional) Información recopilada sobre el usuario de la app
user.email STRING (Opcional) La dirección de correo electrónico del usuario
user.id STRING (Opcional) Un ID específico de la app asociado con el usuario
user.name STRING (Opcional) El nombre del usuario
variant_id STRING La variante del problema asociada con este evento
Ten en cuenta que no todos los eventos tienen una variante de problema asociada.

Conjunto de datos de sesiones de Firebase

Los datos de sesiones de Firebase se exportan a un conjunto de datos de BigQuery llamado firebase_sessions. El conjunto de datos abarca el proyecto completo, incluso si tiene varias apps.

Tablas

De forma predeterminada, Firebase crea tablas individuales dentro del conjunto de datos de sesiones de Firebase para cada app de tu proyecto que esté vinculada a BigQuery.

Las tablas se nombran según el identificador de la app (con los puntos convertidos en guiones bajos) y se les agrega la plataforma de la app (_IOS o _ANDROID). Por ejemplo, los datos de una app para Android con el nombre de paquete com.google.test estarían en una tabla llamada com_google_test_ANDROID.

Filas

Cada fila de una tabla representa un evento de sesión que ocurrió.

Columnas

Si está habilitada la exportación mediante transmisión a BigQuery, la tabla en tiempo real tendrá las mismas columnas que la tabla por lotes.

A continuación, se indican las columnas de la tabla para los datos de sesiones de Firebase exportados:

Nombre del campo Tipo de datos Descripción
instance_id STRING Es el ID de instalación de Firebase (FID) del dispositivo. Identifica una instalación única de una app y un dispositivo
session_id STRING ID único de esta sesión
first_session_id STRING Es el primer ID de una serie de sesiones en las que se encuentra esta sesión desde que se inició la app en frío. Se puede usar para agrupar todas las sesiones que se produjeron desde un inicio en frío. Si esta es la primera sesión, este campo será igual que session_id.
session_index INTEGER Es el orden en el que se inició esta sesión después de que se inició la app en frío. En la primera sesión después de un inicio en frío, este valor será 0. El índice se incrementará cada vez que se genere una sesión sin que se produzca un inicio en frío (por ejemplo, después de 30 minutos de inactividad).
event_type STRING Es el tipo de evento que ocurrió en la sesión (por ejemplo, SESSION_START).
event_timestamp TIMESTAMP La hora en que ocurrió el evento
received_timestamp TIMESTAMP Fecha y hora en que el servidor recibió el evento del dispositivo
performance_data_collection_enabled BOOLEAN Indica si la recopilación de datos del SDK de Firebase Performance Monitoring estaba habilitada en el momento de la sesión.
crashlytics_data_collection_enabled BOOLEAN Indica si la recopilación de datos del SDK de Firebase Crashlytics estaba habilitada en el momento de la sesión.
application RECORD Describe la aplicación
application.build_version STRING La versión de compilación de la aplicación (por ejemplo, 1523456)
application.display_version STRING La versión de la pantalla de la aplicación (por ejemplo, 4.1.7)
device RECORD El dispositivo en el que ocurrió el evento
device.model STRING El modelo del dispositivo
device.manufacturer STRING Es el fabricante del dispositivo. En el caso de las apps para plataformas de Apple, será NULL.
operating_system RECORD Describe el SO del dispositivo.
operating_system.display_version STRING La versión de pantalla del sistema operativo (por ejemplo, 10.2.1)
operating_system.name STRING El nombre del sistema operativo
operating_system.type STRING Es el tipo de sistema operativo (por ejemplo, IOS). Este campo solo se configura para dispositivos Apple.
operating_system.device_type STRING El tipo de dispositivo (por ejemplo, MOBILE, TABLET, TV)



Actualiza a la nueva infraestructura de exportación

A mediados de octubre de 2024, Crashlytics lanzó una nueva infraestructura para la exportación por lotes de datos de Crashlytics a BigQuery.

Todos los proyectos de Firebase se actualizarán automáticamente a la nueva infraestructura de exportación por lotes a partir del 15 de septiembre de 2025. Puedes actualizar antes de esta fecha, pero asegúrate de que tus tablas por lotes de BigQuery cumplan con los requisitos para la actualización.

Puedes actualizar a la nueva infraestructura, pero asegúrate de que tus tablas por lotes de BigQuery cumplan con los requisitos para la actualización.

Determina si estás en la infraestructura nueva

Si habilitaste la exportación por lotes a mediados de octubre de 2024 o después de esa fecha, tu proyecto de Firebase usa automáticamente la nueva infraestructura de exportación.

Para verificar qué infraestructura usa tu proyecto, vete a la consola de Google Cloud y, si la "configuración de transferencia de datos" está etiquetada como Firebase Crashlytics with Multi-Region Support, entonces tu proyecto usa la nueva infraestructura de exportación.

Diferencias importantes entre la infraestructura de exportación anterior y la nueva

  • La nueva infraestructura admite ubicaciones de conjuntos de datos de Crashlytics fuera de Estados Unidos.

    • Exportación habilitada antes de mediados de octubre de 2024 y actualización a la nueva infraestructura de exportación: Ahora puedes cambiar la ubicación de la exportación de datos de forma opcional.

    • Exportación habilitada a mediados de octubre de 2024 o después: Se te solicitó durante la configuración que seleccionaras una ubicación para la exportación de datos.

  • La nueva infraestructura no admite reabastecimientos de datos de antes de que habilitaras la exportación.

    • La infraestructura anterior admitía el reabastecimiento hasta 30 días antes de la fecha en la que habilitaste la exportación.

    • La infraestructura nueva admite reabastecimientos hasta los últimos 30 días o la fecha más reciente en la que habilitaste la exportación a BigQuery (la opción que sea más reciente).

  • La nueva infraestructura asigna nombres a las tablas por lotes de BigQuery con los identificadores establecidos para tus apps de Firebase en tu proyecto de Firebase.

    • La infraestructura anterior escribía datos en tablas por lotes con nombres basados en los IDs o nombres de los paquetes en el objeto binario de tu app.

    • La nueva infraestructura escribe datos en tablas por lotes con nombres basados en los IDs o los nombres de los paquetes establecidos para tus apps de Firebase registradas en tu proyecto de Firebase.

Paso 1: Requisitos previos para la actualización

  1. Verifica que tus tablas por lotes de BigQuery existentes usen identificadores que coincidan con los IDs o los nombres de los paquetes establecidos para tus apps de Firebase registradas en tu proyecto de Firebase. Si no coinciden, es posible que experimentes interrupciones en los datos de tu lote exportado. La mayoría de los proyectos estarán en un estado adecuado y compatible, pero es importante verificarlo antes de actualizar.

    • Puedes encontrar todas las apps de Firebase registradas en tu proyecto de Firebase en la consola de Firebase. Para ello, ve a Configuración del proyecto en y, luego, desplázate hasta la tarjeta Tus apps para ver todas tus apps de Firebase y su información.

    • Puedes encontrar todas tus tablas por lotes de BigQuery en la página BigQuery de la consola de Google Cloud.

    Por ejemplo, estos son los estados ideales en los que no tendrás ningún problema para actualizar:

    • Tienes una tabla por lotes llamada com_yourcompany_yourproject_IOS y una app para iOS+ de Firebase con el ID del paquete com.yourcompany.yourproject registrada en tu proyecto de Firebase.

    • Tienes una tabla por lotes llamada com_yourcompany_yourproject_ANDROID y una app para Android de Firebase con el nombre de paquete com.yourcompany.yourproject registrada en tu proyecto de Firebase.

  2. Si tienes nombres de tablas por lotes que no coinciden con los identificadores establecidos para tus apps de Firebase registradas, entonces sigue las instrucciones más adelante en esta página antes de actualizar manualmente o antes del 15 de septiembre de 2025 para evitar interrupciones en la exportación por lotes.

Paso 2: Actualiza manualmente a la nueva infraestructura

Si habilitaste la exportación por lotes antes de mediados de octubre de 2024, puedes actualizar manualmente a la nueva infraestructura. Para ello, desactiva y vuelve a activar la exportación de datos de Crashlytics en la consola de Firebase.

Estos son los pasos detallados:

  1. En Firebase console, ve a la página Integraciones.

  2. En la tarjeta de BigQuery, haz clic en Administrar.

  3. Desactiva el control deslizante de Crashlytics para inhabilitar la exportación. Cuando se te solicite, confirma que quieres que se detenga la exportación de datos.

  4. Vuelve a activar inmediatamente el control deslizante Crashlytics para volver a habilitar la exportación. Cuando se te solicite, confirma que quieres exportar datos.

    La exportación de datos de Crashlytics a BigQuery ahora usa la nueva infraestructura de exportación.

El nombre de la tabla por lotes existente no coincide con el identificador de tu app de Firebase