Crashlytics और (ज़रूरी नहीं) Firebase सेशन के डेटा को BigQuery में एक्सपोर्ट करने के बाद, डेटा का इस्तेमाल किया जा सकता है:
SQL क्वेरी का इस्तेमाल करके डेटा का विश्लेषण करना
कस्टम रिपोर्ट और खास जानकारी जनरेट करने के लिए, अपने Crashlytics डेटा पर क्वेरी चलाई जा सकती हैं. इस तरह की कस्टम रिपोर्ट, Firebase कंसोल के Crashlytics डैशबोर्ड में उपलब्ध नहीं होती हैं. इसलिए, ये क्रैश डेटा का विश्लेषण करने और उसे समझने में आपकी मदद कर सकती हैं. इस पेज पर नीचे, उदाहरण के तौर पर दी गई क्वेरी का कलेक्शन देखें.अलग-अलग डेटासेट से डेटा जोड़ना
उदाहरण के लिए, अगर आपने डेटा एक्सपोर्ट करने की सुविधा सेट अप करते समय, Firebase सेशन का डेटा एक्सपोर्ट करने का विकल्प चुना है, तो क्रैश न होने वाले उपयोगकर्ताओं और क्रैश न होने वाले सेशन के बारे में बेहतर जानकारी पाई जा सकती है (उदाहरण क्वेरी देखें).Crashlytics इसके अलावा, Google Analytics से और Performance Monitoring जैसे अलग-अलग Firebase प्रॉडक्ट से डेटा एक्सपोर्ट किया जा सकता है. इसके बाद, उस डेटा को BigQuery में अपने Crashlytics डेटा के साथ जोड़ा और उसका विश्लेषण किया जा सकता है.व्यू बनाना
BigQuery यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, व्यू बनाया जा सकता है. यह एक वर्चुअल टेबल होती है, जिसे SQL क्वेरी के आधार पर तय किया जाता है. अलग-अलग तरह के व्यू और उन्हें बनाने के तरीके के बारे में ज़्यादा जानने के लिए, BigQuery दस्तावेज़ देखें.
डेटासेट स्कीमा के बारे में जानकारी के लिए, BigQuery में एक्सपोर्ट किए गए डेटा के लिए डेटासेट स्कीमा देखें.
BigQuery SQL के बारे में जानें
अलग-अलग तरह की क्वेरी चलाने के बारे में जानें. इनमें इंटरैक्टिव क्वेरी जॉब, बैच क्वेरी जॉब, और लगातार चलने वाली क्वेरी जॉब शामिल हैं.
जानें कि BigQuery में, किन स्टेटमेंट और एसक्यूएल भाषाओं का इस्तेमाल किया जा सकता है.
एआई की मदद से क्वेरी लिखने की सुविधा (Gemini) का इस्तेमाल करने का तरीका जानें.
Crashlytics डेटा के लिए क्वेरी के उदाहरण
इस सेक्शन में, कुछ उदाहरण और उदाहरण क्वेरी दी गई हैं. इनसे पता चलता है कि एक्सपोर्ट किए गए Crashlytics डेटा और Firebase सेशन डेटा के साथ BigQuery SQL का इस्तेमाल कैसे किया जा सकता है.
- Firebase सेशन के डेटा का इस्तेमाल करके, क्रैश-फ़्री मेट्रिक कैलकुलेट करना
- हर दिन ऐप्लिकेशन के बंद होने की समस्या की संख्या
- सबसे ज़्यादा बार क्रैश होने की समस्याओं का पता लगाना
- क्रैश होने वाले 10 सबसे ज़्यादा डिवाइस
- कस्टम कुंजी के हिसाब से फ़िल्टर करना
- यूज़र आईडी एक्सट्रैक्ट करना
- क्रैश की किसी समस्या का सामना करने वाले सभी उपयोगकर्ताओं को ढूंढना
- ऐप्लिकेशन बंद होने की समस्या से प्रभावित उपयोगकर्ताओं की संख्या, देश के हिसाब से बांटी गई है
- आज अब तक की पांच मुख्य समस्याएं
- DATE से लेकर आज तक की पांच मुख्य समस्याएं
पहला उदाहरण: 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
दूसरा उदाहरण: दिन के हिसाब से क्रैश की संख्या
आपने ज़्यादा से ज़्यादा बग ठीक करने की कोशिश की है. अब आपको लगता है कि आपकी टीम, फ़ोटो शेयर करने वाले नए ऐप्लिकेशन को लॉन्च करने के लिए तैयार है. हालांकि, इससे पहले आपको पिछले महीने के हर दिन के क्रैश की संख्या की जांच करनी है. इससे आपको यह पक्का करने में मदद मिलेगी कि बग-बैश की वजह से, समय के साथ ऐप्लिकेशन ज़्यादा स्टेबल हो गया है.
यहां 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;
तीसरा उदाहरण: सबसे ज़्यादा क्रैश होने वाले ऐप्लिकेशन ढूंढना
आपको प्रोडक्शन प्लान को सही तरीके से प्राथमिकता देनी है. इसके लिए, आपको अपने ऐप्लिकेशन में सबसे ज़्यादा होने वाली 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;
चौथा उदाहरण: सबसे ज़्यादा क्रैश होने वाले 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;
पांचवां उदाहरण: कस्टम कुंजी के हिसाब से फ़िल्टर करना
आप एक गेम डेवलपर हैं. आपको यह जानना है कि आपके गेम के किस लेवल में सबसे ज़्यादा क्रैश होते हैं.
इस आंकड़े को ट्रैक करने के लिए, 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छठा उदाहरण: यूज़र आईडी निकालना
आपके पास 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: DATE से लेकर आज तक की पांच सबसे बड़ी समस्याएं
भरोसेमंद बैच डेटा में रीयलटाइम जानकारी जोड़ने के लिए, बैच और रीयलटाइम टेबल को स्टिचिंग क्वेरी के साथ भी जोड़ा जा सकता है. 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;
आगे क्या करना है?
एक्सपोर्ट किए गए डेटा और Looker Studio जैसी अलग-अलग Google Cloud सेवाओं का इस्तेमाल करके, कस्टम डैशबोर्ड बनाएं.
एक्सपोर्ट किए गए डेटा के लिए डेटासेट स्कीमा के बारे में जानें.