अपने Crashlytics और (ज़रूरी नहीं) Firebase के सेशन डेटा को BigQuery में एक्सपोर्ट करने के बाद, इस डेटा का इस्तेमाल किया जा सकता है:
SQL क्वेरी का इस्तेमाल करके डेटा का विश्लेषण करना
कस्टम रिपोर्ट और खास जानकारी जनरेट करने के लिए, Crashlytics के डेटा पर क्वेरी चलाई जा सकती हैं. इस तरह की कस्टम रिपोर्ट, Crashlytics डैशबोर्ड में उपलब्ध नहीं होती हैं. इसलिए, ये रिपोर्ट क्रैश डेटा के विश्लेषण और उसे समझने में आपकी मदद कर सकती हैं.Firebase इस पेज पर, क्वेरी के उदाहरणों का कलेक्शन देखें.अलग-अलग डेटासेट से मिले डेटा को जोड़ना
उदाहरण के लिए, अगर डेटा को एक्सपोर्ट करने की सुविधा सेट अप करते समय, Firebase के सेशन डेटा को एक्सपोर्ट करने का विकल्प चुना जाता है, तो क्रैश न होने वाले उपयोगकर्ताओं और क्रैश न होने वाले सेशन के बारे में ज़्यादा जानकारी पाई जा सकती है. इसके लिए, क्वेरी का उदाहरण देखें.Crashlytics इसके अलावा, Firebase के अलग-अलग प्रॉडक्ट (जैसे, Performance Monitoring) या Google Analytics से डेटा एक्सपोर्ट किया जा सकता है. इसके बाद, इस डेटा को BigQuery में Crashlytics के डेटा के साथ जोड़ा जा सकता है और इसका विश्लेषण किया जा सकता है.व्यू बनाना
BigQuery यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, व्यू बनाया जा सकता है. यह एक वर्चुअल टेबल होती है, जिसे SQL क्वेरी के आधार पर तय किया जाता है. अलग-अलग तरह के व्यू और उन्हें बनाने के तरीके के बारे में ज़्यादा जानने के लिए, BigQuery दस्तावेज़ देखें.
डेटासेट के स्कीमा के बारे में जानने के लिए, एक्सपोर्ट किए गए डेटा का डेटासेट स्कीमा BigQuery देखें.
BigQuery SQL के बारे में जानकारी
क्वेरी के टाइप के बारे में जानें, इनमें इंटरैक्टिव क्वेरी जॉब, बैच क्वेरी जॉब, और लगातार क्वेरी जॉब शामिल हैं.
BigQuery में इस्तेमाल किए जा सकने वाले स्टेटमेंट और SQL की भाषाओं के बारे में जानेंBigQuery.
एआई की मदद से काम करने वाले टूल (Gemini) का इस्तेमाल करके, क्वेरी लिखने का तरीका जानें .
Crashlytics डेटा के लिए क्वेरी के उदाहरण
इस सेक्शन में, कुछ उदाहरण दिए गए हैं. इनमें, क्वेरी के उदाहरण भी शामिल हैं. इनसे पता चलता है कि एक्सपोर्ट किए गए Crashlytics डेटा और Firebase के सेशन डेटा के साथ, BigQuery SQL का इस्तेमाल कैसे किया जा सकता है.
- Firebase के सेशन डेटा का इस्तेमाल करके, क्रैश न होने वाली मेट्रिक का हिसाब लगाना
- दिन के हिसाब से क्रैश की संख्या
- सबसे ज़्यादा होने वाले क्रैश ढूंढना
- सबसे ज़्यादा क्रैश होने वाले 10 डिवाइस
- कस्टम कुंजी के हिसाब से फ़िल्टर करना
- यूज़र आईडी निकालना
- किसी खास क्रैश की समस्या का सामना करने वाले सभी उपयोगकर्ताओं को ढूंढना
- किसी क्रैश की समस्या से प्रभावित उपयोगकर्ताओं की संख्या, देश के हिसाब से ब्रेकडाउन
- आज अब तक की पांच सबसे बड़ी समस्याएं
- तारीख से लेकर आज तक की पांच सबसे बड़ी समस्याएं
उदाहरण 1: Firebase के सेशन डेटा का इस्तेमाल करके, क्रैश न होने वाली मेट्रिक का हिसाब लगाना
अपने ऐप्लिकेशन के नए वर्शन में, आपने उपयोगकर्ता के अहम सफ़र में होने वाले क्रैश की समस्याओं को हल करने के लिए, ऐप्लिकेशन में बड़ा बदलाव किया है. आपको उपयोगकर्ताओं से शानदार समीक्षाएं मिली हैं, लेकिन आपको इस बात का सबूत चाहिए कि आपका ऐप्लिकेशन पहले से ज़्यादा स्थिर है.
क्रैश न होने वाली मेट्रिक से यह जानकारी मिल सकती है. ये मेट्रिक, अहम आकलन हैं. इनसे आपको अपने ऐप्लिकेशन की परफ़ॉर्मेंस के बारे में पता चलता है. Firebase के सेशन डेटा और Crashlytics इवेंट की मदद से, सामान्य क्वेरी का इस्तेमाल करके इन मेट्रिक का हिसाब लगाया जा सकता है.
यहां Android ऐप्लिकेशन के लिए क्वेरी के उदाहरण दिए गए हैं. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और ANDROID का इस्तेमाल न करें.
किसी खास वर्शन के लिए, क्रैश न होने वाले उपयोगकर्ताओं की संख्या:
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
पिछले हफ़्ते (पिछले 168 घंटों) में, क्रैश न होने वाले सेशन की संख्या:
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
उदाहरण 2: दिन के हिसाब से क्रैश की संख्या
ज़्यादा से ज़्यादा बग ठीक करने के बाद, आपको लगता है कि आपकी टीम, फ़ोटो शेयर करने वाला नया ऐप्लिकेशन लॉन्च करने के लिए तैयार है. हालांकि, लॉन्च करने से पहले, आपको पिछले महीने के हर दिन होने वाले क्रैश की संख्या की जांच करनी है, ताकि यह पक्का किया जा सके कि बग ठीक करने की प्रोसेस के बाद, ऐप्लिकेशन पहले से ज़्यादा स्थिर हो गया है.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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;
उदाहरण 3: सबसे ज़्यादा होने वाले क्रैश ढूंढना
प्रॉडक्शन प्लान को सही तरीके से प्राथमिकता देने के लिए, आपको अपने ऐप्लिकेशन में सबसे ज़्यादा होने वाले 10 क्रैश ढूंढने हैं. इसके लिए, ऐसी क्वेरी जनरेट करें जिससे डेटा के काम के पॉइंट मिलें.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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;
उदाहरण 4: सबसे ज़्यादा क्रैश होने वाले 10 डिवाइस
फ़ॉल, नए फ़ोन का सीज़न है! आपकी कंपनी को पता है कि इसका मतलब है कि डिवाइस से जुड़ी नई समस्याओं का सीज़न भी शुरू हो गया है. खास तौर पर, Android के लिए. डिवाइस की कंपैटबिलटी से जुड़ी समस्याओं से बचने के लिए, आपने एक क्वेरी तैयार की है. इससे उन 10 डिवाइस की पहचान की जा सकती है जिनमें पिछले हफ़्ते (168 घंटों) में सबसे ज़्यादा क्रैश हुए हैं.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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;
उदाहरण 5: कस्टम कुंजी के हिसाब से फ़िल्टर करना
आप गेम डेवलपर हैं और आपको यह जानना है कि आपके गेम के किस लेवल पर सबसे ज़्यादा क्रैश होते हैं.
इस आंकड़े को ट्रैक करने के लिए, आपने एक कस्टम Crashlytics कुंजी
(iOS+ |
Android |
Flutter |
Unity
)
सेट की है. इसे current_level कहा जाता है. साथ ही, उपयोगकर्ता के हर नए लेवल पर पहुंचने पर, इसे अपडेट किया जाता है.
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
Java
Crashlytics.setInt("current_level", 3);
BigQuery में एक्सपोर्ट किए गए डेटा में, इस कुंजी का इस्तेमाल करके, हर क्रैश इवेंट से जुड़े current_level की वैल्यू के डिस्ट्रिब्यूशन की रिपोर्ट जनरेट करने के लिए क्वेरी लिखी जा सकती है.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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 DESCउदाहरण 6: यूज़र आईडी निकालना
आपका Android ऐप्लिकेशन, अर्ली ऐक्सेस में है. ज़्यादातर उपयोगकर्ताओं को यह ऐप्लिकेशन पसंद है, लेकिन तीन उपयोगकर्ताओं को असामान्य रूप से ज़्यादा क्रैश की समस्या हुई है. समस्या की वजह जानने के लिए, आपने एक क्वेरी लिखी है. इससे उन उपयोगकर्ताओं के यूज़र आईडी का इस्तेमाल करके, उनके सभी क्रैश इवेंट का डेटा निकाला जा सकता है.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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
उदाहरण 7: किसी खास क्रैश की समस्या का सामना करने वाले सभी उपयोगकर्ताओं को ढूंढना
आपकी टीम ने गलती से, बीटा टेस्टर के एक ग्रुप के लिए, एक अहम बग रिलीज़ कर दिया है. आपकी टीम ने, ऊपर दिए गए "सबसे ज़्यादा होने वाले क्रैश ढूंढना" उदाहरण में दी गई क्वेरी का इस्तेमाल करके, क्रैश की समस्या के आईडी की पहचान कर ली है. अब आपकी टीम, एक क्वेरी चलाना चाहती है, ताकि उन ऐप्लिकेशन उपयोगकर्ताओं की सूची निकाली जा सके जो इस क्रैश से प्रभावित हुए हैं.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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;उदाहरण 8: किसी क्रैश की समस्या से प्रभावित उपयोगकर्ताओं की संख्या, देश के हिसाब से ब्रेकडाउन
आपकी टीम को नए वर्शन के रोलआउट के दौरान, एक अहम बग मिला है. आपने, ऊपर दिए गए "सबसे ज़्यादा होने वाले क्रैश ढूंढना" उदाहरण में दी गई क्वेरी का इस्तेमाल करके, क्रैश की समस्या के आईडी की पहचान कर ली है. अब आपकी टीम यह देखना चाहती है कि क्या यह क्रैश, दुनिया भर के अलग-अलग देशों में मौजूद उपयोगकर्ताओं तक फैल गया है.
इस क्वेरी को लिखने के लिए, आपकी टीम को यह काम करना होगा:
Google Analytics डेटा को BigQuery में एक्सपोर्ट करने की सुविधा चालू करना. प्रोजेक्ट के डेटा को BigQuery में एक्सपोर्ट करना लेख देखें.
अपने ऐप्लिकेशन को अपडेट करना, ताकि Google Analytics SDK और 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");ऐसी क्वेरी लिखना जिसमें यूज़र आईडी फ़ील्ड का इस्तेमाल करके, Google Analytics डेटासेट में मौजूद इवेंट को Crashlytics डेटासेट में मौजूद क्रैश के साथ जोड़ा जा सके.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और
IOSका इस्तेमाल करें. इसके अलावा, पैकेज के नाम और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
उदाहरण 9: आज अब तक की पांच सबसे बड़ी समस्याएं
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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;
उदाहरण 10: तारीख से लेकर आज तक की पांच सबसे बड़ी समस्याएं
इसके अलावा, बैच और रीयल-टाइम टेबल को स्टिचिंग क्वेरी के साथ जोड़ा जा सकता है, ताकि भरोसेमंद बैच डेटा में रीयल-टाइम जानकारी जोड़ी जा सके. event_id प्राइमरी
कुंजी है. इसलिए, दोनों
टेबल में मौजूद किसी भी सामान्य इवेंट को हटाने के लिए, DISTINCT event_id का इस्तेमाल किया जा सकता है.
यहां Android ऐप्लिकेशन के लिए क्वेरी का उदाहरण दिया गया है. iOS ऐप्लिकेशन के लिए, उसके बंडल आईडी और IOS का इस्तेमाल करें. इसके अलावा, पैकेज के नाम और 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;
आगे क्या करना है?
कस्टम डैशबोर्ड बनाना एक्सपोर्ट किए गए डेटा और अलग-अलग Google Cloud सेवाओं, जैसे कि Looker Studio का इस्तेमाल करके.
एक्सपोर्ट किए गए डेटा के डेटासेट स्कीमा के बारे में जानना.