BigQuery-এ Firebase Crashlytics ডেটা রপ্তানি করুন

আরও বিশ্লেষণের জন্য আপনি আপনার Firebase Crashlytics ডেটা BigQuery তে রপ্তানি করতে পারেন। BigQuery আপনাকে BigQuery SQL ব্যবহার করে ডেটা বিশ্লেষণ করতে, অন্য ক্লাউড প্রদানকারীতে রপ্তানি করতে এবং Looker Studio এর মাধ্যমে ভিজ্যুয়ালাইজেশন এবং কাস্টম ড্যাশবোর্ডের জন্য এটি ব্যবহার করতে দেয়।

রপ্তানি করা ডেটা দিয়ে আপনি কী করতে পারেন?

BigQuery তে রপ্তানি করা তথ্যে ডিভাইসের ধরণ, অপারেটিং সিস্টেম, ব্যতিক্রম (অ্যান্ড্রয়েড অ্যাপ) বা ত্রুটি (অ্যাপল অ্যাপ) এবং Crashlytics লগ সহ অন্যান্য তথ্য সহ কাঁচা ক্র্যাশ ডেটা থাকে। আপনি এই পৃষ্ঠায় পরে Crashlytics ডেটা কীভাবে রপ্তানি করা হয় এবং এর টেবিল স্কিমা পর্যালোচনা করতে পারেন।

আপনার রপ্তানি করা Crashlytics ডেটা দিয়ে আপনি কী করতে পারেন তার কিছু উদাহরণ এখানে দেওয়া হল:

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

  • একটি Looker Studio টেমপ্লেট ব্যবহার করুন
    Crashlytics আপনার রপ্তানি করা ডেটা ভিজ্যুয়ালাইজ করার জন্য একটি পূর্ব-নির্মিত Looker Studio টেমপ্লেট প্রদান করে।

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

  • Crashlytics -নির্দিষ্ট ডেটা ফায়ারবেস সেশন ডেটার সাথে একত্রিত করুন
    Crashlytics ডেটা এক্সপোর্ট সেট আপ করার সময় আপনি ফায়ারবেস সেশন ডেটা এক্সপোর্ট করতে পারেন। ক্র্যাশ-মুক্ত ব্যবহারকারী এবং ক্র্যাশ-মুক্ত সেশন সম্পর্কে আরও ভাল ধারণা পেতে এই সেশন ডেটা ব্যবহার করুন।

BigQuery তে স্ট্রিমিং এক্সপোর্টের সুবিধা

ডিফল্টরূপে, ডেটা দৈনিক ব্যাচ এক্সপোর্টে BigQuery তে রপ্তানি করা হয়। এছাড়াও, আপনি BigQuery স্ট্রিমিং এর মাধ্যমে রিয়েলটাইমে আপনার Crashlytics ডেটা এবং Firebase সেশন স্ট্রিম করতে পারেন। আপনি এটি যেকোনো উদ্দেশ্যে ব্যবহার করতে পারেন যার জন্য লাইভ ডেটা প্রয়োজন, যেমন লাইভ ড্যাশবোর্ডে তথ্য উপস্থাপন করা, লাইভ রোলআউট দেখা, অথবা অ্যালার্ট এবং কাস্টম ওয়ার্কফ্লো ট্রিগার করে এমন অ্যাপ্লিকেশন সমস্যাগুলি পর্যবেক্ষণ করা।

যখন আপনি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করবেন, তখন আপনার কাছে রিয়েলটাইম টেবিলও থাকবে (ব্যাচ টেবিল ছাড়াও)। উভয় ধরণের টেবিলের একই ডেটাসেট স্কিমা থাকবে, তবে ব্যাচ টেবিল এবং রিয়েলটাইম টেবিলের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য এখানে রয়েছে:

ব্যাচ টেবিল রিয়েলটাইম টেবিল
  • প্রতিদিন একবার ডেটা রপ্তানি করা হয়।
  • BigQuery তে ব্যাচ লেখার আগে ইভেন্টগুলি টেকসইভাবে সংরক্ষণ করা হয়।
  • ডেটা 30 দিন আগে পর্যন্ত ব্যাকফিল করা যেতে পারে*।
  • তথ্য রিয়েলটাইমে রপ্তানি করা হয়।
  • কোনও ব্যাকফিলিং উপলব্ধ নেই।

ব্যাচ টেবিলটি দীর্ঘমেয়াদী বিশ্লেষণ এবং সময়ের সাথে সাথে ট্রেন্ড সনাক্তকরণের জন্য আদর্শ কারণ আমরা ইভেন্টগুলি লেখার আগে টেকসইভাবে সংরক্ষণ করি এবং সেগুলি 30 দিন পর্যন্ত টেবিলে ব্যাকফিল করা যেতে পারে*। যখন আমরা আপনার রিয়েলটাইম টেবিলে ডেটা লিখি, তখন আমরা তাৎক্ষণিকভাবে BigQuery এ লিখে ফেলি, এবং তাই এটি লাইভ ড্যাশবোর্ড এবং কাস্টম সতর্কতার জন্য আদর্শ। উভয়ের সুবিধা পেতে এই দুটি টেবিলকে একটি স্টিচিং কোয়েরির সাথে একত্রিত করা যেতে পারে।

ডিফল্টরূপে, রিয়েলটাইম টেবিলের পার্টিশনের মেয়াদ শেষ হওয়ার সময় 30 দিন। এটি কীভাবে পরিবর্তন করবেন তা জানতে, BigQuery ডকুমেন্টেশনে পার্টিশনের মেয়াদ শেষ হওয়ার সময় সেট করুন দেখুন।

* নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করুন বিভাগে ব্যাকফিল সহায়তা সম্পর্কে বিস্তারিত দেখুন।



BigQuery তে এক্সপোর্ট সক্ষম করুন

  1. Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।

  2. BigQuery কার্ডে, লিঙ্ক এ ক্লিক করুন।

  3. BigQuery এ রপ্তানি সক্ষম করতে স্ক্রিনে প্রদর্শিত নির্দেশাবলী অনুসরণ করুন, নিম্নলিখিত বিকল্পগুলি সহ:

রপ্তানি সক্ষম করলে কী হবে?

  • ফায়ারবেস BigQuery সাথে লিঙ্ক করা অ্যাপগুলি থেকে ডেটা রপ্তানি করে।

    • সেটআপের সময়, ডিফল্টরূপে, আপনার প্রোজেক্টের সমস্ত অ্যাপ BigQuery এর সাথে লিঙ্ক করা থাকে, তবে আপনি সেটআপের সময় নির্দিষ্ট অ্যাপগুলিকে লিঙ্ক না করার জন্য নির্বাচন করতে পারেন।

    • আপনার Firebase প্রজেক্টে পরবর্তীতে যে কোনও অ্যাপ যোগ করলে তা স্বয়ংক্রিয়ভাবে BigQuery এর সাথে লিঙ্ক হয়ে যায়।

    • যেকোনো সময়, আপনি কোন অ্যাপগুলি ডেটা রপ্তানি করবে তা পরিচালনা করতে পারেন।

  • সেটআপের সময় আপনার নির্বাচিত ডেটাসেট অবস্থানে Firebase ডেটা রপ্তানি করে।

    • এই অবস্থানটি Crashlytics ডেটাসেট এবং Firebase সেশন ডেটাসেট উভয়ের ক্ষেত্রেই প্রযোজ্য (যদি সেশন ডেটা রপ্তানির জন্য সক্ষম করা থাকে)।

    • এই অবস্থানটি শুধুমাত্র BigQuery তে রপ্তানি করা ডেটার জন্য প্রযোজ্য, এবং এটি Firebase কনসোলের Crashlytics ড্যাশবোর্ডে বা Android Studio-তে ব্যবহারের জন্য সংরক্ষিত ডেটার অবস্থানকে প্রভাবিত করে না।

    • একটি ডেটাসেট তৈরি হওয়ার পরে, এর অবস্থান পরিবর্তন করা যাবে না, তবে আপনি ডেটাসেটটি অন্য কোনও স্থানে অনুলিপি করতে পারেন অথবা ম্যানুয়ালি ডেটাসেটটি অন্য কোনও স্থানে স্থানান্তর (পুনরায় তৈরি) করতে পারেন। আরও জানতে, বিদ্যমান রপ্তানির জন্য অবস্থান পরিবর্তন করুন দেখুন।

  • Firebase আপনার ব্যাচ ডেটার দৈনিক সিঙ্ক BigQuery তে সেট আপ করে।

    • BigQuery এর সাথে লিঙ্ক করার পরে, প্রাথমিক ব্যাচ ডেটা এক্সপোর্ট করতে ৪৮ ঘন্টা পর্যন্ত সময় লাগতে পারে।

    • BigQuery তে আপনার নির্ধারিত কোনও এক্সপোর্ট সেট আপ করা থাকুক না কেন, দৈনিক সিঙ্কটি দিনে একবার হয়। মনে রাখবেন যে সিঙ্ক কাজের সময় এবং সময়কাল পরিবর্তিত হতে পারে, তাই আমরা এক্সপোর্টের নির্দিষ্ট সময়ের উপর ভিত্তি করে ডাউনস্ট্রিম অপারেশন বা কাজগুলি শিডিউল করার পরামর্শ দিই না।

  • Firebase আপনার বিদ্যমান ডেটার একটি কপি BigQuery তে রপ্তানি করে।

    • প্রতিটি লিঙ্ক করা অ্যাপের জন্য, এই এক্সপোর্টে দৈনিক সিঙ্ক থেকে ডেটা ধারণকারী একটি ব্যাচ টেবিল অন্তর্ভুক্ত থাকে।

    • আপনি ব্যাচ টেবিলের জন্য গত 30 দিনের ডেটা ব্যাকফিল ম্যানুয়ালি শিডিউল করতে পারেন অথবা BigQuery তে এক্সপোর্ট সক্ষম করার সময় সাম্প্রতিকতম তারিখের জন্য (যেটি সাম্প্রতিকতম)।

    মনে রাখবেন যে আপনি যদি ২০২৪ সালের অক্টোবরের মাঝামাঝি সময়ের আগে Crashlytics ডেটা রপ্তানি সক্ষম করে থাকেন, তাহলে আপনি রপ্তানি সক্ষম করার ৩০ দিন আগেও ব্যাকফিল করতে পারবেন।

  • BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করলে নিম্নলিখিতগুলি প্রযোজ্য হবে।

    • প্রতিটি লিঙ্ক করা অ্যাপের নিজস্ব রিয়েলটাইম টেবিল থাকবে যাতে ক্রমাগত আপডেট হওয়া ডেটা থাকবে (দৈনিক ব্যাচ এক্সপোর্টের জন্য অ্যাপের ব্যাচ টেবিল ছাড়াও)।

    • স্ট্রিমিং সক্ষম করার পরে, ডেটা স্ট্রিমিং শুরু হতে ১ ঘন্টা পর্যন্ত সময় লাগতে পারে।



উদাহরণ কোয়েরি

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

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

ক্র্যাশ-মুক্ত মেট্রিক্স এই তথ্য প্রদানে সাহায্য করতে পারে। এই মেট্রিক্সগুলি গুরুত্বপূর্ণ পরিমাপ যা আপনার অ্যাপের সামগ্রিক স্বাস্থ্য বুঝতে সাহায্য করে। 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(_PARTITIONTIME,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.event_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(_PARTITIONTIME,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 কী সেট করেন এবং ব্যবহারকারী যখনই নতুন স্তরে পৌঁছান তখনই এটি আপডেট করেন।

সুইফট

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;



Looker Studio সাহায্যে এক্সপোর্ট করা Crashlytics ডেটা ভিজ্যুয়ালাইজ করুন

Looker Studio আপনার BigQuery তে থাকা Crashlytics ডেটাসেটগুলিকে এমন প্রতিবেদনে রূপান্তরিত করে যা পড়া সহজ, ভাগ করা সহজ এবং সম্পূর্ণরূপে কাস্টমাইজযোগ্য।

Looker Studio ব্যবহার সম্পর্কে আরও জানতে, তাদের স্বাগত নির্দেশিকাটি দেখুন।

একটি Crashlytics রিপোর্ট টেমপ্লেট ব্যবহার করুন

Looker Studio Crashlytics জন্য একটি নমুনা প্রতিবেদন রয়েছে যাতে এক্সপোর্ট করা Crashlytics BigQuery স্কিমা থেকে মাত্রা এবং মেট্রিক্সের একটি বিস্তৃত সেট অন্তর্ভুক্ত রয়েছে। যদি আপনি BigQuery Crashlytics স্ট্রিমিং এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনি Looker Studio টেমপ্লেটের রিয়েলটাইম ট্রেন্ডস পৃষ্ঠায় সেই ডেটা দেখতে পারেন। আপনি আপনার নিজস্ব অ্যাপের কাঁচা ক্র্যাশ ডেটার উপর ভিত্তি করে দ্রুত নতুন প্রতিবেদন এবং ভিজ্যুয়ালাইজেশন তৈরি করতে নমুনাটিকে একটি টেমপ্লেট হিসাবে ব্যবহার করতে পারেন:

  1. Crashlytics Looker Studio ড্যাশবোর্ড টেমপ্লেটটি খুলুন।

  2. উপরের ডানদিকে কোণায় "টেমপ্লেট ব্যবহার করুন" এ ক্লিক করুন।

  3. নতুন ডেটা সোর্স ড্রপ ডাউনে, নতুন ডেটা সোর্স তৈরি করুন নির্বাচন করুন।

  4. BigQuery কার্ডে Select এ ক্লিক করুন।

  5. My Projects > PROJECT_ID > firebase_crashlytics > TABLE_NAME বেছে নিয়ে এক্সপোর্ট করা Crashlytics ডেটা ধারণকারী একটি টেবিল নির্বাচন করুন।

    আপনার ব্যাচ টেবিলটি সর্বদা নির্বাচনের জন্য উপলব্ধ। যদি Crashlytics স্ট্রিমিং BigQuery তে এক্সপোর্ট সক্ষম করা থাকে, তাহলে আপনি পরিবর্তে আপনার রিয়েলটাইম টেবিলটি নির্বাচন করতে পারেন।

  6. কনফিগারেশনের অধীনে, Crashlytics টেমপ্লেট স্তরটি ডিফল্টে সেট করুন।

  7. নতুন ডেটা উৎস তৈরি করতে Connect এ ক্লিক করুন।

  8. Crashlytics টেমপ্লেটে ফিরে যেতে Add to Report এ ক্লিক করুন।

  9. অবশেষে, Crashlytics Looker Studio Dashboard টেমপ্লেটের আপনার কপি তৈরি করতে Create Report এ ক্লিক করুন।



BigQuery তে স্কিমাটি বুঝুন

আপনার এক্সপোর্ট করা ডেটার জন্য Firebase BigQuery তে নতুন ডেটাসেট তৈরি করে:

Crashlytics ডেটাসেট

Crashlytics ডেটা firebase_crashlytics নামক একটি BigQuery ডেটাসেটে রপ্তানি করা হয়। ডেটাসেটটি আপনার সম্পূর্ণ প্রকল্পকে কভার করে, এমনকি যদি এতে একাধিক অ্যাপ থাকে।

টেবিল

ডিফল্টরূপে, Firebase আপনার প্রকল্পের প্রতিটি অ্যাপের জন্য Crashlytics ডেটাসেটের ভিতরে পৃথক টেবিল তৈরি করে যা BigQuery এর সাথে লিঙ্ক করা আছে।

অ্যাপের শনাক্তকারীর উপর ভিত্তি করে টেবিলগুলির নামকরণ করা হয় (পিরিয়ডগুলিকে আন্ডারস্কোরে রূপান্তরিত করে) এবং অ্যাপের প্ল্যাটফর্মের সাথে যুক্ত করা হয় ( _IOS অথবা _ANDROID )। উদাহরণস্বরূপ, com.google.test প্যাকেজ নামের একটি অ্যান্ড্রয়েড অ্যাপের ডেটা com_google_test_ANDROID নামক একটি টেবিলে থাকবে।

  • যদি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করা থাকে, তাহলে ডেটা রিয়েলটাইমে _REALTIME (উদাহরণস্বরূপ, com_google_test_ANDROID_REALTIME ) এর সাথে সংযুক্ত একটি টেবিলে স্ট্রিম করা হবে।

  • একটি টেবিলের প্রতিটি সারি অ্যাপে ঘটে যাওয়া একটি ইভেন্টকে প্রতিনিধিত্ব করে, যার মধ্যে রয়েছে ক্র্যাশ, অ-মারাত্মক ত্রুটি এবং ANR।

  • টেবিলগুলিতে আপনার অ্যাপে আপনার দ্বারা সংজ্ঞায়িত যেকোনো কাস্টম Crashlytics কী ছাড়াও Crashlytics ডেটার একটি স্ট্যান্ডার্ড সেট রয়েছে।

সারি

একটি টেবিলের প্রতিটি সারি অ্যাপটির সম্মুখীন হওয়া একটি ত্রুটির প্রতিনিধিত্ব করে।

কলাম

ক্র্যাশ, অ-মারাত্মক ত্রুটি এবং ANR-এর জন্য একটি টেবিলের কলামগুলি অভিন্ন।

  • যদি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করা থাকে, তাহলে রিয়েলটাইম টেবিলে ব্যাচ টেবিলের মতো একই কলাম থাকবে।

  • আপনার সারিতে কলাম থাকতে পারে যা এমন ইভেন্টগুলিকে প্রতিনিধিত্ব করে যার স্ট্যাক ট্রেস নেই।

রপ্তানি করা Crashlytics ডেটার জন্য টেবিলের কলামগুলি এখানে দেওয়া হল:

ক্ষেত্রের নাম ডেটা টাইপ বিবরণ
app_orientation স্ট্রিং উদাহরণস্বরূপ, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , ইত্যাদি।
application রেকর্ড যে অ্যাপটি ইভেন্টটি তৈরি করেছে
application.build_version স্ট্রিং অ্যাপটির বিল্ড ভার্সন
application.display_version স্ট্রিং
blame_frame রেকর্ড ক্র্যাশ বা ত্রুটির মূল কারণ হিসেবে চিহ্নিত ফ্রেম
blame_frame.address INT64 সম্পর্কে বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি
জাভা ফ্রেমের জন্য আনসেট করুন
blame_frame.blamed বুলিয়ান Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটি ক্র্যাশের কারণ নাকি ত্রুটি?
blame_frame.file স্ট্রিং ফ্রেম ফাইলের নাম
blame_frame.library স্ট্রিং ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম
blame_frame.line INT64 সম্পর্কে ফ্রেমের ফাইলের লাইন নম্বর
blame_frame.offset INT64 সম্পর্কে কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয়
জাভা ব্যতিক্রমগুলির জন্য সেট না করা
blame_frame.owner স্ট্রিং উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM
blame_frame.symbol স্ট্রিং হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক
breadcrumbs পুনরাবৃত্তি রেকর্ড টাইমস্ট্যাম্পড Google Analytics ব্রেডক্রাম্বস , যদি সক্ষম থাকে
breadcrumbs.name স্ট্রিং ব্রেডক্রাম্বের সাথে সম্পর্কিত নাম
breadcrumbs.params পুনরাবৃত্তি রেকর্ড ব্রেডক্রাম্বের সাথে সম্পর্কিত পরামিতি
breadcrumbs.params.key স্ট্রিং ব্রেডক্রাম্বের সাথে যুক্ত একটি প্যারামিটার কী
breadcrumbs.params.value স্ট্রিং ব্রেডক্রাম্বের সাথে সম্পর্কিত একটি প্যারামিটার মান
breadcrumbs.timestamp টাইমস্ট্যাম্প ব্রেডক্রাম্বের সাথে সম্পর্কিত টাইমস্ট্যাম্প
bundle_identifier স্ট্রিং Firebase প্রকল্পে নিবন্ধিত অ্যাপের অনন্য শনাক্তকারী (উদাহরণস্বরূপ, com.google.gmail )
অ্যাপল প্ল্যাটফর্ম অ্যাপের জন্য, এটি অ্যাপের বান্ডেল আইডি।
অ্যান্ড্রয়েড অ্যাপের জন্য, এটি অ্যাপটির প্যাকেজ নাম।
crashlytics_sdk_versions স্ট্রিং Crashlytics SDK সংস্করণ যা ইভেন্টটি তৈরি করেছে
custom_keys পুনরাবৃত্তি রেকর্ড ডেভেলপার-সংজ্ঞায়িত কী-মান জোড়া
custom_keys.key স্ট্রিং একটি ডেভেলপার-সংজ্ঞায়িত কী
custom_keys.value স্ট্রিং একটি ডেভেলপার-সংজ্ঞায়িত মান
device রেকর্ড যে ডিভাইসে ঘটনাটি ঘটেছে
device_orientation স্ট্রিং উদাহরণস্বরূপ, PORTRAIT , LANDSCAPE , FACE_UP , FACE_DOWN , ইত্যাদি।
device.architecture স্ট্রিং উদাহরণস্বরূপ, X86_32 , X86_64 , ARMV7 , ARM64 , ARMV7S , অথবা ARMV7K
device.manufacturer স্ট্রিং ডিভাইস প্রস্তুতকারক
device.model স্ট্রিং ডিভাইস মডেল
error পুনরাবৃত্তি রেকর্ড (শুধুমাত্র অ্যাপল অ্যাপের জন্য) মারাত্মক নয় এমন ত্রুটি
error_type স্ট্রিং ইভেন্টের ত্রুটির ধরণ (উদাহরণস্বরূপ, FATAL , NON_FATAL , ANR , ইত্যাদি)
error.blamed বুলিয়ান Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটিই ত্রুটির কারণ কিনা
error.code INT64 সম্পর্কে অ্যাপের কাস্টম লগ করা NSError-এর সাথে সম্পর্কিত ত্রুটি কোড
error.frames পুনরাবৃত্তি রেকর্ড স্ট্যাকট্রেসের ফ্রেমগুলি
error.frames.address INT64 সম্পর্কে বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি
error.frames.blamed বুলিয়ান Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটিই ত্রুটির কারণ কিনা
error.frames.file স্ট্রিং ফ্রেম ফাইলের নাম
error.frames.library স্ট্রিং ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম
error.frames.line INT64 সম্পর্কে ফ্রেমের ফাইলের লাইন নম্বর
error.frames.offset INT64 সম্পর্কে কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয়
error.frames.owner স্ট্রিং উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM
error.frames.symbol স্ট্রিং হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক
error.queue_name স্ট্রিং থ্রেডটি যে সারিতে চলছিল
error.subtitle স্ট্রিং থ্রেডের সাবটাইটেল
error.title স্ট্রিং থ্রেডের শিরোনাম
event_id স্ট্রিং ইভেন্টের জন্য অনন্য আইডি
event_timestamp টাইমস্ট্যাম্প যখন ঘটনাটি ঘটেছিল
exceptions পুনরাবৃত্তি রেকর্ড (শুধুমাত্র অ্যান্ড্রয়েড) এই ইভেন্টের সময় ঘটে যাওয়া ব্যতিক্রমগুলি। নেস্টেড ব্যতিক্রমগুলি বিপরীত কালানুক্রমিক ক্রমে উপস্থাপন করা হয়, যার অর্থ হল শেষ রেকর্ডটি হল প্রথম নিক্ষেপ করা ব্যতিক্রম।
exceptions.blamed বুলিয়ান যদি Crashlytics নির্ধারণ করে যে ব্যতিক্রমটি ত্রুটি বা ক্র্যাশের জন্য দায়ী, তাহলে True হবে।
exceptions.exception_message স্ট্রিং ব্যতিক্রমের সাথে সম্পর্কিত একটি বার্তা
exceptions.frames পুনরাবৃত্তি রেকর্ড ব্যতিক্রমের সাথে সম্পর্কিত ফ্রেমগুলি
exceptions.frames.address INT64 সম্পর্কে বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি
জাভা ফ্রেমের জন্য আনসেট করুন
exceptions.frames.blamed বুলিয়ান Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটি ক্র্যাশের কারণ নাকি ত্রুটি?
exceptions.frames.file স্ট্রিং ফ্রেম ফাইলের নাম
exceptions.frames.library স্ট্রিং ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম
exceptions.frames.line INT64 সম্পর্কে ফ্রেমের ফাইলের লাইন নম্বর
exceptions.frames.offset INT64 সম্পর্কে কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয়
জাভা ব্যতিক্রমগুলির জন্য সেট না করা
exceptions.frames.owner স্ট্রিং উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM
exceptions.frames.symbol স্ট্রিং হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক
exceptions.nested বুলিয়ান শেষবারের মতো নিক্ষেপ করা ব্যতিক্রম (অর্থাৎ প্রথম রেকর্ড) ছাড়া সকলের জন্য সত্য
exceptions.subtitle স্ট্রিং থ্রেডের সাবটাইটেল
exceptions.title স্ট্রিং থ্রেডের শিরোনাম
exceptions.type স্ট্রিং ব্যতিক্রমের ধরণ (উদাহরণস্বরূপ, java.lang.IllegalStateException)
firebase_session_id স্ট্রিং Crashlytics থেকে ইভেন্টে ম্যাপ করা Firebase সেশনের জন্য স্বয়ংক্রিয়ভাবে তৈরি হওয়া আইডি
installation_uuid স্ট্রিং একটি অনন্য অ্যাপ এবং ডিভাইস ইনস্টলেশন শনাক্তকারী একটি আইডি
is_fatal বুলিয়ান অ্যাপটি ক্র্যাশ হয়েছে কিনা
issue_id স্ট্রিং ইভেন্টের সাথে সম্পর্কিত সমস্যা
logs পুনরাবৃত্তি রেকর্ড Crashlytics লগার দ্বারা তৈরি টাইমস্ট্যাম্পড লগ বার্তা, যদি সক্ষম করা থাকে
logs.message স্ট্রিং লগ করা বার্তা
logs.timestamp টাইমস্ট্যাম্প যখন লগ তৈরি করা হয়েছিল
memory রেকর্ড ডিভাইসের মেমরির অবস্থা
memory.free INT64 সম্পর্কে অবশিষ্ট মেমোরির বাইট
memory.used INT64 সম্পর্কে ব্যবহৃত মেমোরির বাইট
operating_system রেকর্ড ডিভাইসের অপারেটিং সিস্টেমের বিশদ বিবরণ
operating_system.device_type স্ট্রিং ডিভাইসের ধরণ (যেমন, MOBILE , TABLET , TV , ইত্যাদি); যা "ডিভাইস বিভাগ" নামেও পরিচিত।
operating_system.display_version স্ট্রিং ডিভাইসে থাকা OS এর সংস্করণ
operating_system.modification_state স্ট্রিং ডিভাইসটি পরিবর্তন করা হয়েছে কিনা (উদাহরণস্বরূপ, একটি জেলব্রোকেন অ্যাপ MODIFIED এবং একটি রুটেড অ্যাপ UNMODIFIED )
operating_system.name স্ট্রিং ডিভাইসের অপারেটিং সিস্টেমের নাম
operating_system.type স্ট্রিং (শুধুমাত্র অ্যাপল অ্যাপস) ডিভাইসে চলমান অপারেটিং সিস্টেমের ধরণ (উদাহরণস্বরূপ, IOS , MACOS , ইত্যাদি)
platform স্ট্রিং Firebase প্রকল্পে নিবন্ধিত অ্যাপের প্ল্যাটফর্ম (বৈধ মান: IOS বা ANDROID )
process_state স্ট্রিং BACKGROUND বা FOREGROUND
storage রেকর্ড ডিভাইসের স্থায়ী স্টোরেজ
storage.free INT64 সম্পর্কে বাইট স্টোরেজ বাকি আছে
storage.used INT64 সম্পর্কে ব্যবহৃত স্টোরেজের বাইট
threads পুনরাবৃত্তি রেকর্ড ইভেন্টের সময় উপস্থিত থ্রেডগুলি
threads.blamed বুলিয়ান Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটি ক্র্যাশের কারণ নাকি ত্রুটি?
threads.code INT64 সম্পর্কে (শুধুমাত্র অ্যাপল অ্যাপস) অ্যাপ্লিকেশনের কাস্টম লগ করা NSError এর ত্রুটি কোড
threads.crash_address INT64 সম্পর্কে যে সিগন্যালের কারণে অ্যাপ্লিকেশনটি ক্র্যাশ হয়েছে তার ঠিকানা; শুধুমাত্র ক্র্যাশ করা নেটিভ থ্রেডগুলিতে উপস্থিত থাকে
threads.crashed বুলিয়ান থ্রেডটি ক্র্যাশ হয়েছে কিনা
threads.frames পুনরাবৃত্তি রেকর্ড সুতার ফ্রেমগুলো
threads.frames.address INT64 সম্পর্কে বাইনারি ছবিতে কোডটি থাকা ঠিকানাটি
threads.frames.blamed বুলিয়ান Crashlytics নির্ধারণ করেছে যে এই ফ্রেমটিই ত্রুটির কারণ কিনা
threads.frames.file স্ট্রিং ফ্রেম ফাইলের নাম
threads.frames.library স্ট্রিং ফ্রেমটি অন্তর্ভুক্ত লাইব্রেরির প্রদর্শন নাম
threads.frames.line INT64 সম্পর্কে ফ্রেমের ফাইলের লাইন নম্বর
threads.frames.offset INT64 সম্পর্কে কোড ধারণকারী বাইনারি ছবিতে বাইট অফসেট করা হয়
threads.frames.owner স্ট্রিং উদাহরণস্বরূপ, DEVELOPER , VENDOR , RUNTIME , PLATFORM , অথবা SYSTEM
threads.frames.symbol স্ট্রিং হাইড্রেটেড প্রতীক, অথবা যদি এটি অহাইড্রেটেড হয় তবে কাঁচা প্রতীক
threads.queue_name স্ট্রিং (শুধুমাত্র অ্যাপল অ্যাপস) থ্রেডটি যে সারিতে চলছে
threads.signal_code স্ট্রিং অ্যাপটি ক্র্যাশ করার জন্য দায়ী সিগন্যালের কোড; শুধুমাত্র ক্র্যাশ করা নেটিভ থ্রেডগুলিতে উপস্থিত থাকে
threads.signal_name স্ট্রিং যে সিগন্যালের কারণে অ্যাপটি ক্র্যাশ হয়েছে তার নাম, শুধুমাত্র ক্র্যাশ করা নেটিভ থ্রেডগুলিতে উপস্থিত।
threads.subtitle স্ট্রিং থ্রেডের সাবটাইটেল
threads.thread_name স্ট্রিং থ্রেডের নাম
threads.title স্ট্রিং থ্রেডের শিরোনাম
unity_metadata.debug_build বুলিয়ান যদি এটি একটি ডিবাগ বিল্ড হয়
unity_metadata.graphics_copy_texture_support স্ট্রিং ইউনিটি API- তে সংজ্ঞায়িত গ্রাফিক্স টেক্সচার কপি করার জন্য সমর্থন।
unity_metadata.graphics_device_id INT64 সম্পর্কে গ্রাফিক্স ডিভাইসের শনাক্তকারী
unity_metadata.graphics_device_name স্ট্রিং গ্রাফিক্স ডিভাইসের নাম
unity_metadata.graphics_device_type স্ট্রিং গ্রাফিক্স ডিভাইসের ধরণ
unity_metadata.graphics_device_vendor_id INT64 সম্পর্কে গ্রাফিক্স প্রসেসরের বিক্রেতার শনাক্তকারী
unity_metadata.graphics_device_vendor স্ট্রিং গ্রাফিক্স ডিভাইসের বিক্রেতা
unity_metadata.graphics_device_version স্ট্রিং গ্রাফিক্স ডিভাইসের সংস্করণ
unity_metadata.graphics_max_texture_size INT64 সম্পর্কে টেক্সচার রেন্ডার করার জন্য নিবেদিত সর্বোচ্চ আকার
unity_metadata.graphics_memory_size_mb INT64 সম্পর্কে গ্রাফিক্স মেমোরি, মেগাবাইট
unity_metadata.graphics_render_target_count INT64 সম্পর্কে গ্রাফিকাল রেন্ডারিং লক্ষ্যমাত্রার সংখ্যা
unity_metadata.graphics_shader_level INT64 সম্পর্কে গ্রাফিক্সের শেডার লেভেল
unity_metadata.processor_count INT64 সম্পর্কে প্রসেসরের সংখ্যা (কোর)
unity_metadata.processor_frequency_mhz INT64 সম্পর্কে প্রসেসরের ফ্রিকোয়েন্সি (গুলি) MHz এ
unity_metadata.processor_type স্ট্রিং প্রসেসরের ধরণ
unity_metadata.screen_refresh_rate_hz INT64 সম্পর্কে স্ক্রিনের রিফ্রেশ রেট Hz-এ
unity_metadata.screen_resolution_dpi স্ট্রিং একটি ভাসমান বিন্দু সংখ্যা হিসেবে পর্দার DPI
unity_metadata.screen_size_px স্ট্রিং পিক্সেলে স্ক্রিনের আকার, প্রস্থ x উচ্চতা হিসাবে ফর্ম্যাট করা হয়েছে
unity_metadata.system_memory_size_mb INT64 সম্পর্কে সিস্টেমের মেমোরির আকার Mb তে
unity_metadata.unity_version স্ট্রিং এই ডিভাইসে চলমান ইউনিটির সংস্করণ
user রেকর্ড (ঐচ্ছিক) অ্যাপের ব্যবহারকারী সম্পর্কে সংগৃহীত তথ্য
user.email স্ট্রিং (ঐচ্ছিক) ব্যবহারকারীর ইমেল ঠিকানা
user.id স্ট্রিং (ঐচ্ছিক) ব্যবহারকারীর সাথে সম্পর্কিত একটি অ্যাপ-নির্দিষ্ট আইডি
user.name স্ট্রিং (ঐচ্ছিক) ব্যবহারকারীর নাম
variant_id স্ট্রিং এই ইভেন্টের সাথে সম্পর্কিত সমস্যার ধরণ
মনে রাখবেন যে সমস্ত ইভেন্টের কোনও সম্পর্কিত সমস্যার বৈকল্পিক থাকে না।

ফায়ারবেস সেশন ডেটাসেট

Firebase সেশন ডেটা firebase_sessions নামক একটি BigQuery ডেটাসেটে রপ্তানি করা হয়। ডেটাসেটটি আপনার সম্পূর্ণ প্রকল্পকে কভার করে, এমনকি যদি এতে একাধিক অ্যাপ থাকে।

টেবিল

ডিফল্টরূপে, Firebase আপনার প্রকল্পের প্রতিটি অ্যাপের জন্য Firebase সেশন ডেটাসেটের ভিতরে পৃথক টেবিল তৈরি করে যা BigQuery এর সাথে লিঙ্ক করা আছে।

অ্যাপের শনাক্তকারীর উপর ভিত্তি করে টেবিলগুলির নামকরণ করা হয় (পিরিয়ডগুলিকে আন্ডারস্কোরে রূপান্তরিত করে) এবং অ্যাপের প্ল্যাটফর্মের সাথে যুক্ত করা হয় ( _IOS অথবা _ANDROID )। উদাহরণস্বরূপ, com.google.test প্যাকেজ নামের একটি অ্যান্ড্রয়েড অ্যাপের ডেটা com_google_test_ANDROID নামক একটি টেবিলে থাকবে।

সারি

একটি টেবিলের প্রতিটি সারি একটি সেশন ইভেন্টকে প্রতিনিধিত্ব করে যা ঘটেছিল।

কলাম

যদি BigQuery তে স্ট্রিমিং এক্সপোর্ট সক্ষম করা থাকে, তাহলে রিয়েলটাইম টেবিলে ব্যাচ টেবিলের মতো একই কলাম থাকবে।

এক্সপোর্ট করা Firebase সেশন ডেটার জন্য টেবিলের মধ্যে কলামগুলি এখানে দেওয়া হল:

ক্ষেত্রের নাম ডেটা টাইপ বিবরণ
instance_id স্ট্রিং ডিভাইস থেকে Firebase ইনস্টলেশন আইডি (FID)। একটি অনন্য অ্যাপ + ডিভাইস ইনস্টলেশন শনাক্ত করে
session_id স্ট্রিং এই সেশনের অনন্য আইডি
first_session_id স্ট্রিং অ্যাপটি কোল্ড স্টার্ট হওয়ার পর থেকে এই সেশনের সিরিজের সেশনের প্রথম আইডি। কোল্ড স্টার্টের পর থেকে সংঘটিত সমস্ত সেশনগুলিকে গোষ্ঠীভুক্ত করতে এটি ব্যবহার করা যেতে পারে। যদি এই সেশনটি প্রথম সেশন হয়, তাহলে এই ক্ষেত্রটি session_id মতোই হবে।
session_index পূর্ণসংখ্যা অ্যাপটি কোল্ড স্টার্ট হওয়ার পর এই সেশনটি যে ক্রমানুসারে এসেছে। কোল্ড স্টার্টের পর প্রথম সেশনের জন্য, এটি 0 হবে। কোল্ড স্টার্ট না ঘটলে (উদাহরণস্বরূপ, 30 মিনিট নিষ্ক্রিয়তার পরে) প্রতিবার একটি সেশন তৈরি হলে সূচকটি বৃদ্ধি পাবে।
event_type স্ট্রিং সেশনে ঘটে যাওয়া ইভেন্টের ধরণ (উদাহরণস্বরূপ, SESSION_START )
event_timestamp টাইমস্ট্যাম্প ঘটনাটি সংঘটিত হওয়ার সময়
received_timestamp টাইমস্ট্যাম্প ডিভাইস থেকে সার্ভার যে সময় ইভেন্টটি গ্রহণ করেছিল
performance_data_collection_enabled বুলিয়ান সেশনের সময় Firebase পারফর্মেন্স মনিটরিং SDK ডেটা সংগ্রহ সক্ষম করা হয়েছিল কিনা
crashlytics_data_collection_enabled বুলিয়ান সেশনের সময় Firebase Crashlytics SDK ডেটা সংগ্রহ সক্ষম করা হয়েছিল কিনা
application রেকর্ড অ্যাপ্লিকেশনটি বর্ণনা করে
application.build_version স্ট্রিং অ্যাপ্লিকেশনটির বিল্ড সংস্করণ (উদাহরণস্বরূপ, 1523456 )
application.display_version স্ট্রিং অ্যাপ্লিকেশনটির প্রদর্শন সংস্করণ (উদাহরণস্বরূপ, 4.1.7 )
device রেকর্ড যে ডিভাইসে ঘটনাটি ঘটেছে
device.model স্ট্রিং ডিভাইসটির মডেল
device.manufacturer স্ট্রিং ডিভাইসটির নির্মাতা। অ্যাপল প্ল্যাটফর্ম অ্যাপের জন্য, এটি হবে NULL
operating_system রেকর্ড ডিভাইসের অপারেটিং সিস্টেম বর্ণনা করে
operating_system.display_version স্ট্রিং অপারেটিং সিস্টেমের ডিসপ্লে ভার্সন (উদাহরণস্বরূপ, 10.2.1 )
operating_system.name স্ট্রিং অপারেটিং সিস্টেমের নাম
operating_system.type স্ট্রিং অপারেটিং সিস্টেমের ধরণ (উদাহরণস্বরূপ, IOS )। এই ক্ষেত্রটি শুধুমাত্র অ্যাপল ডিভাইসের জন্য সেট করা আছে।
operating_system.device_type স্ট্রিং ডিভাইসের ধরণ (উদাহরণস্বরূপ, MOBILE , TABLET , TV )



নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করুন

২০২৪ সালের অক্টোবরের মাঝামাঝি সময়ে, Crashlytics BigQuery Crashlytics ডেটা ব্যাচ রপ্তানির জন্য একটি নতুন অবকাঠামো চালু করে।

সমস্ত Firebase প্রকল্পগুলি ১৫ সেপ্টেম্বর, ২০২৫ তারিখের মধ্যে স্বয়ংক্রিয়ভাবে নতুন ব্যাচ এক্সপোর্ট অবকাঠামোতে আপগ্রেড করা হবে। আপনি এই তারিখের আগে আপগ্রেড করতে পারেন, তবে নিশ্চিত করুন যে আপনার BigQuery ব্যাচ টেবিলগুলি আপগ্রেড করার পূর্বশর্তগুলি পূরণ করে।

আপনি নতুন অবকাঠামোতে আপগ্রেড করতে পারেন, তবে নিশ্চিত করুন যে আপনার BigQuery ব্যাচ টেবিলগুলি আপগ্রেড করার পূর্বশর্তগুলি পূরণ করে।

আপনি নতুন অবকাঠামোতে আছেন কিনা তা নির্ধারণ করুন

যদি আপনি ২০২৪ সালের অক্টোবরের মাঝামাঝি বা তার পরে ব্যাচ এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনার ফায়ারবেস প্রকল্পটি স্বয়ংক্রিয়ভাবে নতুন এক্সপোর্ট অবকাঠামো ব্যবহার করছে।

আপনার প্রকল্পটি কোন অবকাঠামো ব্যবহার করছে তা আপনি পরীক্ষা করতে পারেন: Google Cloud কনসোলে যান এবং যদি আপনার "ডেটা ট্রান্সফার কনফিগারেশন" লেবেলযুক্ত হয় Firebase Crashlytics with Multi-Region Support , তাহলে আপনার প্রকল্পটি নতুন রপ্তানি অবকাঠামো ব্যবহার করছে।

পুরাতন রপ্তানি অবকাঠামো এবং নতুন রপ্তানি অবকাঠামোর মধ্যে গুরুত্বপূর্ণ পার্থক্য

  • নতুন অবকাঠামোটি মার্কিন যুক্তরাষ্ট্রের বাইরে Crashlytics ডেটাসেট অবস্থানগুলিকে সমর্থন করে।

    • ২০২৪ সালের অক্টোবরের মাঝামাঝি আগে রপ্তানি সক্ষম করা হয়েছে এবং নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করা হয়েছে — আপনি এখন ঐচ্ছিকভাবে ডেটা রপ্তানির জন্য অবস্থান পরিবর্তন করতে পারেন।

    • ২০২৪ সালের অক্টোবরের মাঝামাঝি বা তার পরে রপ্তানি সক্ষম করা হয়েছে — সেটআপের সময় আপনাকে ডেটা রপ্তানির জন্য একটি অবস্থান নির্বাচন করতে বলা হয়েছিল।

  • নতুন পরিকাঠামোটি রপ্তানি সক্ষম করার আগে থেকে ডেটা ব্যাকফিল সমর্থন করে না।

    • পুরনো অবকাঠামো রপ্তানি সক্ষম করার তারিখের 30 দিন আগে পর্যন্ত ব্যাকফিল সমর্থন করত।

    • নতুন পরিকাঠামোটি গত 30 দিন পর্যন্ত অথবা BigQuery তে রপ্তানি সক্ষম করার সময় সাম্প্রতিকতম তারিখের (যেটি সাম্প্রতিকতম) ব্যাকফিল সমর্থন করে।

  • নতুন অবকাঠামোটি আপনার Firebase প্রকল্পে আপনার Firebase অ্যাপের জন্য সেট করা শনাক্তকারী ব্যবহার করে BigQuery ব্যাচ টেবিলের নামকরণ করে।

    • পুরাতন অবকাঠামো আপনার অ্যাপের বাইনারিতে থাকা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে নাম সহ ব্যাচ টেবিলে ডেটা লিখেছিল।

    • নতুন পরিকাঠামোটি আপনার Firebase প্রকল্পে নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে নাম সহ ব্যাচ টেবিলে ডেটা লেখে।

ধাপ ১ : আপগ্রেড করার পূর্বশর্ত

  1. আপনার বিদ্যমান BigQuery ব্যাচ টেবিলগুলি আপনার Firebase প্রকল্পে নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের সাথে মিলে যাওয়া শনাক্তকারী ব্যবহার করে কিনা তা পরীক্ষা করে দেখুন। যদি সেগুলি না মেলে, তাহলে আপনার রপ্তানি করা ব্যাচ ডেটাতে ব্যাঘাত ঘটতে পারে। বেশিরভাগ প্রকল্পই সঠিক এবং সামঞ্জস্যপূর্ণ অবস্থায় থাকবে, তবে আপগ্রেড করার আগে এটি পরীক্ষা করা গুরুত্বপূর্ণ।

    • আপনার Firebase প্রজেক্টে নিবন্ধিত সমস্ত Firebase অ্যাপ Firebase কনসোলে পাবেন: আপনার Project settings এ যান, তারপর আপনার সমস্ত Firebase অ্যাপ এবং তাদের তথ্য দেখতে Your apps কার্ডে স্ক্রোল করুন।

    • আপনি Google Cloud console-এর BigQuery পৃষ্ঠায় আপনার সমস্ত BigQuery ব্যাচ টেবিল খুঁজে পেতে পারেন।

    উদাহরণস্বরূপ, এখানে আদর্শ রাজ্যগুলি রয়েছে যেখানে আপগ্রেড করার সময় আপনার কোনও সমস্যা হবে না:

    • আপনার Firebase প্রজেক্টে com_yourcompany_yourproject_IOS নামে একটি ব্যাচ টেবিল এবং com.yourcompany.yourproject বান্ডেল আইডি সহ একটি Firebase iOS+ অ্যাপ নিবন্ধিত আছে।

    • আপনার Firebase প্রজেক্টে com_yourcompany_yourproject_ANDROID নামে একটি ব্যাচ টেবিল এবং com.yourcompany.yourproject প্যাকেজ নাম সহ একটি Firebase Android অ্যাপ নিবন্ধিত আছে।

  2. যদি আপনার ব্যাচ টেবিলের নামগুলি আপনার নিবন্ধিত Firebase অ্যাপের জন্য সেট করা শনাক্তকারীর সাথে মেলে না , তাহলে আপনার ব্যাচ এক্সপোর্টে ব্যাঘাত এড়াতে ম্যানুয়ালি আপগ্রেড করার আগে বা 15 সেপ্টেম্বর, 2025 এর আগে এই পৃষ্ঠায় দেওয়া নির্দেশাবলী অনুসরণ করুন

ধাপ ২ : নতুন পরিকাঠামোতে ম্যানুয়ালি আপগ্রেড করুন

যদি আপনি ২০২৪ সালের অক্টোবরের মাঝামাঝি আগে ব্যাচ এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনি Firebase কনসোলে Crashlytics ডেটা এক্সপোর্ট বন্ধ করে আবার চালু করে ম্যানুয়ালি নতুন অবকাঠামোতে আপগ্রেড করতে পারেন।

এখানে বিস্তারিত পদক্ষেপগুলি দেওয়া হল:

  1. Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।

  2. In the BigQuery card, click Manage .

  3. Toggle off the Crashlytics slider to disable export. When prompted, confirm that you want data export to stop.

  4. Immediately toggle on again the Crashlytics slider to re-enable export. When prompted, confirm that you want to export data.

    Your Crashlytics data export to BigQuery is now using the new export infrastructure.

Your existing batch table name doesn't match your Firebase App identifier