Depois de exportar os dados do Crashlytics e (opcionalmente) de sessões do Firebase para o BigQuery, você pode começar a trabalhar com eles:
Analisar dados usando consultas SQL
Você pode executar consultas nos seus dados do Crashlytics para gerar relatórios e resumos personalizados. Como esses tipos de relatórios personalizados não estão disponíveis no painel do Crashlytics no console do Firebase, eles podem complementar sua análise e entendimento dos dados de falha. Confira a coleção de exemplos de consultas mais adiante nesta página.Combinar dados de diferentes conjuntos de dados
Por exemplo, se você optar por exportar dados de sessões do Firebase ao configurar a exportação de dados do Crashlytics, poderá entender melhor os usuários e as sessões sem falhas (consulte exemplo de consulta). Além disso, é possível exportar dados de vários produtos do Firebase (como o Performance Monitoring) ou do Google Analytics e, em seguida, combinar e analisar esses dados no BigQuery com seus dados do Crashlytics.Criar visualizações
Usando a interface do BigQuery, é possível criar uma visualização, que é uma tabela virtual definida por uma consulta SQL. Para instruções detalhadas sobre os diferentes tipos de visualizações e como criá-las, consulte a documentação do BigQuery.
Para mais detalhes sobre o esquema do conjunto de dados, consulte Esquema do conjunto de dados para dados exportados em BigQuery.
Saiba mais sobre o SQL BigQuery
Saiba mais sobre os tipos de consultas que você pode executar, incluindo jobs de consulta interativos, em lote e contínuos.
Saiba mais sobre as instruções compatíveis e os dialetos SQL no BigQuery.
Saiba como escrever consultas usando a assistência com tecnologia de IA (Gemini).
Exemplos de consultas para dados de Crashlytics
Nesta seção, apresentamos alguns exemplos de situações e consultas que demonstram como usar o SQL BigQuery com os dados exportados do Crashlytics e de sessões do Firebase.
- Calcular métricas sem falhas usando dados de sessões do Firebase
- Falhas por dia
- Encontrar as falhas de maior impacto
- Os 10 dispositivos com mais falhas
- Filtrar por chave personalizada
- Extrair User-IDs
- Encontrar todos os usuários que enfrentam uma falha específica
- Número de usuários afetados por uma falha, discriminados por país
- Os cinco principais problemas até agora
- Cinco principais problemas desde DATE, incluindo hoje
Exemplo 1: calcular métricas sem falhas usando dados de sessões do Firebase
Na versão mais recente, você lançou uma grande reformulação do app para resolver falhas em uma jornada crítica do usuário. Você recebeu avaliações excelentes dos usuários, mas quer evidências quantitativas de que seu app está mais estável do que antes.
As métricas sem falhas podem ajudar a fornecer essas informações. Essas métricas são medidas importantes que ajudam a entender a integridade geral do app. Com os dados de sessões do Firebase e os eventos Crashlytics, é possível calcular essas métricas com uma consulta básica.
Confira exemplos de consultas para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e ANDROID).
Usuários sem falhas de uma versão 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
Sessões sem falhas na ú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
Exemplo 2: número de falhas por dia
Depois de trabalhar para corrigir o máximo de bugs possível, você acha que sua equipe finalmente está pronta para lançar o novo app de compartilhamento de fotos. Antes de fazer isso, você quer conferir o número de falhas por dia no último mês para ter certeza de que a busca por bugs tornou o app mais estável com o tempo.
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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;
Exemplo 3: encontrar as falhas de maior impacto
Para priorizar corretamente os planos de produção, você quer encontrar as 10 falhas de maior impacto no seu app. Você cria uma consulta que fornece os pontos de dados pertinentes.
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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;
Exemplo 4: os 10 dispositivos com mais falhas
O outono é a temporada de lançamento de novos smartphones. Sua empresa sabe que isso também significa uma nova onda de problemas específicos de cada dispositivo, principalmente para Android. Para superar as preocupações de compatibilidade, você elaborou uma consulta que identifica os 10 dispositivos com mais falhas na última semana (168 horas).
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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;
Exemplo 5: filtrar por chave personalizada
Você é um desenvolvedor de jogos que quer saber em qual nível o jogo está apresentando o maior número de falhas.
Para ajudar a monitorar essa estatística, defina uma chave personalizada do Crashlytics
(iOS+ |
Android |
Flutter |
Unity
)
chamada current_level e a atualize sempre que o usuário atingir um novo nível.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Com essa chave na sua exportação para o BigQuery, é possível gravar uma consulta para
relatar a distribuição dos valores de current_level associados a cada evento
com falha.
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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 DESCExemplo 6: extrair IDs de usuário
Você tem um app Android que está em acesso antecipado. A maioria dos seus usuários adorou, mas três tiveram um número incomum de falhas. Para encontrar a raiz do problema, você criou uma consulta para extrair todos os eventos com falha que ocorreram com esses usuários, usando os IDs de usuário correspondentes.
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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
Exemplo 7: localizar todos os usuários que enfrentam uma falha específica
Sua equipe acidentalmente lançou um bug crítico para um grupo de testadores Beta. Usando a consulta do exemplo "encontrar as falhas de maior impacto" acima, sua equipe conseguiu identificar o ID específico da falha. Agora, ela quer executar uma consulta para extrair a lista de usuários do app que foram afetados pela falha.
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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;Exemplo 8: número de usuários afetados por uma falha discriminados por país
Sua equipe detectou um bug crítico durante o lançamento de uma nova versão. Você conseguiu usar a consulta do exemplo "encontrar as falhas de maior impacto" acima para identificar o ID específico da falha. Sua equipe agora quer ver se essa falha se espalhou para usuários em diferentes países ao redor do mundo.
Para criar essa consulta, ela precisa fazer o seguinte:
Ative a exportação de dados do Google Analytics para o BigQuery. Acesse Exportar dados do projeto para o BigQuery.
Atualize o app para transmitir um ID do usuário para o SDK do Google Analytics e para o SDK do 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");Crie uma consulta que use o campo ID do usuário para agrupar eventos no conjunto de dados do Google Analytics com falhas no conjunto de dados do Crashlytics.
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote e
IOS(em vez do nome do pacote eANDROID).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
Exemplo 9: os cinco principais problemas até agora
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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;
Exemplo 10: cinco principais problemas desde DATE, incluindo hoje
Também é possível combinar as tabelas em lote e em tempo real com uma consulta de agrupamento para adicionar
informações em tempo real aos dados confiáveis em lote. Como event_id é uma chave
primária, o DISTINCT event_id pode ser usado para eliminar os eventos em comum das duas
tabelas.
Este é um exemplo de consulta para um app Android. Para apps iOS, use o ID do pacote
e IOS (em vez do nome do pacote e 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;
A seguir
Crie painéis personalizados usando dados exportados e vários serviços do Google Cloud, como o Looker Studio.
Saiba mais sobre o esquema do conjunto de dados para dados exportados.