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