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