Setelah mengekspor data Crashlytics dan (opsional) data sesi Firebase ke BigQuery, Anda dapat mulai menggunakan data tersebut:
Menganalisis data menggunakan kueri SQL
Anda dapat menjalankan kueri pada data Crashlytics untuk membuat laporan dan ringkasan kustom. Karena jenis laporan kustom ini tidak tersedia di dasbor Crashlytics Firebase console, laporan ini dapat melengkapi analisis dan pemahaman Anda tentang data error. Lihat kumpulan contoh kueri di bagian selanjutnya dalam halaman ini.Menggabungkan data dari set data yang berbeda
Misalnya, jika Anda memilih untuk mengekspor data sesi Firebase saat menyiapkan ekspor data Crashlytics, Anda dapat meningkatkan pemahaman tentang pengguna bebas error dan sesi bebas error (lihat contoh kueri). Selain itu, Anda dapat mengekspor data dari berbagai produk Firebase (seperti Performance Monitoring) atau dari Google Analytics, lalu menggabungkan dan menganalisis data tersebut di BigQuery dengan data Crashlytics Anda.Membuat tampilan
Dengan menggunakan UI BigQuery, Anda dapat membuat tampilan, yang merupakan tabel virtual yang ditentukan oleh kueri SQL. Untuk mengetahui petunjuk mendetail tentang berbagai jenis tampilan dan cara membuatnya, lihat dokumentasi BigQuery.
Untuk mengetahui detail tentang skema set data, lihat Skema set data untuk data yang diekspor dalam BigQuery.
Mempelajari SQL BigQuery
Pelajari jenis kueri yang dapat Anda jalankan, termasuk tugas kueri interaktif, tugas kueri batch, dan tugas kueri berkelanjutan.
Pelajari pernyataan dan dialek SQL yang didukung di BigQuery.
Pelajari cara menulis kueri menggunakan bantuan yang didukung AI (Gemini).
Contoh kueri untuk data Crashlytics
Bagian ini memberikan beberapa contoh situasi dan contoh kueri yang menunjukkan cara menggunakan SQL BigQuery dengan data Crashlytics yang diekspor dan data sesi Firebase.
- Menghitung metrik bebas error menggunakan data sesi Firebase
- Error menurut hari
- Menemukan error yang paling signifikan
- 10 perangkat yang paling sering mengalami error
- Memfilter menurut kunci kustom
- Mengekstrak ID pengguna
- Menemukan semua pengguna yang mengalami masalah error tertentu
- Jumlah pengguna yang terkena dampak masalah error, dibagi berdasarkan negara
- 5 masalah teratas sejauh ini
- 5 masalah teratas sejak TANGGAL, termasuk hari ini
Contoh 1: Menghitung metrik bebas error menggunakan data sesi Firebase
Dalam versi terbaru, Anda meluncurkan perombakan besar-besaran pada aplikasi untuk mengatasi error dalam perjalanan penting pengguna. Anda telah menerima ulasan yang sangat baik dari pengguna, tetapi Anda ingin bukti kuantitatif bahwa aplikasi Anda lebih stabil dari sebelumnya.
Metrik bebas error dapat membantu memberikan informasi ini. Metrik ini adalah pengukuran penting yang membantu Anda memahami kondisi keseluruhan aplikasi. Dengan data sesi Firebase dan peristiwa Crashlytics, Anda dapat menghitung metrik ini dengan kueri dasar.
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket
dan IOS-nya (bukan nama paket dan ANDROID).
Pengguna bebas error untuk versi tertentu:
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
Sesi bebas error selama seminggu terakhir (168 jam terakhir):
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
Contoh 2: Error per hari
Setelah berupaya memperbaiki bug sebanyak mungkin, Anda merasa bahwa tim Anda telah siap meluncurkan aplikasi berbagi foto yang baru. Sebelum melakukannya, Anda ingin memeriksa jumlah error per hari selama sebulan terakhir, untuk memastikan bahwa pemecahan masalah bug Anda membuat aplikasi menjadi lebih stabil dari waktu ke waktu.
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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;
Contoh 3: Menemukan error yang paling signifikan
Untuk memprioritaskan rencana produksi dengan benar, Anda ingin menemukan 10 error paling signifikan dalam aplikasi. Anda membuat kueri yang memberikan poin data yang relevan.
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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;
Contoh 4: 10 perangkat yang paling sering mengalami error
Musim gugur adalah musim ponsel baru. Perusahaan Anda tahu bahwa ini juga berarti musim munculnya masalah pada perangkat baru — terutama untuk Android. Untuk mengatasi masalah kompatibilitas tersebut, Anda mengumpulkan kueri yang mengidentifikasi 10 perangkat yang paling sering mengalami error dalam seminggu terakhir (168 jam).
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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;
Contoh 5: Memfilter berdasarkan kunci kustom
Anda adalah developer game yang ingin mengetahui level mana dari game Anda yang paling sering mengalami error.
Untuk membantu melacak statistik tersebut, Anda menetapkan kunci Crashlytics kustom
(iOS+ |
Android |
Flutter |
Unity
)
yang disebut current_level, dan memperbaruinya setiap kali pengguna mencapai level baru.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
Dengan kunci tersebut dalam ekspor ke BigQuery, Anda kemudian dapat menulis kueri untuk melaporkan distribusi nilai current_level yang terkait dengan setiap peristiwa error.
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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 DESCContoh 6: Mengekstrak ID pengguna
Anda memiliki aplikasi Android dalam akses awal. Sebagian besar pengguna menyukai aplikasi tersebut, tetapi tiga pengguna mengalami jumlah error yang tidak biasa. Untuk menyelesaikan masalah, Anda menulis kueri yang menarik semua peristiwa error pada pengguna tersebut menggunakan ID pengguna mereka:
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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
Contoh 7: Menemukan semua pengguna yang mengalami masalah error tertentu
Tim Anda tidak sengaja merilis bug kritis kepada sekelompok penguji beta. Tim Anda dapat menggunakan kueri dari contoh "Menemukan error yang paling signifikan" di atas untuk mengidentifikasi ID masalah error yang spesifik. Sekarang, tim Anda ingin menjalankan kueri untuk mengekstrak daftar pengguna aplikasi yang terkena dampak error ini.
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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;Contoh 8: Jumlah pengguna yang terkena dampak masalah error, dibagi berdasarkan negara
Tim Anda telah mendeteksi bug kritis selama peluncuran rilis baru. Anda dapat menggunakan kueri dari contoh "Menemukan error yang paling signifikan" di atas untuk mengidentifikasi ID masalah error yang spesifik. Sekarang, tim Anda ingin melihat apakah error ini telah menyebar ke pengguna di berbagai negara di dunia.
Untuk menulis kueri ini, tim Anda harus melakukan hal berikut:
Aktifkan ekspor data Google Analytics ke BigQuery. Lihat Mengekspor data project ke BigQuery.
Update aplikasi Anda untuk meneruskan ID pengguna ke Google Analytics SDK dan Crashlytics SDK.
Swift
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");Objective-C
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";Java
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");Menulis kueri yang menggunakan kolom ID pengguna untuk menggabungkan peristiwa di set data Google Analytics dengan error di set data Crashlytics.
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan ID paket dan
IOS(bukan nama paket danANDROID).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
Contoh 9: 5 masalah teratas sejauh ini
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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;
Contoh 10: 5 masalah teratas sejak TANGGAL, termasuk hari ini
Anda juga dapat menggabungkan tabel batch dan realtime dengan kueri penggabungan untuk menambahkan informasi realtime ke data batch yang dapat diandalkan. Karena event_id adalah kunci utama, Anda dapat menggunakan DISTINCT event_id untuk menghilangkan duplikat setiap peristiwa umum dari kedua tabel.
Berikut adalah contoh kueri untuk aplikasi Android. Untuk aplikasi iOS, gunakan
ID paket dan IOS (bukan nama paket dan 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;
Apa langkah selanjutnya?
Buat dasbor kustom menggunakan data yang diekspor dan berbagai layanan Google Cloud, seperti Looker Studio.
Pelajari skema set data untuk data yang diekspor.