Nachdem Sie Ihre Crashlytics- und (optional) Firebase-Sitzungsdaten nach BigQuery exportiert haben, können Sie mit den Daten arbeiten:
Daten mit SQL-Abfragen analysieren
Sie können Abfragen für Ihre Crashlytics-Daten ausführen, um benutzerdefinierte Berichte und Zusammenfassungen zu erstellen. Da diese Arten von benutzerdefinierten Berichten im Dashboard Crashlytics der Firebase Console nicht verfügbar sind, können sie Ihre Analyse und Ihr Verständnis von Absturzdaten ergänzen. Eine Sammlung von Beispielabfragen finden Sie weiter unten auf dieser Seite.Daten aus verschiedenen Datasets zusammenführen
Wenn Sie beispielsweise beim Einrichten des Crashlytics-Datenexports Firebase-Sitzungsdaten exportieren, können Sie die Messwerte zu absturzfreien Nutzern und Sitzungen ohne Abstürze besser verstehen (siehe Beispielabfrage). Außerdem können Sie Daten aus verschiedenen Firebase-Produkten (z. B. Performance Monitoring) oder aus Google Analytics exportieren und diese Daten dann in BigQuery mit Ihren Crashlytics-Daten zusammenführen und analysieren.Ansichten erstellen
Über die BigQuery-Benutzeroberfläche können Sie eine Ansicht erstellen. Dies ist eine virtuelle Tabelle, die durch eine SQL-Abfrage definiert wird. Eine ausführliche Anleitung zu den verschiedenen Arten von Ansichten und wie Sie sie erstellen, finden Sie in der BigQuery-Dokumentation.
Weitere Informationen zum Dataset-Schema finden Sie unter Dataset-Schema für exportierte Daten in BigQuery.
Informationen zu BigQuery-SQL
Informationen zu den Abfragetypen, die Sie ausführen können, einschließlich interaktiver Abfragejobs, Batch-Abfragejobs und kontinuierlicher Abfragejobs.
Beispielabfragen für Crashlytics-Daten
In diesem Abschnitt finden Sie einige Beispielsituationen und Beispielabfragen, die zeigen, wie Sie BigQuery-SQL mit Ihren exportierten Crashlytics-Daten und Firebase-Sitzungsdaten verwenden können.
- Messwerte zu Abstürzen mithilfe von Firebase-Sitzungsdaten berechnen
- Abstürze nach Tag
- Die häufigsten Abstürze finden
- Top 10 der Geräte mit Abstürzen
- Nach benutzerdefiniertem Schlüssel filtern
- User-IDs extrahieren
- Alle Nutzer finden, bei denen ein bestimmtes Absturzproblem auftritt
- Anzahl der von einem Absturzproblem betroffenen Nutzer, aufgeschlüsselt nach Land
- Die 5 häufigsten Probleme heute
- Die 5 häufigsten Probleme seit dem DATUM, einschließlich heute
Beispiel 1: Messwerte zu absturzfreien Sitzungen mithilfe von Firebase-Sitzungsdaten berechnen
In der aktuellen Version haben Sie Ihre App grundlegend überarbeitet, um Abstürze in einer Critical User Journey zu beheben. Sie haben hervorragende Rezensionen von Nutzern erhalten, möchten aber quantitative Belege dafür, dass Ihre App stabiler ist als zuvor.
Messwerte ohne Abstürze können diese Informationen liefern. Diese Messwerte sind wichtig, um den Gesamtzustand Ihrer App zu verstehen. Mit Firebase-Sitzungsdaten und Crashlytics-Ereignissen können Sie diese Messwerte mit einer einfachen Abfrage berechnen.
Hier sind Beispielabfragen für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und ANDROID).
Nutzer ohne Abstürze für eine bestimmte Version:
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
Sitzungen ohne Abstürze in der letzten Woche (letzte 168 Stunden):
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
Beispiel 2: Abstürze nach Tag
Nachdem Sie so viele Fehler wie möglich behoben haben, ist Ihr Team endlich bereit, die neue App zum Teilen von Fotos zu veröffentlichen. Bevor Sie das tun, möchten Sie die Anzahl der Abstürze pro Tag im letzten Monat prüfen, um sicherzugehen, dass die App durch die Fehlerbehebung im Laufe der Zeit stabiler geworden ist.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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;
Beispiel 3: Die häufigsten Abstürze finden
Um Produktionspläne richtig zu priorisieren, möchten Sie die zehn häufigsten Abstürze in Ihrer App finden. Sie erstellen eine Abfrage, die die relevanten Datenpunkte liefert.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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;
Beispiel 4: Top 10 der Geräte mit Abstürzen
Im Herbst kommen die neuen Smartphones auf den Markt! Ihr Unternehmen weiß, dass dies auch bedeutet, dass es neue gerätespezifische Probleme geben wird – insbesondere für Android. Um den drohenden Kompatibilitätsproblemen zuvorzukommen, erstellen Sie eine Abfrage, mit der die zehn Geräte ermittelt werden, auf denen es in der letzten Woche (168 Stunden) die meisten Abstürze gab.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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;
Beispiel 5: Nach benutzerdefiniertem Schlüssel filtern
Sie sind ein Spieleentwickler und möchten wissen, in welchem Level Ihres Spiels die meisten Abstürze auftreten.
Um diese Statistik zu erfassen, legen Sie einen benutzerdefinierten Crashlytics-Schlüssel (iOS+ | Android | Flutter | Unity) namens current_level fest und aktualisieren ihn jedes Mal, wenn der Nutzer ein neues Level erreicht.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Mit diesem Schlüssel in Ihrem Export nach BigQuery können Sie dann eine Abfrage schreiben, um die Verteilung der current_level-Werte für jedes Absturzereignis zu melden.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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 DESCBeispiel 6: Nutzer-IDs extrahieren
Sie haben eine Android-App im Early Access. Die meisten Nutzer sind begeistert, aber bei drei Nutzern ist es zu einer ungewöhnlichen Anzahl von Abstürzen gekommen. Um dem Problem auf den Grund zu gehen, schreiben Sie eine Abfrage, die alle Absturzereignisse für diese Nutzer anhand ihrer Nutzer-IDs abruft.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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
Beispiel 7: Alle Nutzer finden, bei denen ein bestimmtes Absturzproblem auftritt
Ihr Team hat versehentlich einen kritischen Fehler für eine Gruppe von Betatestern veröffentlicht. Ihr Team konnte die Abfrage aus dem obigen Beispiel „Häufigste Abstürze finden“ verwenden, um die ID des spezifischen Absturzproblems zu ermitteln. Ihr Team möchte nun eine Abfrage ausführen, um eine Liste der App-Nutzer zu extrahieren, die von diesem Absturz betroffen waren.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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;Beispiel 8: Anzahl der von einem Absturzproblem betroffenen Nutzer, aufgeschlüsselt nach Land
Ihr Team hat während des Roll-outs eines neuen Release einen kritischen Fehler erkannt. Sie konnten die Abfrage aus dem obigen Beispiel Häufigste Abstürze finden verwenden, um die spezifische Absturzproblem-ID zu ermitteln. Ihr Team möchte nun wissen, ob dieser Absturz auch bei Nutzern in anderen Ländern aufgetreten ist.
Um diese Abfrage zu schreiben, muss Ihr Team Folgendes tun:
Export von Google Analytics-Daten nach BigQuery aktivieren. Weitere Informationen finden Sie unter Projektdaten nach BigQuery exportieren.
Aktualisieren Sie Ihre App, um eine Nutzer-ID sowohl an das Google Analytics SDK als auch an das Crashlytics SDK zu übergeben.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");Schreiben Sie eine Abfrage, die das Feld „User-ID“ verwendet, um Ereignisse im Dataset Google Analytics mit Abstürzen im Dataset Crashlytics zu verknüpfen.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und
IOS(anstelle des Paketnamens undANDROID).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
Beispiel 9: Die 5 wichtigsten Probleme heute bis jetzt
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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;
Beispiel 10: Die 5 häufigsten Probleme seit DATUM, einschließlich heute
Sie können die Batch- und Echtzeittabellen auch mit einer Stitching-Abfrage kombinieren, um den zuverlässigen Batchdaten Echtzeitinformationen hinzuzufügen. Da event_id ein Primärschlüssel ist, können Sie mit DISTINCT event_id alle gemeinsamen Ereignisse aus den beiden Tabellen deduplizieren.
Hier ist eine Beispielabfrage für eine Android-App. Verwenden Sie für eine iOS-App die Paket-ID und IOS (anstelle des Paketnamens und 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;
Nächste Schritte
Benutzerdefinierte Dashboards mit exportierten Daten und verschiedenen Google Cloud-Diensten wie Data Studio erstellen.