BigQuery-এ আপনার Crashlytics এবং (ঐচ্ছিকভাবে) Firebase সেশন ডেটা এক্সপোর্ট করার পরে, আপনি ডেটা নিয়ে কাজ শুরু করতে পারবেন:
SQL কোয়েরি ব্যবহার করে ডেটা বিশ্লেষণ করা
কাস্টম রিপোর্ট ও সারসংক্ষেপ তৈরি করতে, আপনার Crashlytics ডেটার উপর কোয়েরি চালাতে পারবেন। এই ধরনের কাস্টম রিপোর্ট Firebase কনসোলের Crashlyticsড্যাশবোর্ডে উপলভ্য না থাকলেও, ক্র্যাশ ডেটা বিশ্লেষণ ও বোঝার ক্ষেত্রে এগুলি সহায়ক হতে পারে। এই পৃষ্ঠায় পরে কোয়েরির উদাহরণ দেখুন।বিভিন্ন ডেটাসেট থেকে ডেটা যোগ করা
যেমন, আপনি যদি ডেটা এক্সপোর্ট সেট-আপ করার সময় Firebase সেশন ডেটা এক্সপোর্ট করার Crashlytics বিকল্প বেছে নেন, তাহলে ক্র্যাশ-ফ্রি ব্যবহারকারী এবং ক্র্যাশ-ফ্রি সেশন সম্পর্কে আরও ভালভাবে বুঝতে পারবেন (কোয়েরির উদাহরণ দেখুন)। এছাড়াও, আপনি বিভিন্ন Firebase প্রোডাক্ট (যেমন Performance Monitoring) বা Google Analytics থেকে ডেটা এক্সপোর্ট করতে এবং তারপরে আপনার Crashlytics ডেটার সাথে BigQuery-এ সেই ডেটা একত্রিত ও বিশ্লেষণ করতে পারবেন।ভিউ তৈরি করা
BigQuery UI ব্যবহার করে, আপনি ভিউ তৈরি করতে পারবেন, এটি হল একটি ভার্চুয়াল টেবিল যা SQL কোয়েরি দ্বারা সংজ্ঞায়িত করা হয়। বিভিন্ন ধরনের ভিউ এবং কীভাবে সেগুলি তৈরি করতে হয় সেই সম্পর্কে বিস্তারিত নির্দেশাবলী পেতে, BigQuery ডকুমেন্টেশন দেখুন।
ডেটাসেট স্কিমা সম্পর্কে আরও জানতে, BigQuery-এ এক্সপোর্ট করা ডেটার জন্য ডেটাসেট স্কিমা দেখুন।
BigQuery SQL সম্পর্কে জানুন
ইন্টার্যাক্টিভ কোয়েরি জব, ব্যাচ কোয়েরি জব ও কন্টিনিউয়াস কোয়েরি জব সহ আপনি যে ধরনের কোয়েরি রান করতে পারবেন, সেগুলি সম্পর্কে জানুন।
BigQuery-এ কাজ করে এমন স্টেটমেন্ট ও SQL ডায়ালেক্ট সম্পর্কে জানুন।
কীভাবে AI-পরিচালিত সহায়তা (Gemini) ব্যবহার করে কোয়েরি লিখতে হয় তা জানুন।
Crashlytics ডেটার জন্য কোয়েরির উদাহরণ
এই বিভাগে কিছু উদাহরণমূলক পরিস্থিতি ও কোয়েরি দেওয়া আছে যেগুলি থেকে আপনি কীভাবে এক্সপোর্ট করা ডেটা Crashlytics ও Firebase সেশন ডেটার সাথে BigQuery SQL ব্যবহার করতে পারবেন তা বুঝতে পারবেন।
- Firebase সেশন ডেটা ব্যবহার করে ক্র্যাশ-ফ্রি মেট্রিক গণনা করা
- দিন অনুযায়ী ক্র্যাশ
- সবচেয়ে বেশি হওয়া ক্র্যাশ খুঁজে বের করা
- ক্র্যাশ করা সেরা ১০টি ডিভাইস
- কাস্টম কী অনুযায়ী ফিল্টার করুন
- ব্যবহারকারীর আইডি এক্সট্র্যাক্ট করা
- ক্র্যাশ সংক্রান্ত নির্দিষ্ট সমস্যার সম্মুখীন হওয়া সব ব্যবহারকারীকে খুঁজে দেখা
- ক্র্যাশ সংক্রান্ত সমস্যার কারণে প্রভাবিত ব্যবহারকারীর সংখ্যা, দেশ অনুযায়ী ভাগ করা
- আজ এখনও পর্যন্ত হওয়া সেরা ৫টি সমস্যা
- DATE থেকে আজকের দিন পর্যন্ত সেরা ৫টি সমস্যা
উদাহরণ ১: 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
গত সপ্তাহ (গত ১৬৮ ঘণ্টা) ধরে ক্র্যাশ-ফ্রি সেশন:
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
উদাহরণ ২: দিন অনুযায়ী ক্র্যাশ
যত বেশি সম্ভব বাগ ঠিক করার পরে, আপনি মনে করেন যে আপনার টিম অবশেষে নতুন ফটো-শেয়ারিং অ্যাপ লঞ্চ করার জন্য প্রস্তুত। এটি করার আগে, আপনি গত মাসের প্রতিদিনের ক্র্যাশ হওয়া আইটেমের সংখ্যা চেক করতে চান, যাতে নিশ্চিত হতে পারেন যে আপনার বাগ-ব্যাশ সময়ের সাথে সাথে অ্যাপটিকে আরও স্থিতিশীল করে তুলেছে।
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;
উদাহরণ ৩: সবচেয়ে বেশি হওয়া ক্র্যাশ খুঁজে বের করা
প্রোডাকশন প্ল্যানকে সঠিকভাবে অগ্রাধিকার দিতে, আপনার অ্যাপে সবচেয়ে বেশি হওয়া ১০টি ক্র্যাশ খুঁজে পেতে হবে। আপনি এমন কোয়েরি তৈরি করেন যা প্রাসঙ্গিক ডেটা পয়েন্ট প্রদান করে।
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;
উদাহরণ ৪: ক্র্যাশ করা সেরা ১০টি ডিভাইস
শরৎকাল হল নতুন ফোন কেনার সময়! আপনার কোম্পানি জানে যে এর অর্থ হল এটি নতুন ডিভাইস-নির্দিষ্ট সমস্যার সিজন — বিশেষ করে Android-এর জন্য। সামঞ্জস্য সংক্রান্ত সম্ভাব্য সমস্যা এড়াতে, আপনি এমন একটি কোয়েরি তৈরি করেছেন যা গত সপ্তাহে (১৬৮ ঘণ্টা) সবচেয়ে বেশি ক্র্যাশ হওয়া ১০টি ডিভাইসকে শনাক্ত করে।
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;
উদাহরণ ৫: কাস্টম কী অনুযায়ী ফিল্টার করা
আপনি একজন গেম ডেভেলপার এবং আপনার গেমের কোন লেভেলে সবচেয়ে বেশি ক্র্যাশ হয় তা জানতে চান।
এই স্ট্যাটিস্টিক ট্র্যাক করার জন্য, আপনি একটি কাস্টম Crashlytics কী
(iOS+ |
Android |
Flutter |
Unity
)
সেট করেন, যাকে current_level বলা হয় এবং ব্যবহারকারী প্রতিবার নতুন লেভেলে পৌঁছালে এটি আপডেট করেন।
Swift
Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");
Objective-C
CrashlyticsKit setIntValue:3 forKey:@"current_level";
জাভা
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উদাহরণ ৬: ব্যবহারকারীর আইডি এক্সট্র্যাক্ট করা
আপনার কাছে আগেভাগে অ্যাক্সেস সহ 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
উদাহরণ ৭: নির্দিষ্ট ক্র্যাশ সংক্রান্ত সমস্যা হচ্ছে এমন সব ব্যবহারকারীকে খুঁজে বের করা
আপনার টিম ভুলবশত বিটা টেস্টারদের একটি গ্রুপে একটি গুরুতর বাগ রিলিজ করেছে। আপনার টিম নির্দিষ্ট ক্র্যাশ সংক্রান্ত সমস্যার আইডি শনাক্ত করতে, উপরে দেওয়া "সবচেয়ে বেশি হওয়া ক্র্যাশ খুঁজে বের করুন" উদাহরণ থেকে কোয়েরি ব্যবহার করতে পেরেছে। এখন আপনার টিম এই ক্র্যাশ থেকে প্রভাবিত হওয়া অ্যাপ ব্যবহারকারীদের তালিকা এক্সট্র্যাক্ট করার জন্য কোয়েরি চালাতে চায়।
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;উদাহরণ ৮: ক্র্যাশ সংক্রান্ত সমস্যার কারণে প্রভাবিত ব্যবহারকারীর সংখ্যা, দেশ অনুযায়ী ভাগ করা
নতুন রিলিজ রোল-আউট করার সময় আপনার টিম একটি গুরুতর বাগ শনাক্ত করেছে। আপনি উপরে দেওয়া "সবচেয়ে বেশি হওয়া ক্র্যাশ খুঁজে বের করুন" উদাহরণ থেকে কোয়েরি ব্যবহার করে নির্দিষ্ট ক্র্যাশ সংক্রান্ত সমস্যার আইডি শনাক্ত করতে পেরেছেন। আপনার টিম এখন দেখতে চায় যে এই ক্র্যাশটি বিশ্বজুড়ে বিভিন্ন দেশের ব্যবহারকারীদের মধ্যে ছড়িয়ে পড়েছে কিনা।
এই কোয়েরি লেখার জন্য, আপনার টিমকে নিম্নলিখিত কাজগুলি করতে হবে:
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";জাভা
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
উদাহরণ ৯: আজকের দিনের সবচেয়ে গুরুত্বপূর্ণ ৫টি সমস্যা
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;
উদাহরণ ১০: 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।
এক্সপোর্ট করা ডেটার জন্য ডেটাসেট স্কিমা সম্পর্কে জানুন।