BigQuery में एक्सपोर्ट किए गए डेटा पर SQL क्वेरी चलाना

Crashlytics और (ज़रूरी नहीं) Firebase सेशन के डेटा को BigQuery में एक्सपोर्ट करने के बाद, डेटा का इस्तेमाल किया जा सकता है:

  • SQL क्वेरी का इस्तेमाल करके डेटा का विश्लेषण करना
    कस्टम रिपोर्ट और खास जानकारी जनरेट करने के लिए, अपने Crashlytics डेटा पर क्वेरी चलाई जा सकती हैं. इस तरह की कस्टम रिपोर्ट, Firebase कंसोल के Crashlytics डैशबोर्ड में उपलब्ध नहीं होती हैं. इसलिए, ये क्रैश डेटा का विश्लेषण करने और उसे समझने में आपकी मदद कर सकती हैं. इस पेज पर नीचे, उदाहरण के तौर पर दी गई क्वेरी का कलेक्शन देखें.

  • अलग-अलग डेटासेट से डेटा जोड़ना
    उदाहरण के लिए, अगर आपने डेटा एक्सपोर्ट करने की सुविधा सेट अप करते समय, Firebase सेशन का डेटा एक्सपोर्ट करने का विकल्प चुना है, तो क्रैश न होने वाले उपयोगकर्ताओं और क्रैश न होने वाले सेशन के बारे में बेहतर जानकारी पाई जा सकती है (उदाहरण क्वेरी देखें).Crashlytics इसके अलावा, Google Analytics से और Performance Monitoring जैसे अलग-अलग Firebase प्रॉडक्ट से डेटा एक्सपोर्ट किया जा सकता है. इसके बाद, उस डेटा को BigQuery में अपने Crashlytics डेटा के साथ जोड़ा और उसका विश्लेषण किया जा सकता है.

  • व्यू बनाना
    BigQuery यूज़र इंटरफ़ेस (यूआई) का इस्तेमाल करके, व्यू बनाया जा सकता है. यह एक वर्चुअल टेबल होती है, जिसे SQL क्वेरी के आधार पर तय किया जाता है. अलग-अलग तरह के व्यू और उन्हें बनाने के तरीके के बारे में ज़्यादा जानने के लिए, BigQuery दस्तावेज़ देखें.

डेटासेट स्कीमा के बारे में जानकारी के लिए, BigQuery में एक्सपोर्ट किए गए डेटा के लिए डेटासेट स्कीमा देखें.

BigQuery SQL के बारे में जानें

Crashlytics डेटा के लिए क्वेरी के उदाहरण

इस सेक्शन में, कुछ उदाहरण और उदाहरण क्वेरी दी गई हैं. इनसे पता चलता है कि एक्सपोर्ट किए गए Crashlytics डेटा और Firebase सेशन डेटा के साथ BigQuery SQL का इस्तेमाल कैसे किया जा सकता है.

पहला उदाहरण: 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: क्रैश की समस्या से प्रभावित उपयोगकर्ताओं की संख्या, देश के हिसाब से

आपकी टीम को नई रिलीज़ को रोल आउट करते समय, एक गंभीर बग का पता चला है. ऊपर दिए गए "सबसे ज़्यादा बार क्रैश होने की समस्या ढूंढें" उदाहरण में दी गई क्वेरी का इस्तेमाल करके, क्रैश होने की समस्या का आईडी पता लगाया जा सकता है. अब आपकी टीम यह देखना चाहती है कि क्या यह क्रैश, दुनिया भर के अलग-अलग देशों में मौजूद उपयोगकर्ताओं के लिए भी हुआ है.

इस क्वेरी को लिखने के लिए, आपकी टीम को यह काम करना होगा:

  1. Google Analytics के डेटा को BigQuery में एक्सपोर्ट करने की सुविधा चालू करें. प्रोजेक्ट के डेटा को BigQuery में एक्सपोर्ट करना लेख पढ़ें.

  2. अपने ऐप्लिकेशन को अपडेट करें, ताकि 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");
    
  3. ऐसी क्वेरी लिखें जो यूज़र आईडी फ़ील्ड का इस्तेमाल करके, 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;

आगे क्या करना है?