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