Dopo aver esportato i dati di Crashlytics e (facoltativamente) delle sessioni Firebase in BigQuery, puoi iniziare a utilizzarli:
Analizza i dati utilizzando query SQL
Puoi eseguire query sui dati di Crashlytics per generare report e riepiloghi personalizzati. Poiché questi tipi di report personalizzati non sono disponibili nella dashboard Crashlytics della console Firebase, possono integrare l'analisi e la comprensione dei dati sugli arresti anomali. Consulta la raccolta di query di esempio più avanti in questa pagina.Unisci i dati di set di dati diversi
Ad esempio, se scegli di esportare i dati delle sessioni Firebase quando configuri l'esportazione dei dati di Crashlytics, puoi comprendere meglio gli utenti senza arresti anomali e le sessioni senza arresti anomali (vedi la query di esempio). Inoltre, puoi esportare i dati da vari prodotti Firebase (come Performance Monitoring) o da Google Analytics, quindi unire e analizzare questi dati in BigQuery con i dati di Crashlytics.Crea viste
Utilizzando l'interfaccia utente di BigQuery, puoi creare una vista, ovvero una tabella virtuale definita da una query SQL. Per istruzioni dettagliate sui diversi tipi di visualizzazioni e su come crearle, consulta la documentazione di BigQuery.
Per maggiori dettagli sullo schema del set di dati, consulta Schema del set di dati per i dati esportati in BigQuery.
Scopri di più su BigQuery SQL
Scopri i tipi di query che puoi eseguire, inclusi i job di query interattive, i job di query batch e i job di query continue.
Scopri di più sulle istruzioni e sui dialetti SQL supportati in BigQuery.
Scopri come scrivere query utilizzando l'assistenza basata sull'AI (Gemini).
Esempi di query per i dati di Crashlytics
Questa sezione fornisce alcuni esempi di situazioni e query che mostrano come utilizzare SQL BigQuery con i dati Crashlytics esportati e i dati delle sessioni Firebase.
- Calcola le metriche relative alle sessioni senza arresti anomali utilizzando i dati delle sessioni di Firebase
- Arresti anomali per giorno
- Trova gli arresti anomali più diffusi
- Primi 10 dispositivi con arresti anomali
- Filtra per chiave personalizzata
- Estrai gli ID utente
- Trova tutti gli utenti che riscontrano un particolare problema di arresto anomalo
- Numero di utenti interessati da un problema di arresto anomalo, suddiviso per paese
- I 5 problemi principali di oggi
- I 5 problemi principali dal giorno DATE, incluso oggi
Esempio 1: calcola le metriche relative alle sessioni senza arresti anomali utilizzando i dati delle sessioni di Firebase
Nell'ultima versione, hai lanciato un importante rinnovamento della tua app per risolvere gli arresti anomali in un Critical User Journey. Hai ricevuto recensioni eccellenti dagli utenti, ma vorresti prove quantitative che la tua app sia più stabile di prima.
Le metriche senza arresti anomali possono aiutarti a ottenere queste informazioni. Queste metriche sono misurazioni importanti che ti aiutano a comprendere lo stato di salute generale della tua app. Con i dati delle sessioni Firebase e gli eventi Crashlytics, puoi calcolare queste metriche con una query di base.
Di seguito sono riportati esempi di query per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto e ANDROID).
Utenti senza arresti anomali per una versione specifica:
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
Sessioni senza arresti anomali nell'ultima settimana (ultime 168 ore):
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
Esempio 2: arresti anomali per giorno
Dopo aver lavorato per correggere il maggior numero possibile di bug, pensi che il tuo team sia finalmente pronto per lanciare la nuova app di condivisione di foto. Prima di farlo, vuoi controllare il numero di arresti anomali al giorno nell'ultimo mese per assicurarti che la correzione dei bug abbia reso l'app più stabile nel tempo.
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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;
Esempio 3: trova gli arresti anomali più diffusi
Per dare la giusta priorità ai piani di produzione, vuoi trovare i 10 arresti anomali più diffusi nella tua app. Generi una query che fornisce i punti dati pertinenti.
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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;
Esempio 4: i 10 dispositivi con il maggior numero di arresti anomali
L'autunno è la stagione dei nuovi smartphone. La tua azienda sa che questo significa anche che è arrivato il momento di affrontare nuovi problemi specifici dei dispositivi, soprattutto per Android. Per anticipare i problemi di compatibilità imminenti, crei una query che identifica i 10 dispositivi che hanno avuto il maggior numero di arresti anomali nell'ultima settimana (168 ore).
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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;
Esempio 5: filtra per chiave personalizzata
Sei uno sviluppatore di giochi e vuoi sapere quale livello del tuo gioco presenta il maggior numero di arresti anomali.
Per monitorare questa statistica, imposti una chiave Crashlytics personalizzata
(iOS+ |
Android |
Flutter |
Unity
)
chiamata current_level e la aggiorni ogni volta che l'utente raggiunge un nuovo livello.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Con questa chiave nell'esportazione in BigQuery, puoi scrivere una query per generare un report sulla distribuzione dei valori current_level associati a ogni evento di arresto anomalo.
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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 DESCEsempio 6: estrai gli ID utente
Hai un'app per Android con accesso in anteprima. La maggior parte degli utenti la adora, ma tre hanno riscontrato un numero insolito di arresti anomali. Per andare a fondo del problema, scrivi una query che estrae tutti gli eventi di arresto anomalo per questi utenti, utilizzando i loro ID utente.
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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
Esempio 7: trova tutti gli utenti che riscontrano un problema di arresto anomalo specifico
Il tuo team ha rilasciato accidentalmente un bug critico a un gruppo di beta tester. Il tuo team è stato in grado di utilizzare la query dell'esempio "Trova gli arresti anomali più diffusi" riportato sopra per identificare l'ID del problema di arresto anomalo specifico. Ora il tuo team vorrebbe eseguire una query per estrarre l'elenco degli utenti dell'app interessati da questo arresto anomalo.
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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;Esempio 8: numero di utenti interessati da un problema di arresto anomalo, suddivisi per paese
Il tuo team ha rilevato un bug critico durante l'implementazione di una nuova release. Hai potuto utilizzare la query dell'esempio "Trova gli arresti anomali più diffusi" riportato sopra per identificare l'ID del problema di arresto anomalo specifico. Ora il tuo team vuole sapere se questo arresto anomalo si è diffuso agli utenti di diversi paesi del mondo.
Per scrivere questa query, il tuo team dovrà:
Abilita l'esportazione dei dati di Google Analytics in BigQuery. Consulta Esporta i dati del progetto in BigQuery.
Aggiorna l'app per trasmettere un ID utente sia all'SDK Google Analytics sia all'SDK 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");Scrivi una query che utilizzi il campo ID utente per unire gli eventi nel set di dati Google Analytics con gli arresti anomali nel set di dati Crashlytics.
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza il relativo ID pacchetto e
IOS(anziché il nome pacchetto 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
Esempio 9: i 5 problemi principali di oggi
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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;
Esempio 10: i 5 problemi principali dal giorno DATA, incluso oggi
Puoi anche combinare le tabelle batch e in tempo reale con una query di unione per aggiungere informazioni in tempo reale ai dati batch affidabili. Poiché event_id è una chiave primaria, puoi utilizzare DISTINCT event_id per deduplicare gli eventi comuni delle due tabelle.
Ecco una query di esempio per un'app per Android. Per un'app per iOS, utilizza l'ID pacchetto e IOS (anziché il nome pacchetto 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;
Passaggi successivi
Crea dashboard personalizzate utilizzando i dati esportati e vari servizi Google Cloud, come Data Studio.
Scopri di più sullo schema del set di dati per i dati esportati.