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

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

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

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

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

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

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

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

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

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

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

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

এখানে একটি অ্যান্ড্রয়েড অ্যাপের জন্য কিছু উদাহরণ কোয়েরি দেওয়া হলো। আইওএস অ্যাপের ক্ষেত্রে, প্যাকেজ নেম ও ANDROID এর পরিবর্তে এর বান্ডেল আইডি ও IOS ব্যবহার করুন।

একটি নির্দিষ্ট সংস্করণের জন্য ক্র্যাশ-মুক্ত ব্যবহারকারীগণ :

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 ব্যবহার করুন।

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 ব্যবহার করুন।

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 ব্যবহার করুন।

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 ব্যবহার করুন।

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 ব্যবহার করুন।

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 ব্যবহার করুন।

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. এমন একটি কোয়েরি লিখুন যা ইউজার আইডি ফিল্ড ব্যবহার করে Google Analytics ডেটাসেটের ইভেন্টগুলোর সাথে Crashlytics ডেটাসেটের ক্র্যাশগুলোকে যুক্ত করবে।

    এখানে একটি অ্যান্ড্রয়েড অ্যাপের জন্য কোয়েরির একটি উদাহরণ দেওয়া হলো। আইওএস অ্যাপের ক্ষেত্রে, প্যাকেজ নেম এবং ANDROID এর পরিবর্তে এর বান্ডেল আইডি এবং IOS ব্যবহার করুন।

    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 ব্যবহার করুন।

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 ব্যবহার করুন।

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;

এরপর কী?