Catch up on everything announced at Firebase Summit, and learn how Firebase can help you accelerate app development and run your app with confidence. Learn More

Exportar datos de Firebase Crashlytics a BigQuery

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

Puede exportar sus datos de Crashlytics a BigQuery para un análisis más detallado. BigQuery le permite analizar los datos con BigQuery SQL, exportarlos a otro proveedor de la nube y usarlos para visualización y paneles personalizados con Google Data Studio.

Habilitar la exportación de BigQuery

  1. Vaya a la página Integraciones en la consola de Firebase.
  2. En la tarjeta de BigQuery , haga clic en Enlace .
  3. Siga las instrucciones en pantalla para habilitar BigQuery.

Cuando vinculas tu proyecto a BigQuery:

  • Firebase configura sincronizaciones diarias de sus datos desde su proyecto de Firebase a BigQuery.
  • De manera predeterminada, todas las aplicaciones de su proyecto están vinculadas a BigQuery y cualquier aplicación que agregue más tarde al proyecto se vincula automáticamente a BigQuery. Puede administrar qué aplicaciones envían datos .
  • Firebase exporta una copia de sus datos existentes a BigQuery. Para cada aplicación vinculada, esto incluye una tabla de lotes que contiene los datos de la sincronización diaria.
  • Si habilita la exportación de transmisión de Crashlytics BigQuery, todas las aplicaciones vinculadas también tendrán una tabla en tiempo real que contiene datos que se actualizan constantemente.

Para desactivar la exportación de BigQuery, desvincula tu proyecto en Firebase console.

¿Qué datos se exportan a BigQuery?

Los datos de Firebase Crashlytics se exportan a un conjunto de datos de BigQuery denominado firebase_crashlytics . De manera predeterminada, se crearán tablas individuales dentro del conjunto de datos de Crashlytics para cada aplicación en su proyecto. Firebase nombra las tablas según el identificador del paquete de la aplicación, con puntos convertidos en guiones bajos y un nombre de plataforma adjunto al final.

Por ejemplo, los datos de una aplicación con el ID com.google.test estarían en una tabla denominada com_google_test_ANDROID . Esta tabla de lotes se actualiza una vez al día. Si habilita la exportación de transmisión de Crashlytics BigQuery, los datos de Firebase Crashlytics también se transmitirán en tiempo real a com_google_test_ANDROID_REALTIME .

Cada fila de una tabla representa un evento que ocurrió en la aplicación, incluidos bloqueos, errores no fatales y ANR.

Habilitar la exportación de streaming de Crashlytics BigQuery

Puede transmitir sus datos de Crashlytics en tiempo real con BigQueryStreaming . Puede usarlo para cualquier propósito que requiera datos en vivo, como presentar información en un tablero en vivo, ver una implementación en vivo o monitorear problemas de aplicaciones que activan alertas y flujos de trabajo personalizados.

La exportación de streaming de Crashlytics BigQuery no está disponible para la zona de pruebas de BigQuery.

Cuando habilite la exportación de transmisión de Crashlytics BigQuery, además de la tabla por lotes, tendrá una tabla en tiempo real. Estas son las diferencias que debe tener en cuenta entre las tablas:

Tabla de lotes Tabla en tiempo real
  • Datos exportados una vez al día
  • Eventos almacenados de forma duradera antes de la escritura por lotes en BigQuery
  • Se puede reabastecer hasta 90 días antes
  • Datos exportados en tiempo real
  • No hay relleno disponible

La tabla de lotes es ideal para el análisis a largo plazo y la identificación de tendencias a lo largo del tiempo porque almacenamos eventos de forma duradera antes de escribirlos y se pueden volver a llenar en la tabla hasta por 90 días. Cuando escribimos datos en su tabla en tiempo real, los escribimos inmediatamente en BigQuery, por lo que es ideal para paneles en vivo y alertas personalizadas. Estas dos tablas se pueden combinar con una consulta de combinación para obtener los beneficios de ambas. Consulte el ejemplo de consulta 9 a continuación.

De forma predeterminada, la tabla en tiempo real tiene un tiempo de caducidad de partición de 30 días. Para obtener información sobre cómo modificar esto, consulte Actualización de la caducidad de la partición .

Habilitar la transmisión de Crashlytics BigQuery

Para habilitar la transmisión, vaya a la sección Crashlytics de la página de integraciones de BigQuery y seleccione la casilla de verificación Incluir transmisión .

Plantilla de estudio de datos

Para habilitar datos en tiempo real en su plantilla de Data Studio, siga las instrucciones en Visualización de datos de Crashlytics exportados con Data Studio .

Puntos de vista

Puede convertir las consultas de ejemplo a continuación en vistas mediante la interfaz de usuario de BigQuery. Consulte Creación de vistas para obtener instrucciones detalladas.

¿Qué se puede hacer con los datos exportados?

Las exportaciones de BigQuery contienen datos de fallas sin procesar, incluidos el tipo de dispositivo, el sistema operativo, las excepciones (aplicaciones de Android) o los errores (aplicaciones de Apple) y los registros de Crashlytics, así como otros datos.

Trabajar con datos de Firebase Crashlytics en BigQuery

Los siguientes ejemplos muestran las consultas que puede ejecutar en sus datos de Crashlytics. Estas consultas generan informes que no están disponibles en el panel de control de Crashlytics.

Ejemplos de consultas de Crashlytics

Los siguientes ejemplos demuestran cómo generar informes que agregan datos de eventos de bloqueo en resúmenes más fáciles de entender.

Ejemplo 1: bloqueos por día

Después de trabajar para corregir tantos errores como sea posible, un desarrollador líder cree que su equipo finalmente está listo para lanzar su nueva aplicación para compartir fotos. Antes de hacerlo, quieren verificar la cantidad de bloqueos por día durante el último mes, para asegurarse de que su bug-bash hizo que la aplicación fuera más estable con el tiempo:

SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
 `projectId.firebase_crashlytics.package_name_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT 30;

Ejemplo 2: encontrar los bloqueos más generalizados

Para priorizar adecuadamente los planes de producción, un gerente de proyecto reflexiona sobre cómo señalar los 10 bloqueos más generalizados en su producto. Producen una consulta que proporciona los puntos de datos pertinentes:

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
  `projectId.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 3: Los 10 mejores dispositivos que fallan

¡El otoño es la nueva temporada de teléfonos! Un desarrollador sabe que eso también significa que es una nueva temporada de problemas específicos del dispositivo. Para adelantarse a las preocupaciones de compatibilidad que se avecinan, elaboraron una consulta que identifica los 10 dispositivos que experimentaron la mayor cantidad de bloqueos en la última semana:

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `projectId.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 4: filtrar por clave personalizada

Un desarrollador de juegos quiere saber qué nivel de su juego experimenta la mayor cantidad de bloqueos. Para ayudarlos a rastrear esa estadística, configuran una clave personalizada de Crashlytics current_level y la actualizan cada vez que el usuario alcanza un nuevo nivel.

C objetivo

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Rápido

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

Java

Crashlytics.setInt("current_level", 3);

Con esa clave en su exportación de BigQuery, luego escriben una consulta para informar la distribución de los valores de current_level asociados con cada evento de bloqueo:

SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

Ejemplo 5: extracción de ID de usuario

Un desarrollador tiene una aplicación en acceso anticipado. A la mayoría de sus usuarios les encanta, pero tres han experimentado una cantidad inusual de fallas. Para llegar al fondo del problema, escriben una consulta que extrae todos los eventos de bloqueo para esos usuarios, utilizando sus ID de usuario:

SELECT *
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  user.id IN ("userid1", "userid2", "userid3")
ORDER BY
  user.id
 

Ejemplo 6: Encuentre todos los usuarios que enfrentan un problema de bloqueo en particular

Un desarrollador ha publicado un error crítico a un grupo de probadores beta. El equipo pudo utilizar la consulta del Ejemplo 2 anterior para identificar el ID de problema de bloqueo específico. Ahora les gustaría ejecutar una consulta para extraer la lista de usuarios de la aplicación que se vieron afectados por este bloqueo:

SELECT user.id as user_id
FROM
  `projectId.firebase_crashlytics.package_name_ANDROID`
WHERE
  issue_id = "YOUR_ISSUE_ID"
  AND application.display_version = ""
  AND user.id != ""
ORDER BY
  user.id;

Ejemplo 7: número de usuarios afectados por un problema de bloqueo, desglosado por país

Ahora, el equipo ha detectado un error crítico durante el lanzamiento de una nueva versión. Pudieron usar la consulta del Ejemplo 2 anterior para identificar el ID de problema de bloqueo específico. Al equipo ahora le gustaría ver si este bloqueo se ha extendido a los usuarios en diferentes países del mundo.

Para escribir esta consulta, el equipo deberá:

  1. Habilite las exportaciones de BigQuery para Google Analytics. Consulta Exportar datos de proyectos a BigQuery .

  2. Actualice su aplicación para pasar una ID de usuario tanto al SDK de Google Analytics como al SDK de Crashlytics.

    C objetivo
    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    
    Rápido
    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    
    Java
    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Escriba una consulta que utilice el campo ID de usuario para unir eventos en el conjunto de datos de BigQuery de Google Analytics con fallas en el conjunto de datos de BigQuery de Crashlytics:

    SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted
    FROM `projectId.firebase_crashlytics.package_name_ANDROID` c
    INNER JOIN  `projectId.analytics_YOUR_TABLE.events_*` a on c.user.id = a.user_id
    WHERE
     c.issue_id = "YOUR_ISSUE_ID"
     AND a._TABLE_SUFFIX BETWEEN '20190101'
     AND '20200101'
    GROUP BY
     c.issue_id,
     a.geo.country,
     c.user.id
    

Ejemplo 8: Los 5 problemas principales hasta el momento hoy

Requiere habilitar la exportación de streaming de Crashlytics BigQuery

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM
  `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
WHERE
  DATE(event_timestamp) = CURRENT_DATE()
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Ejemplo 9: 5 problemas principales desde el FECHA, incluido el día de hoy

Requiere habilitar la exportación de streaming de Crashlytics BigQuery.

En este ejemplo, combinamos tablas por lotes y en tiempo real para agregar información en tiempo real a los datos por lotes confiables. Dado que event_id es una clave principal, podemos usar DISTINCT event_id para deduplicar cualquier evento común de las dos tablas.

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `your_project.firebase_crashlytics.package_name_ANDROID`)
WHERE
  event_timestamp >= "2020-01-13"
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Comprender el esquema de Firebase Crashlytics en BigQuery

Cuando vincula Crashlytics con BigQuery, Firebase exporta eventos recientes (bloqueos, errores no fatales y ANR), incluidos eventos de hasta dos días antes del enlace, con la opción de reposición hasta noventa días.

Desde ese momento hasta que deshabilites el enlace, Firebase exporta eventos de Crashlytics diariamente. Los datos pueden tardar unos minutos en estar disponibles en BigQuery después de cada exportación.

conjuntos de datos

Firebase Crashlytics crea un nuevo conjunto de datos en BigQuery para los datos de Crashlytics. El conjunto de datos cubre todo su proyecto, incluso si tiene varias aplicaciones.

Mesas

Firebase Crashlytics crea una tabla en el conjunto de datos para cada aplicación de su proyecto, a menos que haya optado por no exportar datos para esa aplicación. Firebase nombra las tablas según el identificador del paquete de la aplicación, con puntos convertidos en guiones bajos y un nombre de plataforma adjunto al final.

Por ejemplo, los datos de una aplicación de Android con el ID com.google.test estarían en una tabla denominada com_google_test_ANDROID y los datos en tiempo real (si están habilitados) estarían en una tabla denominada com_google_test_ANDROID_REALTIME

Las tablas contienen un conjunto estándar de datos de Crashlytics además de las claves personalizadas de Crashlytics definidas por los desarrolladores.

Filas

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

columnas

Las columnas de una tabla son idénticas para bloqueos, errores no fatales y ANR. Si la exportación de streaming de Crashlytics BigQuery está habilitada, la tabla en tiempo real tendrá las mismas columnas que la tabla por lotes. Las columnas dentro de la exportación se enumeran a continuación.

Sin rastros de pila

Columnas presentes en filas que representan eventos sin seguimientos de pila.

Nombre del campo Tipo de datos Descripción
plataforma CUERDA Aplicaciones de Apple o Android
identificador_paquete CUERDA El ID del paquete, por ejemplo, com.google.gmail
evento_id CUERDA Una identificación única para el evento.
es_fatal BOOLEANO Si la aplicación se bloqueó
tipo_de_error CUERDA Tipo de error del evento (FATAL, NON_FATAL, ANR)
id_problema CUERDA Un problema asociado con el evento.
event_timestamp MARCA DE TIEMPO Cuando ocurrió el evento
dispositivo REGISTRO El dispositivo en el que ocurrió el evento
fabricante.del.dispositivo CUERDA El fabricante del dispositivo
dispositivo.modelo CUERDA El modelo del dispositivo
dispositivo.arquitectura CUERDA X86_32, X86_64, ARMV7, ARM64, ARMV7S o ARMV7K
memoria REGISTRO El estado de la memoria del dispositivo.
memoria usada INT64 Bytes de memoria utilizados
libre de memoria INT65 Bytes de memoria restantes
almacenamiento REGISTRO El almacenamiento persistente del dispositivo
almacenamiento.usado INT64 Bytes de almacenamiento utilizados
almacenamiento.gratis INT64 Bytes de almacenamiento restantes
sistema operativo REGISTRO Los detalles del sistema operativo del dispositivo
sistema_operativo.display_version CUERDA La versión del sistema operativo
sistema_operativo.nombre CUERDA El nombre del sistema operativo
sistema_operativo.modificación_estado CUERDA MODIFICADO o SIN MODIFICAR, es decir, si el dispositivo ha sido jailbreak/rooteado
tipo_de_sistema_operativo CUERDA El tipo de sistema operativo en el dispositivo. Por ejemplo, IOS, MACOS
sistema_operativo.tipo_de_dispositivo CUERDA El tipo de dispositivo. Por ejemplo, MÓVIL, TABLETA, TV
solicitud REGISTRO La aplicación que generó el evento.
application.build_version CUERDA La versión de compilación de la aplicación
application.display_version CUERDA
usuario REGISTRO Opcional: información recopilada sobre el usuario de la aplicación
nombre de usuario CUERDA Opcional: el nombre del usuario
usuario.email CUERDA Opcional: la dirección de correo electrónico del usuario
usuario.id CUERDA Opcional: una identificación específica de la aplicación asociada con el usuario
llaves_personalizadas REGISTRO REPETIDO Pares clave-valor definidos por el desarrollador
custom_keys.key CUERDA Una clave definida por el desarrollador
valor_claves_personalizadas CUERDA Un valor definido por el desarrollador
uuid_instalación CUERDA Una identificación que identifica una aplicación única y una instalación de dispositivo
crashlytics_sdk_versions CUERDA La versión del SDK de Crashlytics que generó el evento
aplicación_orientación CUERDA RETRATO, PAISAJE, BOCA ARRIBA o BOCA ABAJO
orientación_del_dispositivo CUERDA RETRATO, PAISAJE, BOCA ARRIBA o BOCA ABAJO
proceso_estado CUERDA FONDO o PRIMER PLANO
registros REGISTRO REPETIDO Mensajes de registro con marca de tiempo generados por el registrador de Crashlytics, si está habilitado
registros.marca de tiempo MARCA DE TIEMPO Cuando se hizo el registro
registros.mensaje CUERDA El mensaje registrado
migas de pan REGISTRO REPETIDO Rutas de navegación de Google Analytics con marca de tiempo, si están habilitadas
migas de pan.timestamp MARCA DE TIEMPO La marca de tiempo asociada con la ruta de navegación
pan rallado.nombre CUERDA El nombre asociado con la miga de pan
pan rallado.params REGISTRO REPETIDO Parámetros asociados a la ruta de navegación
breadcrumbs.params.key CUERDA Una clave de parámetro asociada con la ruta de navegación
migas de pan.parámetros.valor CUERDA Un valor de parámetro asociado con la ruta de navegación
culpa_marco REGISTRO El marco identificado como la causa raíz del bloqueo o error
culpa_marco.line INT64 El número de línea del archivo del marco.
culpa_marco.archivo CUERDA El nombre del archivo de marco.
marco_de_culpa.símbolo CUERDA El símbolo hidratado, o el símbolo crudo si no es hidratable
marco_de_culpa.compensación INT64 El desplazamiento de bytes en la imagen binaria que contiene el código, sin configurar para las excepciones de Java
dirección_marco_culpable INT64 La dirección en la imagen binaria que contiene el código, sin configurar para marcos Java
culpa_marco.biblioteca CUERDA El nombre para mostrar de la biblioteca que incluye el marco.
reproche_marco.propietario CUERDA DESARROLLADOR, PROVEEDOR, TIEMPO DE EJECUCIÓN, PLATAFORMA o SISTEMA
marco_culpable.culpable BOOLEANO Si el análisis de Crashlytics determinó que este marco es la causa del bloqueo o error
excepciones REGISTRO REPETIDO Solo Android: excepciones que ocurrieron durante este evento. Las excepciones anidadas se presentan en orden cronológico inverso (léase: el último registro es la primera excepción lanzada)
excepciones.tipo CUERDA El tipo de excepción, por ejemplo, java.lang.IllegalStateException
excepciones.mensaje_de_excepción CUERDA Un mensaje asociado con la excepción.
excepciones.anidado BOOLEANO Cierto para todas menos la última excepción lanzada (es decir, el primer registro)
excepciones.título CUERDA El título del hilo
excepciones.subtítulo CUERDA El subtítulo del hilo.
excepciones.culpadas BOOLEANO Verdadero si Crashlytics determina que la excepción es responsable del error o bloqueo
excepciones.frames REGISTRO REPETIDO Los marcos asociados con la excepción.
excepciones.frames.line INT64 El número de línea del archivo del marco.
excepciones.frames.file CUERDA El nombre del archivo de marco.
excepciones.marcos.símbolo CUERDA El símbolo hidratado, o el símbolo crudo si no es hidratable
excepciones.frames.offset INT64 El desplazamiento de bytes en la imagen binaria que contiene el código, sin configurar para las excepciones de Java
excepciones.frames.address INT64 La dirección en la imagen binaria que contiene el código, sin configurar para marcos Java
excepciones.frames.library CUERDA El nombre para mostrar de la biblioteca que incluye el marco.
excepciones.marcos.propietario CUERDA DESARROLLADOR, PROVEEDOR, TIEMPO DE EJECUCIÓN, PLATAFORMA o SISTEMA
excepciones.frames.blamed BOOLEANO Si el análisis de Crashlytics determinó que este marco es la causa del bloqueo o error
error REGISTRO REPETIDO Solo aplicaciones de Apple: errores no fatales
error.nombre_cola CUERDA La cola en la que se estaba ejecutando el subproceso
código de error INT64 Código de error asociado con el NSError registrado personalizado de la aplicación
error.título CUERDA El título del hilo
error.subtitle CUERDA El subtítulo del hilo.
error.culpado BOOLEANO Si el análisis de Crashlytics determinó que este marco es la causa del error
error.frames REGISTRO REPETIDO Los marcos del stacktrace
error.frames.line INT64 El número de línea del archivo del marco.
error.frames.file CUERDA El nombre del archivo de marco.
símbolo.de.fotogramas.de.error CUERDA El símbolo hidratado, o el símbolo crudo si no es hidratable
error.frames.offset INT64 El desplazamiento de bytes en la imagen binaria que contiene el código.
error.frames.address INT64 La dirección en la imagen binaria que contiene el código.
error.frames.library CUERDA El nombre para mostrar de la biblioteca que incluye el marco.
error.frames.propietario CUERDA DESARROLLADOR, PROVEEDOR, TIEMPO DE EJECUCIÓN, PLATAFORMA o SISTEMA
error.frames.blamed BOOLEANO Si el análisis de Crashlytics determinó que este marco es la causa del error
hilos REGISTRO REPETIDO Temas presentes en el momento del evento
threads.crashed BOOLEANO Si el hilo se bloqueó
threads.thread_name CUERDA el nombre del hilo
threads.queue_name CUERDA Solo aplicaciones de Apple: la cola en la que se estaba ejecutando el hilo
subprocesos.signal_name CUERDA El nombre de la señal que provocó el bloqueo de la aplicación, solo presente en subprocesos nativos bloqueados
hilos.señal_código CUERDA El código de la señal que provocó el bloqueo de la aplicación; solo presente en subprocesos nativos bloqueados
threads.crash_address INT64 La dirección de la señal que provocó el bloqueo de la aplicación; solo presente en subprocesos nativos bloqueados
hilos.código INT64 Solo aplicaciones de Apple: código de error del NSError registrado personalizado de la aplicación
hilos.título CUERDA El título del hilo
hilos.subtítulo CUERDA El subtítulo del hilo.
hilos.culpados BOOLEANO Si el análisis de Crashlytics determinó que este marco es la causa del bloqueo o error
hilos.marcos REGISTRO REPETIDO Los marcos del hilo
hilos.frames.line INT64 El número de línea del archivo del marco.
subprocesos.frames.file CUERDA El nombre del archivo de marco.
hilos.marcos.símbolo CUERDA El símbolo hidratado, o el símbolo crudo si no se puede hidratar
subprocesos.marcos.desplazamiento INT64 El desplazamiento de bytes en la imagen binaria que contiene el código.
subprocesos.marcos.dirección INT64 La dirección en la imagen binaria que contiene el código.
subprocesos.frames.library CUERDA El nombre para mostrar de la biblioteca que incluye el marco.
threads.frames.propietario CUERDA DESARROLLADOR, PROVEEDOR, TIEMPO DE EJECUCIÓN, PLATAFORMA o SISTEMA
subprocesos.frames.culpados BOOLEANO Si el análisis de Crashlytics determinó que este marco es la causa del error

Visualización de datos de Crashlytics exportados con Data Studio

Google Data Studio convierte sus conjuntos de datos de Crashlytics en BigQuery en informes que son fáciles de leer, fáciles de compartir y totalmente personalizables.

Para obtener más información sobre el uso de Data Studio, consulte la guía de inicio rápido de Data Studio, Bienvenido a Data Studio .

Usar una plantilla de informe de Crashlytics

Data Studio tiene un informe de muestra para Crashlytics que incluye un conjunto completo de dimensiones y métricas del esquema de BigQuery de Crashlytics exportado. Si ha habilitado la exportación de transmisión de Crashlytics BigQuery, puede ver esos datos en la página de tendencias en tiempo real de la plantilla de Data Studio. Puede usar la muestra como plantilla para crear rápidamente nuevos informes y visualizaciones basados ​​en los datos de bloqueo sin procesar de su propia aplicación:

  1. Abra la plantilla del panel de control de Crashlytics Data Studio .
  2. Haga clic en Usar plantilla en la esquina superior derecha.
  3. En el menú desplegable Nueva fuente de datos , seleccione Crear nueva fuente de datos .
  4. Haga clic en Seleccionar en la tarjeta de BigQuery .
  5. Seleccione una tabla que contenga datos de Crashlytics exportados eligiendo Mis proyectos > [nombre-de-su-proyecto] > firebase_crashlytics > [nombre-de-su-tabla] . Su tabla de lotes siempre está disponible para seleccionar; si la exportación de transmisión de Crashlytics BigQuery está habilitada, puede seleccionar su tabla en tiempo real en su lugar.
  6. En Configuración , establezca el nivel de Plantilla de Crashlytics en Predeterminado .
  7. Haga clic en Conectar para crear la nueva fuente de datos.
  8. Haga clic en Agregar al informe para volver a la plantilla de Crashlytics.
  9. Finalmente, haga clic en Crear informe para crear su copia de la plantilla del panel de control de Crashlytics Data Studio.