Anda dapat mengekspor data Firebase Crashlytics ke BigQuery untuk dianalisis lebih lanjut. Dengan BigQuery, Anda dapat menganalisis data menggunakan BigQuery SQL, mengekspornya ke penyedia cloud lain, dan menggunakannya untuk visualisasi dan dasbor kustom dengan Looker Studio.
Apa yang dapat dilakukan dengan data yang diekspor?
Ekspor ke BigQuery berisi data error mentah termasuk jenis perangkat, sistem operasi, pengecualian (aplikasi Android) atau error (aplikasi Apple), dan log Crashlytics, serta data lainnya. Anda dapat meninjau data Crashlytics yang diekspor dan skema tabelnya nanti di halaman ini.
Berikut beberapa contoh hal yang dapat Anda lakukan dengan data Crashlytics yang diekspor:
- Menjalankan kueri 
 Anda dapat menjalankan kueri pada data Crashlytics untuk membuat laporan yang menggabungkan data peristiwa error menjadi ringkasan yang lebih mudah dipahami. Karena jenis laporan ini tidak tersedia di dasbor Crashlytics Firebase console, laporan ini dapat melengkapi analisis dan pemahaman Anda tentang data error. Di bagian selanjutnya dalam halaman ini, temukan pilihan contoh kueri.
- Menggunakan template Looker Studio 
 Crashlytics menyediakan template Looker Studio bawaan untuk memvisualisasikan data yang diekspor.
- 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.
- Menggabungkan data spesifik per Crashlytics dengan data sesi Firebase 
 Anda juga dapat mengekspor data sesi Firebase saat menyiapkan ekspor data Crashlytics. Gunakan data sesi ini untuk meningkatkan pemahaman tentang pengguna bebas error dan sesi bebas error.
Manfaat ekspor streaming ke BigQuery
Secara default, data diekspor ke BigQuery dalam ekspor batch harian. Selain itu, Anda dapat melakukan streaming data Crashlytics dan sesi Firebase secara real-time dengan streaming BigQuery. Anda dapat menggunakannya untuk tujuan apa pun yang memerlukan data live, seperti menyajikan informasi di dasbor live, mengamati peluncuran secara live, atau memantau masalah aplikasi yang memicu pemberitahuan dan alur kerja kustom.
Saat mengaktifkan ekspor streaming ke BigQuery, Anda juga akan memiliki tabel real-time (selain tabel batch). Kedua jenis tabel akan memiliki skema set data yang sama, tetapi berikut beberapa perbedaan penting antara tabel batch dan tabel real-time:
| Tabel Batch | Tabel Realtime | 
|---|---|
| 
 | 
 | 
Tabel batch cocok untuk analisis jangka panjang dan mengidentifikasi tren dari waktu ke waktu karena kami menyimpan peristiwa dalam waktu lama sebelum menulisnya, dan dapat diisikan ulang ke tabel hingga 30 hari*. Saat menulis data ke tabel realtime, kami langsung menulisnya ke BigQuery sehingga cocok untuk dasbor live dan notifikasi kustom. Kedua tabel ini dapat digabungkan dengan kueri penggabungan untuk mendapatkan manfaat keduanya.
Secara default, tabel realtime memiliki masa berlaku partisi 30 hari. Untuk mempelajari cara mengubah masa berlaku ini, lihat Menetapkan masa berlaku partisi dalam dokumentasi BigQuery.
* Lihat detail tentang dukungan pengisian ulang di Mengupgrade ke infrastruktur ekspor baru.
Mengaktifkan ekspor ke BigQuery
- Di Firebase console, buka halaman Integrations. 
- Di kartu BigQuery, klik Link. 
- Ikuti petunjuk di layar untuk mengaktifkan ekspor ke BigQuery, termasuk opsi berikut: - Untuk meningkatkan pemahaman tentang pengguna bebas error dan sesi bebas error, aktifkan ekspor data sesi Firebase. 
- Untuk mendapatkan akses hampir real-time ke data Crashlytics dan data sesi Firebase di BigQuery, aktifkan ekspor streaming. 
 
Apa yang terjadi saat Anda mengaktifkan ekspor?
- Firebase mengekspor data dari aplikasi yang tertaut ke BigQuery. - Selama penyiapan, secara default, semua aplikasi di project Anda ditautkan ke BigQuery, tetapi Anda dapat memilih untuk tidak menautkan aplikasi tertentu selama penyiapan. 
- Setiap aplikasi yang Anda tambahkan nanti ke project Firebase akan otomatis ditautkan ke BigQuery. 
- Anda dapat mengelola aplikasi mana yang mengekspor data kapan saja. 
 
- Firebase mengekspor data ke lokasi set data yang Anda pilih selama penyiapan. - Lokasi ini berlaku untuk set data Crashlytics dan set data sesi Firebase (jika data sesi diaktifkan untuk diekspor). 
- Lokasi ini hanya berlaku untuk data yang diekspor ke BigQuery, dan tidak memengaruhi lokasi data yang disimpan untuk digunakan di dasbor Crashlytics di Firebase console atau di Android Studio. 
- Setelah set data dibuat, lokasinya tidak dapat diubah, tetapi Anda dapat menyalin set data ke lokasi lain atau memindahkan (membuat ulang) set data secara manual di lokasi yang berbeda. Untuk mempelajari lebih lanjut, lihat Mengubah lokasi untuk ekspor yang ada. 
 
- Firebase akan menyiapkan sinkronisasi harian data batch Anda ke BigQuery. - Setelah ditautkan ke BigQuery, mungkin perlu waktu hingga 48 jam untuk ekspor data batch awal. 
- Sinkronisasi harian dilakukan sekali per hari, terlepas dari ekspor terjadwal yang mungkin telah Anda siapkan di BigQuery. Perhatikan bahwa pengaturan waktu dan durasi tugas sinkronisasi dapat berubah, jadi sebaiknya jangan menjadwalkan operasi atau tugas downstream berdasarkan pengaturan waktu ekspor tertentu. 
 
- Firebase akan mengekspor salinan data Anda yang ada ke BigQuery. - Untuk setiap aplikasi tertaut, ekspor ini mencakup tabel batch yang berisi data dari sinkronisasi harian. 
- Anda dapat secara manual menjadwalkan pengisian ulang data untuk tabel batch hingga 30 hari terakhir atau untuk tanggal terkini saat Anda mengaktifkan ekspor ke BigQuery (mana saja yang terbaru). 
 - Perhatikan bahwa jika Anda mengaktifkan ekspor data Crashlytics sebelum pertengahan Oktober 2024, Anda juga dapat mengisi ulang data 30 hari sebelum hari saat Anda mengaktifkan ekspor. 
- Hal berikut berlaku jika Anda mengaktifkan ekspor streaming ke BigQuery. - Setiap aplikasi tertaut juga akan memiliki tabel real-time sendiri yang berisi data yang terus diperbarui (selain tabel batch aplikasi untuk ekspor batch harian). 
- Setelah mengaktifkan streaming, mungkin perlu waktu hingga 1 jam agar data mulai di-streaming. 
 
Contoh kueri
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(_PARTITIONTIME,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.event_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(_PARTITIONTIME,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
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: Ekstraksi 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 dan- ANDROID).- 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;
Memvisualisasikan data Crashlytics yang diekspor dengan Looker Studio
Looker Studio mengubah set data Crashlytics Anda di BigQuery menjadi laporan yang lebih mudah dibaca, lebih mudah dibagikan, dan dapat disesuaikan sepenuhnya.
Untuk mempelajari lebih lanjut cara menggunakan Looker Studio, lihat panduan selamat datang.
Menggunakan template laporan Crashlytics
Looker Studio memiliki laporan contoh untuk Crashlytics yang mencakup serangkaian dimensi dan metrik komprehensif dari skema Crashlytics BigQuery yang diekspor. Jika telah mengaktifkan ekspor streaming Crashlytics ke BigQuery, Anda dapat melihat data tersebut di halaman Realtime trends template Looker Studio. Anda dapat menggunakan contoh ini sebagai template untuk membuat laporan dan visualisasi baru dengan cepat berdasarkan data error mentah aplikasi Anda sendiri:
- Klik Use Template di sudut kanan atas. 
- Di dropdown New Data Source, pilih Create New Data Source. 
- Klik Select pada kartu BigQuery. 
- Pilih tabel yang berisi data Crashlytics yang diekspor dengan memilih My Projects > PROJECT_ID > firebase_crashlytics > TABLE_NAME. - Tabel batch Anda selalu tersedia untuk dipilih. Jika ekspor streaming Crashlytics ke BigQuery diaktifkan, Anda dapat memilih tabel realtime. 
- Pada Configuration, setel Crashlytics Template level ke Default. 
- Klik Connect untuk membuat sumber data baru. 
- Klik Add to Report untuk kembali ke template Crashlytics. 
- Terakhir, klik Create Report untuk membuat salinan template Dasbor Crashlytics Looker Studio Anda. 
Memahami skema di BigQuery
Firebase membuat set data baru di BigQuery untuk data Anda yang diekspor:
- Set data sesi Firebase (jika data sesi diaktifkan untuk diekspor) 
set data Crashlytics
Data Crashlytics diekspor ke set data BigQuery bernama firebase_crashlytics. Set data mencakup seluruh project Anda, meski memiliki beberapa aplikasi.
Tabel
Secara default, Firebase membuat setiap tabel di dalam set data Crashlytics untuk setiap aplikasi di project Anda yang ditautkan ke BigQuery.
Tabel diberi nama berdasarkan ID aplikasi (dengan tanda titik dikonversi menjadi
garis bawah) dan ditambahkan dengan platform aplikasi (_IOS atau _ANDROID).
Misalnya, data untuk aplikasi Android dengan nama paket com.google.test akan berada
dalam tabel bernama com_google_test_ANDROID.
- Jika ekspor streaming ke BigQuery diaktifkan, data juga akan di-streaming secara real-time ke tabel yang ditambahkan dengan - _REALTIME(misalnya,- com_google_test_ANDROID_REALTIME).
- Setiap baris dalam tabel mewakili peristiwa yang terjadi di aplikasi, termasuk error, error non-fatal, dan ANR. 
- Tabel berisi set data Crashlytics standar selain kunci Crashlytics kustom yang ditentukan oleh Anda di aplikasi. 
Baris
Setiap baris dalam tabel merepresentasikan error yang dialami aplikasi.
Kolom
Kolom dalam tabel identik untuk error, error non-fatal, dan ANR.
- Jika ekspor streaming ke BigQuery diaktifkan, tabel real-time akan memiliki kolom yang sama dengan tabel batch. 
- Anda mungkin memiliki kolom dalam baris yang mewakili peristiwa yang tidak memiliki stack trace. 
Berikut adalah kolom dalam tabel untuk data Crashlytics yang diekspor:
| Nama kolom | Jenis data | Deskripsi | 
|---|---|---|
| app_orientation | STRING | Misalnya, PORTRAIT,LANDSCAPE,FACE_UP,FACE_DOWN, dll. | 
| application | RECORD | Aplikasi yang menimbulkan peristiwa | 
| application.build_version | STRING | Versi build aplikasi | 
| application.display_version | STRING | |
| blame_frame | RECORD | Frame yang diidentifikasi sebagai akar penyebab crash atau error | 
| blame_frame.address | INT64 | Alamat dalam image biner yang berisi kode Tidak disetel untuk frame Java | 
| blame_frame.blamed | BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error atau crash | 
| blame_frame.file | STRING | Nama file frame | 
| blame_frame.library | STRING | Nama tampilan library yang menyertakan frame | 
| blame_frame.line | INT64 | Nomor baris file frame | 
| blame_frame.offset | INT64 | Offset byte ke image biner yang berisi kode Tidak disetel untuk pengecualian Java | 
| blame_frame.owner | STRING | Misalnya, DEVELOPER,VENDOR,RUNTIME,PLATFORM, atauSYSTEM | 
| blame_frame.symbol | STRING | Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi | 
| breadcrumbs | REPEATED RECORD | Breadcrumb Google Analytics berstempel waktu, jika diaktifkan | 
| breadcrumbs.name | STRING | Nama yang terkait dengan breadcrumb | 
| breadcrumbs.params | REPEATED RECORD | Parameter yang terkait dengan breadcrumb | 
| breadcrumbs.params.key | STRING | Kunci parameter yang terkait dengan breadcrumb | 
| breadcrumbs.params.value | STRING | Parameter value yang terkait dengan breadcrumb | 
| breadcrumbs.timestamp | TIMESTAMP | Stempel waktu yang terkait dengan breadcrumb | 
| bundle_identifier | STRING | ID unik untuk aplikasi seperti yang terdaftar di project Firebase (misalnya, com.google.gmailUntuk aplikasi platform Apple, ini adalah ID paket aplikasi. Untuk aplikasi Android, ini adalah nama paket aplikasi. | 
| crashlytics_sdk_versions | STRING | Versi Crashlytics SDK yang menimbulkan peristiwa | 
| custom_keys | REPEATED RECORD | Key-value pair yang ditentukan developer | 
| custom_keys.key | STRING | Kunci yang ditentukan developer | 
| custom_keys.value | STRING | Nilai yang ditentukan developer | 
| device | RECORD | Perangkat tempat peristiwa terjadi | 
| device_orientation | STRING | Misalnya, PORTRAIT,LANDSCAPE,FACE_UP,FACE_DOWN, dll. | 
| device.architecture | STRING | Misalnya, X86_32,X86_64,ARMV7,ARM64,ARMV7S, atauARMV7K | 
| device.manufacturer | STRING | Produsen perangkat | 
| device.model | STRING | Model perangkat | 
| error | REPEATED RECORD | (Khusus aplikasi Apple) error non-fatal | 
| error_type | STRING | Jenis error peristiwa (misalnya, FATAL,NON_FATAL,ANR, dll.) | 
| error.blamed | BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error | 
| error.code | INT64 | Kode error yang terkait dengan NSError yang dicatat khusus pada aplikasi | 
| error.frames | REPEATED RECORD | Frame stacktrace | 
| error.frames.address | INT64 | Alamat dalam image biner yang berisi kode | 
| error.frames.blamed | BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error | 
| error.frames.file | STRING | Nama file frame | 
| error.frames.library | STRING | Nama tampilan library yang menyertakan frame | 
| error.frames.line | INT64 | Nomor baris file frame | 
| error.frames.offset | INT64 | Offset byte ke image biner yang berisi kode | 
| error.frames.owner | STRING | Misalnya, DEVELOPER,VENDOR,RUNTIME,PLATFORM, atauSYSTEM | 
| error.frames.symbol | STRING | Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi | 
| error.queue_name | STRING | Antrean tempat thread berjalan | 
| error.subtitle | STRING | Subjudul thread | 
| error.title | STRING | Judul thread | 
| event_id | STRING | ID unik untuk peristiwa | 
| event_timestamp | TIMESTAMP | Kapan peristiwa terjadi | 
| exceptions | REPEATED RECORD | (Khusus Android) Pengecualian yang terjadi selama peristiwa ini. Pengecualian bertingkat ditampilkan dalam urutan kronologis terbalik, yang berarti bahwa data terakhir adalah pengecualian pertama yang ditampilkan | 
| exceptions.blamed | BOOLEAN | True jika Crashlytics menentukan bahwa pengecualian menyebabkan error atau crash | 
| exceptions.exception_message | STRING | Pesan yang terkait dengan pengecualian | 
| exceptions.frames | REPEATED RECORD | Frame yang terkait dengan pengecualian | 
| exceptions.frames.address | INT64 | Alamat dalam image biner yang berisi kode Tidak disetel untuk frame Java | 
| exceptions.frames.blamed | BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error atau crash | 
| exceptions.frames.file | STRING | Nama file frame | 
| exceptions.frames.library | STRING | Nama tampilan library yang menyertakan frame | 
| exceptions.frames.line | INT64 | Nomor baris file frame | 
| exceptions.frames.offset | INT64 | Offset byte ke image biner yang berisi kode Tidak disetel untuk pengecualian Java | 
| exceptions.frames.owner | STRING | Misalnya, DEVELOPER,VENDOR,RUNTIME,PLATFORM, atauSYSTEM | 
| exceptions.frames.symbol | STRING | Simbol terhidrasi, atau simbol mentah jika tidak dapat dihidrasi | 
| exceptions.nested | BOOLEAN | True untuk semua kecuali pengecualian yang terakhir kali ditampilkan (yaitu data pertama) | 
| exceptions.subtitle | STRING | Subjudul thread | 
| exceptions.title | STRING | Judul thread | 
| exceptions.type | STRING | Jenis pengecualian
(misalnya, java.lang.IllegalStateException) | 
| firebase_session_id | STRING | ID yang dibuat secara otomatis untuk sesi Firebase yang dipetakan ke peristiwa dari Crashlytics | 
| installation_uuid | STRING | ID yang mengidentifikasi penginstalan aplikasi dan perangkat unik | 
| is_fatal | BOOLEAN | Apakah aplikasi mengalami error | 
| issue_id | STRING | Masalah yang terkait dengan peristiwa | 
| logs | REPEATED RECORD | Pesan log berstempel waktu yang dihasilkan oleh pencatat log Crashlytics, jika diaktifkan | 
| logs.message | STRING | Pesan yang dicatat dalam log | 
| logs.timestamp | TIMESTAMP | Kapan log dibuat | 
| memory | RECORD | Status memori perangkat | 
| memory.free | INT64 | Byte memori tersisa | 
| memory.used | INT64 | Byte memori yang digunakan | 
| operating_system | RECORD | Detail OS di perangkat | 
| operating_system.device_type | STRING | Jenis perangkat (misalnya, MOBILE,TABLET,TV, dll.); juga disebut dengan "kategori perangkat" | 
| operating_system.display_version | STRING | Versi OS di perangkat | 
| operating_system.modification_state | STRING | Apakah perangkat telah diubah
(misalnya, aplikasi yang di-jailbreak adalah MODIFIEDdan aplikasi yang di-root adalahUNMODIFIED) | 
| operating_system.name | STRING | Nama OS di perangkat | 
| operating_system.type | STRING | (Khusus aplikasi Apple) Jenis OS yang berjalan di perangkat (misalnya, IOS,MACOS, dll.) | 
| platform | STRING | Platform aplikasi seperti yang terdaftar di project Firebase
(nilai yang valid: IOSatauANDROID) | 
| process_state | STRING | BACKGROUNDatauFOREGROUND | 
| storage | RECORD | Penyimpanan persisten perangkat | 
| storage.free | INT64 | Byte penyimpanan tersisa | 
| storage.used | INT64 | Byte penyimpanan yang digunakan | 
| threads | REPEATED RECORD | Thread yang ada pada saat peristiwa | 
| threads.blamed | BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error atau crash | 
| threads.code | INT64 | (Khusus aplikasi Apple) Kode error NSError yang dicatat khusus pada aplikasi | 
| threads.crash_address | INT64 | Alamat sinyal yang menyebabkan aplikasi error; hanya ada di thread native yang error | 
| threads.crashed | BOOLEAN | Apakah thread error | 
| threads.frames | REPEATED RECORD | Frame thread | 
| threads.frames.address | INT64 | Alamat dalam image biner yang berisi kode | 
| threads.frames.blamed | BOOLEAN | Apakah Crashlytics menentukan bahwa frame ini adalah penyebab error | 
| threads.frames.file | STRING | Nama file frame | 
| threads.frames.library | STRING | Nama tampilan library yang menyertakan frame | 
| threads.frames.line | INT64 | Nomor baris file frame | 
| threads.frames.offset | INT64 | Offset byte ke image biner yang berisi kode | 
| threads.frames.owner | STRING | Misalnya, DEVELOPER,VENDOR,RUNTIME,PLATFORM, atauSYSTEM | 
| threads.frames.symbol | STRING | Simbol terhidrasi, atau simbol mentah jika tidak terhidrasi | 
| threads.queue_name | STRING | (Khusus aplikasi Apple) Antrean tempat thread berjalan | 
| threads.signal_code | STRING | Kode sinyal yang menyebabkan aplikasi error; hanya ada di thread native yang error | 
| threads.signal_name | STRING | Nama sinyal yang menyebabkan aplikasi error, hanya ada di thread native yang error | 
| threads.subtitle | STRING | Subjudul thread | 
| threads.thread_name | STRING | Nama thread | 
| threads.title | STRING | Judul thread | 
| unity_metadata.debug_build | BOOLEAN | Jika ini adalah build debug | 
| unity_metadata.graphics_copy_texture_support | STRING | Dukungan untuk menyalin tekstur grafis seperti yang dijelaskan dalam Unity API | 
| unity_metadata.graphics_device_id | INT64 | ID perangkat grafis | 
| unity_metadata.graphics_device_name | STRING | Nama perangkat grafis | 
| unity_metadata.graphics_device_type | STRING | Jenis perangkat grafis | 
| unity_metadata.graphics_device_vendor_id | INT64 | ID vendor prosesor grafis | 
| unity_metadata.graphics_device_vendor | STRING | Vendor perangkat grafis | 
| unity_metadata.graphics_device_version | STRING | Versi perangkat grafis | 
| unity_metadata.graphics_max_texture_size | INT64 | Ukuran maksimum yang didedikasikan untuk rendering tekstur | 
| unity_metadata.graphics_memory_size_mb | INT64 | Memori grafis dalam MB | 
| unity_metadata.graphics_render_target_count | INT64 | Jumlah target rendering grafis | 
| unity_metadata.graphics_shader_level | INT64 | Tingkat shader grafis | 
| unity_metadata.processor_count | INT64 | Jumlah prosesor (core) | 
| unity_metadata.processor_frequency_mhz | INT64 | Frekuensi prosesor dalam MHz | 
| unity_metadata.processor_type | STRING | Jenis prosesor | 
| unity_metadata.screen_refresh_rate_hz | INT64 | Kecepatan refresh layar dalam Hz | 
| unity_metadata.screen_resolution_dpi | STRING | DPI layar sebagai angka floating point | 
| unity_metadata.screen_size_px | STRING | Ukuran layar dalam piksel, yang diformat sebagai lebar x tinggi | 
| unity_metadata.system_memory_size_mb | INT64 | Ukuran memori sistem dalam Mb | 
| unity_metadata.unity_version | STRING | Versi Unity yang berjalan di perangkat ini | 
| user | RECORD | (Opsional) Info yang dikumpulkan tentang pengguna aplikasi | 
| user.email | STRING | (Opsional) Alamat email pengguna | 
| user.id | STRING | (Opsional) ID khusus aplikasi yang terkait dengan pengguna | 
| user.name | STRING | (Opsional) Nama pengguna | 
| variant_id | STRING | Varian masalah yang terkait dengan peristiwa ini Perhatikan bahwa tidak semua peristiwa memiliki varian masalah terkait. | 
Set data sesi Firebase
Data sesi Firebase diekspor ke set data BigQuery bernama firebase_sessions. Set data mencakup seluruh project Anda, meski memiliki beberapa aplikasi.
Tabel
Secara default, Firebase membuat setiap tabel di dalam set data sesi Firebase untuk setiap aplikasi di project Anda yang ditautkan ke BigQuery.
Tabel diberi nama berdasarkan ID aplikasi (dengan tanda titik dikonversi menjadi
garis bawah) dan ditambahkan dengan platform aplikasi (_IOS atau _ANDROID).
Misalnya, data untuk aplikasi Android dengan nama paket com.google.test
akan berada dalam tabel bernama com_google_test_ANDROID.
Baris
Setiap baris dalam tabel mewakili peristiwa sesi yang terjadi.
Kolom
Jika ekspor streaming ke BigQuery diaktifkan, tabel real-time akan memiliki kolom yang sama dengan tabel batch.
Berikut adalah kolom dalam tabel untuk data sesi Firebase yang diekspor:
| Nama kolom | Jenis data | Deskripsi | 
|---|---|---|
| instance_id | STRING | ID penginstalan Firebase (FID) dari perangkat. Mengidentifikasi penginstalan aplikasi + perangkat yang unik | 
| session_id | STRING | ID unik sesi ini | 
| first_session_id | STRING | ID pertama dari serangkaian sesi yang diikuti sesi ini sejak aplikasi
        dimulai dingin. ID ini dapat digunakan untuk mengelompokkan semua sesi yang telah
        terjadi sejak cold start. Jika sesi ini adalah sesi pertama,
        kolom ini akan sama dengan session_id. | 
| session_index | INTEGER | Urutan sesi ini setelah aplikasi melakukan cold start. Untuk
        sesi pertama setelah cold start, nilainya adalah 0. Indeks
        akan bertambah setiap kali sesi dibuat tanpa terjadinya cold start
        (misalnya, setelah tidak ada aktivitas selama 30 menit). | 
| event_type | STRING | Jenis peristiwa yang terjadi dalam sesi (misalnya, SESSION_START) | 
| event_timestamp | TIMESTAMP | Waktu terjadinya peristiwa | 
| received_timestamp | TIMESTAMP | Waktu peristiwa diterima oleh server dari perangkat | 
| performance_data_collection_enabled | BOOLEAN | Apakah pengumpulan data Firebase Performance Monitoring SDK diaktifkan pada saat sesi | 
| crashlytics_data_collection_enabled | BOOLEAN | Apakah pengumpulan data Firebase Crashlytics SDK diaktifkan pada waktu sesi | 
| application | RECORD | Menjelaskan aplikasi | 
| application.build_version | STRING | Versi build aplikasi (misalnya, 1523456) | 
| application.display_version | STRING | Versi tampilan aplikasi (misalnya, 4.1.7) | 
| device | RECORD | Perangkat tempat peristiwa terjadi | 
| device.model | STRING | Model perangkat | 
| device.manufacturer | STRING | Produsen perangkat. Untuk aplikasi platform Apple, nilainya adalah NULL. | 
| operating_system | RECORD | Menjelaskan OS perangkat | 
| operating_system.display_version | STRING | Versi tampilan sistem operasi (misalnya, 10.2.1) | 
| operating_system.name | STRING | Nama sistem operasi | 
| operating_system.type | STRING | Jenis sistem operasi (misalnya IOS).
        Kolom ini hanya ditetapkan untuk perangkat Apple. | 
| operating_system.device_type | STRING | Jenis perangkat (misalnya, MOBILE,TABLET,TV) | 
Mengupgrade ke infrastruktur ekspor baru
Pada pertengahan Oktober 2024, Crashlytics meluncurkan infrastruktur baru untuk ekspor batch data Crashlytics ke BigQuery.
Semua project Firebase akan otomatis diupgrade ke infrastruktur ekspor batch baru paling cepat 15 September 2025. Anda dapat mengupgrade sebelum tanggal ini, tetapi pastikan tabel batch BigQuery Anda memenuhi prasyarat untuk mengupgrade.
Anda dapat mengupgrade ke infrastruktur baru, tetapi pastikan tabel batch BigQuery Anda memenuhi prasyarat untuk mengupgrade.
Menentukan apakah Anda menggunakan infrastruktur baru
Jika Anda mengaktifkan ekspor batch pada pertengahan Oktober 2024 atau yang lebih baru, project Firebase Anda akan otomatis menggunakan infrastruktur ekspor baru.
Anda dapat memeriksa infrastruktur yang digunakan project:
Buka konsol Google Cloud, dan jika
"konfigurasi transfer data" 
diberi label Firebase Crashlytics with Multi-Region Support, berarti project
Anda menggunakan infrastruktur ekspor baru.
Perbedaan penting antara infrastruktur ekspor lama dan infrastruktur ekspor baru
- Infrastruktur baru ini mendukung lokasi set data Crashlytics di luar Amerika Serikat. - Ekspor yang diaktifkan sebelum pertengahan Oktober 2024 dan diupgrade ke infrastruktur ekspor baru — Anda kini dapat secara opsional mengubah lokasi untuk ekspor data. 
- Ekspor yang diaktifkan pada pertengahan Oktober 2024 atau yang lebih baru — Anda diminta selama penyiapan untuk memilih lokasi ekspor data. 
 
- Infrastruktur baru tidak mendukung pengisian ulang data dari sebelum Anda mengaktifkan ekspor. - Infrastruktur lama mendukung pengisian ulang hingga 30 hari sebelum tanggal saat Anda mengaktifkan ekspor. 
- Infrastruktur baru mendukung pengisian ulang hingga 30 hari terakhir atau untuk tanggal terkini saat Anda mengaktifkan ekspor ke BigQuery (mana saja yang terkini). 
 
- Infrastruktur baru ini memberi nama tabel batch BigQuery menggunakan ID yang ditetapkan untuk Aplikasi Firebase Anda di project Firebase. - Infrastruktur lama menulis data ke tabel batch dengan nama berdasarkan ID paket atau nama paket dalam program biner aplikasi Anda. 
- Infrastruktur baru menulis data ke tabel batch dengan nama berdasarkan ID paket atau nama paket yang ditetapkan untuk Aplikasi Firebase terdaftar di project Firebase Anda. 
 
Langkah 1: Prasyarat untuk melakukan upgrade
- Pastikan tabel batch BigQuery yang ada menggunakan ID yang cocok dengan ID paket atau nama paket yang ditetapkan untuk Aplikasi Firebase terdaftar di project Firebase Anda. Jika tidak cocok, Anda mungkin mengalami gangguan pada data batch yang diekspor. Sebagian besar project akan berada dalam status yang tepat dan kompatibel, tetapi sebaiknya periksa sebelum mengupgrade. - Anda dapat menemukan semua Aplikasi Firebase yang terdaftar di project Firebase di konsol Firebase: Buka Project settings, lalu scroll ke kartu Your apps untuk melihat semua Aplikasi Firebase dan informasinya. 
- Anda dapat menemukan semua tabel batch BigQuery di halaman BigQuery di konsol Google Cloud. 
 - Misalnya, berikut adalah status ideal tempat Anda tidak akan mengalami masalah upgrade: - Anda memiliki tabel batch bernama - com_yourcompany_yourproject_IOSdan Aplikasi iOS+ Firebase dengan ID paket- com.yourcompany.yourprojectyang terdaftar di project Firebase.
- Anda memiliki tabel batch bernama - com_yourcompany_yourproject_ANDROIDdan Aplikasi Android Firebase dengan nama paket- com.yourcompany.yourprojectyang terdaftar di project Firebase.
 
- Jika Anda memiliki nama tabel batch yang tidak cocok dengan ID yang ditetapkan untuk Aplikasi Firebase terdaftar, ikuti petunjuknya di halaman ini nanti sebelum mengupgrade secara manual atau sebelum 15 September 2025 untuk menghindari gangguan pada ekspor batch Anda. 
Langkah 2: Mengupgrade ke infrastruktur baru secara manual
Jika Anda mengaktifkan ekspor batch sebelum pertengahan Oktober 2024, Anda dapat mengupgrade ke infrastruktur baru secara manual cukup dengan menonaktifkan ekspor data Crashlytics, lalu mengaktifkannya lagi di Firebase console.
Berikut adalah langkah-langkah detailnya:
- Di Firebase console, buka halaman Integrations. 
- Di kartu BigQuery, klik Manage. 
- Nonaktifkan penggeser Crashlytics untuk menonaktifkan ekspor. Jika diminta, konfirmasikan bahwa Anda ingin ekspor data dihentikan. 
- Segera aktifkan kembali penggeser Crashlytics untuk mengaktifkan kembali ekspor. Saat diminta, konfirmasikan bahwa Anda ingin mengekspor data. - Ekspor data Crashlytics Anda ke BigQuery kini menggunakan infrastruktur ekspor baru.