بعد از اینکه دادههای جلسات Crashlytics و (اختیاری) Firebase خود را به BigQuery صادر کردید، میتوانید کار با دادهها را شروع کنید:
تجزیه و تحلیل دادهها با استفاده از کوئریهای SQL
شما میتوانید کوئریهایی را روی دادههای Crashlytics خود اجرا کنید تا گزارشها و خلاصههای سفارشی تولید کنید. از آنجایی که این نوع گزارشهای سفارشی در داشبورد Crashlytics کنسول Firebase در دسترس نیستند، میتوانند تجزیه و تحلیل و درک شما از دادههای خرابی را تکمیل کنند. مجموعه کوئریهای نمونه را در ادامه همین صفحه مشاهده کنید.اتصال دادهها از مجموعه دادههای مختلف
برای مثال، اگر هنگام تنظیم خروجی دادههای Crashlytics ، خروجی گرفتن از دادههای جلسات Firebase را انتخاب کنید، میتوانید درک بهتری از کاربران بدون خرابی و جلسات بدون خرابی داشته باشید (به مثال query مراجعه کنید). همچنین، میتوانید دادهها را از محصولات مختلف Firebase (مانند Performance Monitoring ) یا از Google Analytics خروجی بگیرید و سپس آن دادهها را در BigQuery با دادههای Crashlytics خود ادغام و تجزیه و تحلیل کنید.ایجاد نماها
با استفاده از رابط کاربری BigQuery ، میتوانید یک نما (view) ایجاد کنید که یک جدول مجازی است که توسط یک کوئری SQL تعریف میشود. برای دستورالعملهای دقیق در مورد انواع مختلف نماها و نحوه ایجاد آنها، به مستندات BigQuery مراجعه کنید.
برای جزئیات بیشتر در مورد طرحواره مجموعه داده، به طرحواره مجموعه داده برای دادههای صادر شده در BigQuery مراجعه کنید.
آشنایی با BigQuery SQL
در مورد انواع پرسوجوهایی که میتوانید اجرا کنید ، از جمله پرسوجوهای تعاملی، پرسوجوهای دستهای و پرسوجوهای پیوسته، اطلاعات کسب کنید.
درباره دستورات پشتیبانیشده و گویشهای SQL در BigQuery اطلاعات کسب کنید.
یاد بگیرید که چگونه با استفاده از دستیار مبتنی بر هوش مصنوعی ( Gemini ) پرسوجو بنویسید .
مثالهایی از پرسوجوها برای دادههای Crashlytics
این بخش چند موقعیت و نمونه کوئری ارائه میدهد که نشان میدهد چگونه میتوانید BigQuery SQL با دادههای Crashlytics و دادههای جلسات Firebase صادر شده خود استفاده کنید.
- محاسبه معیارهای بدون خرابی با استفاده از دادههای جلسات Firebase
- تصادفات در روز
- فراگیرترین خرابیها را پیدا کنید
- 10 دستگاه برتر که از کار میافتند
- فیلتر بر اساس کلید سفارشی
- استخراج شناسههای کاربری
- پیدا کردن تمام کاربرانی که با یک مشکل خرابی خاص مواجه هستند
- تعداد کاربرانی که تحت تأثیر مشکل خرابی قرار گرفتهاند، به تفکیک کشور
- ۵ موضوع برتر امروز تا این لحظه
- ۵ شماره برتر از DATE، شامل امروز
مثال ۱: محاسبه معیارهای بدون خرابی با استفاده از دادههای جلسات Firebase
در آخرین نسخه خود، شما یک بهروزرسانی اساسی در برنامه خود انجام دادهاید تا مشکلات مربوط به خرابیها در یک سفر کاربری حیاتی را برطرف کنید. شما نظرات فوقالعادهای از کاربران دریافت کردهاید، اما به شواهد کمی نیاز دارید که نشان دهد برنامه شما نسبت به قبل پایدارتر شده است.
معیارهای بدون خرابی میتوانند به ارائه این اطلاعات کمک کنند. این معیارها، معیارهای مهمی هستند که به شما در درک سلامت کلی برنامهتان کمک میکنند. با دادههای جلسات Firebase و رویدادهای Crashlytics ، میتوانید این معیارها را با یک پرسوجوی ساده محاسبه کنید.
در اینجا نمونههایی از کوئریها برای یک برنامه اندروید آورده شده است. برای یک برنامه 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
مثال ۲: خرابیها بر اساس روز
بعد از تلاش برای رفع هرچه بیشتر اشکالات، فکر میکنید تیم شما بالاخره آماده است تا برنامه جدید اشتراکگذاری عکس شما را راهاندازی کند. قبل از انجام این کار، میخواهید تعداد خرابیهای روزانه را در ماه گذشته بررسی کنید تا مطمئن شوید که رفع اشکالات، برنامه را در طول زمان پایدارتر کرده است.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 مورد از رایجترین خرابیها را در برنامه خود پیدا کنید. شما یک پرسوجو ایجاد میکنید که نکات مربوط به دادهها را ارائه میدهد.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 دستگاهی را که بیشترین خرابی را در هفته گذشته (168 ساعت) تجربه کردهاند، شناسایی میکند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 تنظیم میکنید و هر بار که کاربر به یک سطح جدید میرسد، آن را بهروزرسانی میکنید.
سویفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
هدف-سی
CrashlyticsKit setIntValue:3 forKey:@"current_level";
جاوا
Crashlytics.setInt("current_level", 3);
با استفاده از آن کلید در خروجی خود به BigQuery ، میتوانید یک کوئری بنویسید تا توزیع مقادیر current_level مرتبط با هر رویداد خرابی را گزارش دهد.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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مثال ۶: استخراج شناسههای کاربری
شما یک برنامه اندروید در مرحله دسترسی زودهنگام دارید. اکثر کاربران شما آن را دوست دارند، اما سه نفر از آنها تعداد غیرمعمولی از خرابیها را تجربه کردهاند. برای رسیدن به ریشه مشکل، شما یک کوئری مینویسید که تمام رویدادهای خرابی را برای آن کاربران، با استفاده از شناسه کاربری آنها، استخراج میکند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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
مثال ۷: یافتن تمام کاربرانی که با یک مشکل خرابی خاص مواجه هستند
تیم شما بهطور تصادفی یک اشکال بحرانی را برای گروهی از آزمایشکنندگان بتا منتشر کرده است. تیم شما توانست با استفاده از پرسوجوی مثال «یافتن فراگیرترین خرابیها» در بالا، شناسه مشکل خرابی خاص را شناسایی کند. اکنون تیم شما میخواهد یک پرسوجو برای استخراج لیست کاربران برنامه که تحت تأثیر این خرابی قرار گرفتهاند، اجرا کند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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;مثال ۸: تعداد کاربرانی که تحت تأثیر مشکل خرابی قرار گرفتهاند، به تفکیک کشور
تیم شما در طول انتشار یک نسخه جدید، یک اشکال بحرانی را شناسایی کرده است. شما توانستید از پرس و جوی مثال "یافتن فراگیرترین خرابیها" در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کنید. تیم شما اکنون میخواهد ببیند که آیا این خرابی به کاربران در کشورهای مختلف جهان سرایت کرده است یا خیر.
برای نوشتن این پرس و جو، تیم شما باید موارد زیر را انجام دهد:
فعال کردن خروجی گرفتن از دادههای Google Analytics به BigQuery . به بخش خروجی گرفتن از دادههای پروژه به BigQuery مراجعه کنید.
برنامه خود را بهروزرسانی کنید تا یک شناسه کاربری را هم به Google Analytics SDK و هم به Crashlytics SDK ارسال کند.
سویفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");هدف-سی
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";جاوا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");یک کوئری بنویسید که از فیلد شناسه کاربری برای اتصال رویدادهای مجموعه داده Google Analytics به رویدادهای خرابی در مجموعه داده Crashlytics استفاده کند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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
مثال ۹: ۵ شماره برتر تا به امروز
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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;
مثال ۱۰: ۵ شماره برتر از تاریخ DATE، شامل امروز
همچنین میتوانید جداول batch و realtime را با یک کوئری stitching ترکیب کنید تا اطلاعات realtime را به دادههای batch قابل اعتماد اضافه کنید. از آنجایی که event_id یک کلید اصلی است، میتوانید DISTINCT event_id برای dedupe کردن هرگونه رویداد مشترک از دو جدول استفاده کنید.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 ، داشبوردهای سفارشی بسازید .
درباره طرحواره مجموعه داده برای دادههای صادر شده اطلاعات کسب کنید.
بعد از اینکه دادههای جلسات Crashlytics و (اختیاری) Firebase خود را به BigQuery صادر کردید، میتوانید کار با دادهها را شروع کنید:
تجزیه و تحلیل دادهها با استفاده از کوئریهای SQL
شما میتوانید کوئریهایی را روی دادههای Crashlytics خود اجرا کنید تا گزارشها و خلاصههای سفارشی تولید کنید. از آنجایی که این نوع گزارشهای سفارشی در داشبورد Crashlytics کنسول Firebase در دسترس نیستند، میتوانند تجزیه و تحلیل و درک شما از دادههای خرابی را تکمیل کنند. مجموعه کوئریهای نمونه را در ادامه همین صفحه مشاهده کنید.اتصال دادهها از مجموعه دادههای مختلف
برای مثال، اگر هنگام تنظیم خروجی دادههای Crashlytics ، خروجی گرفتن از دادههای جلسات Firebase را انتخاب کنید، میتوانید درک بهتری از کاربران بدون خرابی و جلسات بدون خرابی داشته باشید (به مثال query مراجعه کنید). همچنین، میتوانید دادهها را از محصولات مختلف Firebase (مانند Performance Monitoring ) یا از Google Analytics خروجی بگیرید و سپس آن دادهها را در BigQuery با دادههای Crashlytics خود ادغام و تجزیه و تحلیل کنید.ایجاد نماها
با استفاده از رابط کاربری BigQuery ، میتوانید یک نما (view) ایجاد کنید که یک جدول مجازی است که توسط یک کوئری SQL تعریف میشود. برای دستورالعملهای دقیق در مورد انواع مختلف نماها و نحوه ایجاد آنها، به مستندات BigQuery مراجعه کنید.
برای جزئیات بیشتر در مورد طرحواره مجموعه داده، به طرحواره مجموعه داده برای دادههای صادر شده در BigQuery مراجعه کنید.
آشنایی با BigQuery SQL
در مورد انواع پرسوجوهایی که میتوانید اجرا کنید ، از جمله پرسوجوهای تعاملی، پرسوجوهای دستهای و پرسوجوهای پیوسته، اطلاعات کسب کنید.
درباره دستورات پشتیبانیشده و گویشهای SQL در BigQuery اطلاعات کسب کنید.
یاد بگیرید که چگونه با استفاده از دستیار مبتنی بر هوش مصنوعی ( Gemini ) پرسوجو بنویسید .
مثالهایی از پرسوجوها برای دادههای Crashlytics
این بخش چند موقعیت و نمونه کوئری ارائه میدهد که نشان میدهد چگونه میتوانید BigQuery SQL با دادههای Crashlytics و دادههای جلسات Firebase صادر شده خود استفاده کنید.
- محاسبه معیارهای بدون خرابی با استفاده از دادههای جلسات Firebase
- تصادفات در روز
- فراگیرترین خرابیها را پیدا کنید
- 10 دستگاه برتر که از کار میافتند
- فیلتر بر اساس کلید سفارشی
- استخراج شناسههای کاربری
- پیدا کردن تمام کاربرانی که با یک مشکل خرابی خاص مواجه هستند
- تعداد کاربرانی که تحت تأثیر مشکل خرابی قرار گرفتهاند، به تفکیک کشور
- ۵ موضوع برتر امروز تا این لحظه
- ۵ شماره برتر از DATE، شامل امروز
مثال ۱: محاسبه معیارهای بدون خرابی با استفاده از دادههای جلسات Firebase
در آخرین نسخه خود، شما یک بهروزرسانی اساسی در برنامه خود انجام دادهاید تا مشکلات مربوط به خرابیها در یک سفر کاربری حیاتی را برطرف کنید. شما نظرات فوقالعادهای از کاربران دریافت کردهاید، اما به شواهد کمی نیاز دارید که نشان دهد برنامه شما نسبت به قبل پایدارتر شده است.
معیارهای بدون خرابی میتوانند به ارائه این اطلاعات کمک کنند. این معیارها، معیارهای مهمی هستند که به شما در درک سلامت کلی برنامهتان کمک میکنند. با دادههای جلسات Firebase و رویدادهای Crashlytics ، میتوانید این معیارها را با یک پرسوجوی ساده محاسبه کنید.
در اینجا نمونههایی از کوئریها برای یک برنامه اندروید آورده شده است. برای یک برنامه 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
مثال ۲: خرابیها بر اساس روز
بعد از تلاش برای رفع هرچه بیشتر اشکالات، فکر میکنید تیم شما بالاخره آماده است تا برنامه جدید اشتراکگذاری عکس شما را راهاندازی کند. قبل از انجام این کار، میخواهید تعداد خرابیهای روزانه را در ماه گذشته بررسی کنید تا مطمئن شوید که رفع اشکالات، برنامه را در طول زمان پایدارتر کرده است.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 مورد از رایجترین خرابیها را در برنامه خود پیدا کنید. شما یک پرسوجو ایجاد میکنید که نکات مربوط به دادهها را ارائه میدهد.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 دستگاهی را که بیشترین خرابی را در هفته گذشته (168 ساعت) تجربه کردهاند، شناسایی میکند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 تنظیم میکنید و هر بار که کاربر به یک سطح جدید میرسد، آن را بهروزرسانی میکنید.
سویفت
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
هدف-سی
CrashlyticsKit setIntValue:3 forKey:@"current_level";
جاوا
Crashlytics.setInt("current_level", 3);
با استفاده از آن کلید در خروجی خود به BigQuery ، میتوانید یک کوئری بنویسید تا توزیع مقادیر current_level مرتبط با هر رویداد خرابی را گزارش دهد.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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مثال ۶: استخراج شناسههای کاربری
شما یک برنامه اندروید در مرحله دسترسی زودهنگام دارید. اکثر کاربران شما آن را دوست دارند، اما سه نفر از آنها تعداد غیرمعمولی از خرابیها را تجربه کردهاند. برای رسیدن به ریشه مشکل، شما یک کوئری مینویسید که تمام رویدادهای خرابی را برای آن کاربران، با استفاده از شناسه کاربری آنها، استخراج میکند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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
مثال ۷: یافتن تمام کاربرانی که با یک مشکل خرابی خاص مواجه هستند
تیم شما بهطور تصادفی یک اشکال بحرانی را برای گروهی از آزمایشکنندگان بتا منتشر کرده است. تیم شما توانست با استفاده از پرسوجوی مثال «یافتن فراگیرترین خرابیها» در بالا، شناسه مشکل خرابی خاص را شناسایی کند. اکنون تیم شما میخواهد یک پرسوجو برای استخراج لیست کاربران برنامه که تحت تأثیر این خرابی قرار گرفتهاند، اجرا کند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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;مثال ۸: تعداد کاربرانی که تحت تأثیر مشکل خرابی قرار گرفتهاند، به تفکیک کشور
تیم شما در طول انتشار یک نسخه جدید، یک اشکال بحرانی را شناسایی کرده است. شما توانستید از پرس و جوی مثال "یافتن فراگیرترین خرابیها" در بالا برای شناسایی شناسه مشکل خرابی خاص استفاده کنید. تیم شما اکنون میخواهد ببیند که آیا این خرابی به کاربران در کشورهای مختلف جهان سرایت کرده است یا خیر.
برای نوشتن این پرس و جو، تیم شما باید موارد زیر را انجام دهد:
فعال کردن خروجی گرفتن از دادههای Google Analytics به BigQuery . به بخش خروجی گرفتن از دادههای پروژه به BigQuery مراجعه کنید.
برنامه خود را بهروزرسانی کنید تا یک شناسه کاربری را هم به Google Analytics SDK و هم به Crashlytics SDK ارسال کند.
سویفت
Crashlytics.sharedInstance().setUserIdentifier("123456789"); Analytics.setUserID("123456789");هدف-سی
CrashlyticsKit setUserIdentifier:@"123456789"; FIRAnalytics setUserID:@"12345678 9";جاوا
Crashlytics.setUserIdentifier("123456789"); mFirebaseAnalytics.setUserId("123456789");یک کوئری بنویسید که از فیلد شناسه کاربری برای اتصال رویدادهای مجموعه داده Google Analytics به رویدادهای خرابی در مجموعه داده Crashlytics استفاده کند.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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
مثال ۹: ۵ شماره برتر تا به امروز
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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;
مثال ۱۰: ۵ شماره برتر از تاریخ DATE، شامل امروز
همچنین میتوانید جداول batch و realtime را با یک کوئری stitching ترکیب کنید تا اطلاعات realtime را به دادههای batch قابل اعتماد اضافه کنید. از آنجایی که event_id یک کلید اصلی است، میتوانید DISTINCT event_id برای dedupe کردن هرگونه رویداد مشترک از دو جدول استفاده کنید.
در اینجا یک نمونه کوئری برای یک برنامه اندروید آورده شده است. برای یک برنامه 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 ، داشبوردهای سفارشی بسازید .
درباره طرحواره مجموعه داده برای دادههای صادر شده اطلاعات کسب کنید.