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

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

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

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

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

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

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

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

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

উদাহরণ ১: ফায়ারবেস সেশন ডেটা ব্যবহার করে ক্র্যাশ-মুক্ত মেট্রিক্স গণনা করুন

আপনার সর্বশেষ সংস্করণে, আপনি একটি গুরুত্বপূর্ণ ব্যবহারকারীর যাত্রায় ক্র্যাশ মোকাবেলা করার জন্য আপনার অ্যাপের একটি বড় সংস্কার শুরু করেছেন। আপনি ব্যবহারকারীদের কাছ থেকে দুর্দান্ত পর্যালোচনা পেয়েছেন, তবে আপনি পরিমাণগত প্রমাণ চান যে আপনার অ্যাপটি আগের চেয়ে আরও স্থিতিশীল।

ক্র্যাশ-মুক্ত মেট্রিক্স এই তথ্য প্রদানে সাহায্য করতে পারে। এই মেট্রিক্সগুলি গুরুত্বপূর্ণ পরিমাপ যা আপনার অ্যাপের সামগ্রিক স্বাস্থ্য বুঝতে সাহায্য করে। Firebase সেশন ডেটা এবং Crashlytics ইভেন্টের সাহায্যে, আপনি একটি মৌলিক প্রশ্নের মাধ্যমে এই মেট্রিক্স গণনা করতে পারেন।

এখানে একটি অ্যান্ড্রয়েড অ্যাপের জন্য উদাহরণ কোয়েরি দেওয়া হল। একটি 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 অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি 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;

উদাহরণ ৫: কাস্টম কী অনুসারে ফিল্টার করুন

আপনি একজন গেম ডেভেলপার যিনি জানতে চান আপনার গেমের কোন স্তরটি সবচেয়ে বেশি ক্র্যাশের সম্মুখীন হয়।

সেই পরিসংখ্যান ট্র্যাক করতে সাহায্য করার জন্য, আপনি current_level নামে একটি কাস্টম Crashlytics কী ( iOS+ | Android | Flutter | Unity ) সেট করেন এবং ব্যবহারকারী যখনই নতুন স্তরে পৌঁছান তখনই এটি আপডেট করেন।

সুইফট

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

অবজেক্টিভ-সি

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 অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি 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. BigQuery তে Google Analytics ডেটা রপ্তানি সক্ষম করুন। BigQuery-তে প্রকল্প ডেটা রপ্তানি দেখুন।

  2. Google Analytics SDK এবং Crashlytics SDK উভয়ের মধ্যেই একটি ব্যবহারকারী আইডি পাস করতে আপনার অ্যাপ আপডেট করুন।

    সুইফট

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    

    অবজেক্টিভ-সি

    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    

    জাভা

    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Crashlytics ডেটাসেটে ক্র্যাশ থাকা অবস্থায় Google Analytics ডেটাসেটে ইভেন্টগুলিতে যোগদানের জন্য ব্যবহারকারী আইডি ক্ষেত্র ব্যবহার করে এমন একটি কোয়েরি লিখুন।

    এখানে একটি 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;

এরপর কী?

,

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

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

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

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

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

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

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

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

উদাহরণ ১: ফায়ারবেস সেশন ডেটা ব্যবহার করে ক্র্যাশ-মুক্ত মেট্রিক্স গণনা করুন

আপনার সর্বশেষ সংস্করণে, আপনি একটি গুরুত্বপূর্ণ ব্যবহারকারীর যাত্রায় ক্র্যাশ মোকাবেলা করার জন্য আপনার অ্যাপের একটি বড় সংস্কার শুরু করেছেন। আপনি ব্যবহারকারীদের কাছ থেকে দুর্দান্ত পর্যালোচনা পেয়েছেন, তবে আপনি পরিমাণগত প্রমাণ চান যে আপনার অ্যাপটি আগের চেয়ে আরও স্থিতিশীল।

ক্র্যাশ-মুক্ত মেট্রিক্স এই তথ্য প্রদানে সাহায্য করতে পারে। এই মেট্রিক্সগুলি গুরুত্বপূর্ণ পরিমাপ যা আপনার অ্যাপের সামগ্রিক স্বাস্থ্য বুঝতে সাহায্য করে। Firebase সেশন ডেটা এবং Crashlytics ইভেন্টের সাহায্যে, আপনি একটি মৌলিক প্রশ্নের মাধ্যমে এই মেট্রিক্স গণনা করতে পারেন।

এখানে একটি অ্যান্ড্রয়েড অ্যাপের জন্য উদাহরণ কোয়েরি দেওয়া হল। একটি 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 অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি 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;

উদাহরণ ৫: কাস্টম কী অনুসারে ফিল্টার করুন

আপনি একজন গেম ডেভেলপার যিনি জানতে চান আপনার গেমের কোন স্তরটি সবচেয়ে বেশি ক্র্যাশের সম্মুখীন হয়।

সেই পরিসংখ্যান ট্র্যাক করতে সাহায্য করার জন্য, আপনি current_level নামে একটি কাস্টম Crashlytics কী ( iOS+ | Android | Flutter | Unity ) সেট করেন এবং ব্যবহারকারী যখনই নতুন স্তরে পৌঁছান তখনই এটি আপডেট করেন।

সুইফট

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

অবজেক্টিভ-সি

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 অ্যাপের জন্য একটি উদাহরণ কোয়েরি দেওয়া হল। একটি 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. BigQuery তে Google Analytics ডেটা রপ্তানি সক্ষম করুন। BigQuery-তে প্রকল্প ডেটা রপ্তানি দেখুন।

  2. Google Analytics SDK এবং Crashlytics SDK উভয়ের মধ্যেই একটি ব্যবহারকারী আইডি পাস করতে আপনার অ্যাপ আপডেট করুন।

    সুইফট

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    

    অবজেক্টিভ-সি

    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    

    জাভা

    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Crashlytics ডেটাসেটে ক্র্যাশ থাকা অবস্থায় Google Analytics ডেটাসেটে ইভেন্টগুলিতে যোগদানের জন্য ব্যবহারকারী আইডি ক্ষেত্র ব্যবহার করে এমন একটি কোয়েরি লিখুন।

    এখানে একটি 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;

এরপর কী?