אחרי שמייצאים את נתוני Crashlytics ואת נתוני הסשנים של Firebase (אופציונלית) אל BigQuery, אפשר להתחיל לעבוד עם הנתונים:
ניתוח נתונים באמצעות שאילתות SQL
אתם יכולים להריץ שאילתות על נתוני Crashlytics כדי ליצור דוחות וסיכומים בהתאמה אישית. מכיוון שסוגי הדוחות המותאמים אישית האלה לא זמינים בלוח הבקרה Crashlytics של מסוף Firebase, הם יכולים להשלים את הניתוח שלכם ואת ההבנה של נתוני הקריסות. בהמשך הדף מופיעה אוסף של דוגמאות לשאילתות.שילוב נתונים ממערכי נתונים שונים
לדוגמה, אם בוחרים לייצא נתוני סשנים של Firebase כשמגדירים ייצוא נתונים של Crashlytics, אפשר לשפר את ההבנה של נתוני המשתמשים שלא נתקלו בקריסות והסשנים שלא נתקלו בקריסות (ראו דוגמה לשאילתה). בנוסף, אתם יכולים לייצא נתונים ממוצרי Firebase שונים (כמו Performance Monitoring) או מ-Google Analytics, ואז לצרף את הנתונים האלה לנתוני Crashlytics ולנתח אותם ב-BigQuery.יצירת תצוגות
באמצעות ממשק המשתמש של BigQuery, אפשר ליצור תצוגה, שהיא טבלה וירטואלית שמוגדרת על ידי שאילתת SQL. הוראות מפורטות על הסוגים השונים של תצוגות ועל אופן היצירה שלהן מופיעות במאמרי העזרה בנושא BigQuery.
פרטים על סכימת מערך הנתונים זמינים במאמר סכימת מערך הנתונים של נתונים מיוצאים ב-BigQuery.
מידע על BigQuery SQL
מידע על סוגי השאילתות שאפשר להריץ, כולל משימות של שאילתות אינטראקטיביות, משימות של שאילתות אצווה ומשימות של שאילתות רציפות.
שאילתות לדוגמה לנתוני Crashlytics
בקטע הזה מפורטות כמה דוגמאות לתרחישים ולשאילתות שמדגימות איך אפשר להשתמש ב-BigQuery SQL עם נתוני Crashlytics שיוצאו ועם נתוני סשנים של Firebase.
- חישוב מדדים של אפליקציות שלא קורסות באמצעות נתוני סשנים מ-Firebase
- תאונות לפי יום
- איתור הקריסות הנפוצות ביותר
- 10 המכשירים שבהם האפליקציה קורסת הכי הרבה
- סינון לפי מפתח מותאם אישית
- שליפת מזהי משתמשים
- איך מוצאים את כל המשתמשים שנתקלים בבעיה ספציפית של קריסה
- מספר המשתמשים שהושפעו מבעיית קריסה, עם פירוט לפי מדינה
- 5 הבעיות העיקריות עד עכשיו היום
- 5 הבעיות המובילות מאז תאריך, כולל היום
דוגמה 1: חישוב מדדים של אפליקציות שלא קורסות באמצעות נתוני סשנים ב-Firebase
בגרסה האחרונה, השקת שיפוץ משמעותי של האפליקציה כדי לטפל בקריסות בתהליך חשוב שעוברים המשתמשים. קיבלת ביקורות מצוינות מהמשתמשים, אבל היית רוצה לקבל הוכחה כמותית לכך שהאפליקציה יציבה יותר מבעבר.
מדדים שקשורים לקריסות יכולים לעזור לספק את המידע הזה. המדדים האלה הם מדדים חשובים שעוזרים לכם להבין את מצב האפליקציה. באמצעות נתוני הסשנים ואירועי Crashlytics ב-Firebase, אתם יכולים לחשב את המדדים האלה באמצעות שאילתה בסיסית.
אלה דוגמאות לשאילתות לאפליקציית 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. כדי לפתור את בעיות התאימות האפשריות, יצרתם שאילתה שמזהה את 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;
דוגמה 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 הבעיות העיקריות עד עכשיו היום
זוהי דוגמה לשאילתה של אפליקציה ל-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 הבעיות העיקריות מאז תאריך, כולל היום
אפשר גם לשלב את הטבלאות של נתוני האצווה ונתוני הזמן האמיתי באמצעות שאילתת שילוב, כדי להוסיף מידע בזמן אמת לנתוני האצווה המהימנים. מכיוון ש-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, כמו Looker Studio.