بعد تصدير بيانات Crashlytics وبيانات الجلسات في Firebase (اختياريًا) إلى BigQuery، يمكنك البدء في استخدام البيانات:
تحليل البيانات باستخدام طلبات بحث SQL
يمكنك تنفيذ طلبات بحث على بيانات Crashlytics لإنشاء تقارير وملخّصات مخصّصة. بما أنّ هذه الأنواع من التقارير المخصّصة غير متاحة في Crashlytics لوحة بيانات Firebase Console، يمكنها استكمال تحليلك لبيانات الأعطال وفهمها. يمكنك الاطّلاع على مجموعة من طلبات البحث النموذجية لاحقًا في هذه الصفحة.ربط البيانات من مجموعات بيانات مختلفة
على سبيل المثال، إذا اخترت تصدير بيانات الجلسات في Firebase عند إعداد Crashlytics تصدير البيانات، يمكنك تحسين فهم المستخدمين الذين لم يتعرّضوا لأي عطل والجلسات التي لم تشهد أي عطل (راجِع نموذج طلب البحث). يمكنك أيضًا تصدير البيانات من منتجات Firebase المختلفة (مثل Performance Monitoring) أو من Google Analytics ثم ربط هذه البيانات وتحليلها في BigQuery باستخدام بيانات Crashlytics.إنشاء طرق عرض
باستخدام واجهة مستخدم BigQuery، يمكنك إنشاء طريقة عرض، وهي جدول افتراضي محدّد بواسطة طلب بحث SQL. للحصول على تعليمات مفصّلة حول الأنواع المختلفة من طرق العرض وكيفية إنشائها، راجِع BigQuery مستندات.
لمعرفة تفاصيل حول مخطّط مجموعة البيانات، راجِع مخطّط مجموعة البيانات للبيانات التي تم تصديرها في BigQuery.
التعرّف على لغة BigQuery SQL
التعرّف على أنواع طلبات البحث التي يمكنك تنفيذها، بما في ذلك مهام طلبات البحث التفاعلية ومهام طلبات البحث المجمّعة ومهام طلبات البحث المستمرة
التعرّف على الـ عبارات واللغات الفرعية للغة SQL المتوافقة في BigQuery.
التعرّف على كيفية كتابة طلبات البحث باستخدام مساعدة مستندة إلى الذكاء الاصطناعي (Gemini).
أمثلة على طلبات البحث عن بيانات Crashlytics
يقدّم هذا القسم بعض الأمثلة على الحالات وطلبات البحث التي توضّح كيفية استخدام لغة BigQuery مع بيانات Crashlytics وبيانات الجلسات في Firebase التي تم تصديرها.
- حساب المقاييس التي لم تشهد أي عطل باستخدام بيانات الجلسات في Firebase
- الأعطال حسب اليوم
- العثور على الأعطال الأكثر انتشارًا
- أفضل 10 أجهزة شهدت أعطالاً
- الفلترة حسب المفتاح المخصّص
- استخراج أرقام تعريف المستخدمين
- العثور على جميع المستخدمين الذين يواجهون مشكلة عطل معيّنة
- عدد المستخدمين المتأثّرين بمشكلة عطل، مصنّفًا حسب البلد
- أفضل 5 مشاكل حتى الآن
- أفضل 5 مشاكل منذ "التاريخ"، بما في ذلك اليوم
المثال 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. للتغلّب على المخاوف الوشيكة بشأن التوافق، يمكنك إنشاء طلب بحث يحدّد الأجهزة العشرة التي شهدت أكبر عدد من الأعطال في الأسبوع الماضي (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: أفضل 5 مشاكل حتى الآن
Crashlyticsفي ما يلي مثال على طلب بحث لتطبيق 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: أفضل 5 مشاكل منذ "التاريخ"، بما في ذلك اليوم
Crashlyticsيمكنك أيضًا الجمع بين الجداول المجمّعة والجداول في الوقت الفعلي باستخدام طلب بحث للربط لإضافة معلومات في الوقت الفعلي إلى البيانات المجمّعة الموثوق بها. بما أنّ 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 المختلفة، مثل Data Studio
التعرّف على مخطّط مجموعة البيانات للبيانات التي تم تصديرها