BigQuery-তে এক্সপোর্ট করা ডেটার উপর SQL কোয়েরি চালানো

BigQuery-এ আপনার Crashlytics এবং (ঐচ্ছিকভাবে) Firebase সেশন ডেটা এক্সপোর্ট করার পরে, আপনি ডেটা নিয়ে কাজ শুরু করতে পারবেন:

  • SQL কোয়েরি ব্যবহার করে ডেটা বিশ্লেষণ করা
    কাস্টম রিপোর্ট ও সারসংক্ষেপ তৈরি করতে, আপনার Crashlytics ডেটার উপর কোয়েরি চালাতে পারবেন। এই ধরনের কাস্টম রিপোর্ট Firebase কনসোলের Crashlyticsড্যাশবোর্ডে উপলভ্য না থাকলেও, ক্র্যাশ ডেটা বিশ্লেষণ ও বোঝার ক্ষেত্রে এগুলি সহায়ক হতে পারে। এই পৃষ্ঠায় পরে কোয়েরির উদাহরণ দেখুন।

  • বিভিন্ন ডেটাসেট থেকে ডেটা যোগ করা
    যেমন, আপনি যদি ডেটা এক্সপোর্ট সেট-আপ করার সময় Firebase সেশন ডেটা এক্সপোর্ট করার Crashlytics বিকল্প বেছে নেন, তাহলে ক্র্যাশ-ফ্রি ব্যবহারকারী এবং ক্র্যাশ-ফ্রি সেশন সম্পর্কে আরও ভালভাবে বুঝতে পারবেন (কোয়েরির উদাহরণ দেখুন)। এছাড়াও, আপনি বিভিন্ন Firebase প্রোডাক্ট (যেমন Performance Monitoring) বা Google Analytics থেকে ডেটা এক্সপোর্ট করতে এবং তারপরে আপনার Crashlytics ডেটার সাথে BigQuery-এ সেই ডেটা একত্রিত ও বিশ্লেষণ করতে পারবেন।

  • ভিউ তৈরি করা
    BigQuery UI ব্যবহার করে, আপনি ভিউ তৈরি করতে পারবেন, এটি হল একটি ভার্চুয়াল টেবিল যা SQL কোয়েরি দ্বারা সংজ্ঞায়িত করা হয়। বিভিন্ন ধরনের ভিউ এবং কীভাবে সেগুলি তৈরি করতে হয় সেই সম্পর্কে বিস্তারিত নির্দেশাবলী পেতে, BigQuery ডকুমেন্টেশন দেখুন।

ডেটাসেট স্কিমা সম্পর্কে আরও জানতে, BigQuery-এ এক্সপোর্ট করা ডেটার জন্য ডেটাসেট স্কিমা দেখুন।

BigQuery SQL সম্পর্কে জানুন

Crashlytics ডেটার জন্য কোয়েরির উদাহরণ

এই বিভাগে কিছু উদাহরণমূলক পরিস্থিতি ও কোয়েরি দেওয়া আছে যেগুলি থেকে আপনি কীভাবে এক্সপোর্ট করা ডেটা Crashlytics ও Firebase সেশন ডেটার সাথে BigQuery SQL ব্যবহার করতে পারবেন তা বুঝতে পারবেন।

উদাহরণ ১: 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;

উদাহরণ ৮: ক্র্যাশ সংক্রান্ত সমস্যার কারণে প্রভাবিত ব্যবহারকারীর সংখ্যা, দেশ অনুযায়ী ভাগ করা

নতুন রিলিজ রোল-আউট করার সময় আপনার টিম একটি গুরুতর বাগ শনাক্ত করেছে। আপনি উপরে দেওয়া "সবচেয়ে বেশি হওয়া ক্র্যাশ খুঁজে বের করুন" উদাহরণ থেকে কোয়েরি ব্যবহার করে নির্দিষ্ট ক্র্যাশ সংক্রান্ত সমস্যার আইডি শনাক্ত করতে পেরেছেন। আপনার টিম এখন দেখতে চায় যে এই ক্র্যাশটি বিশ্বজুড়ে বিভিন্ন দেশের ব্যবহারকারীদের মধ্যে ছড়িয়ে পড়েছে কিনা।

এই কোয়েরি লেখার জন্য, আপনার টিমকে নিম্নলিখিত কাজগুলি করতে হবে:

  1. Google Analytics ডেটা BigQuery-এ এক্সপোর্ট করার সুবিধা চালু করুন। BigQuery-তে প্রোজেক্ট ডেটা এক্সপোর্ট করা দেখুন।

  2. 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");
    
  3. এমন কোয়েরি লিখুন যা ব্যবহারকারীর আইডি ফিল্ড ব্যবহার করে 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;

এরপরে কী?