আরও বিশ্লেষণের জন্য আপনি আপনার Firebase Crashlytics ডেটা BigQuery তে রপ্তানি করতে পারেন। BigQuery আপনাকে BigQuery SQL ব্যবহার করে ডেটা বিশ্লেষণ করতে, অন্য ক্লাউড প্রদানকারীতে রপ্তানি করতে এবং Looker Studio এর মাধ্যমে ভিজ্যুয়ালাইজেশন এবং কাস্টম ড্যাশবোর্ডের জন্য এটি ব্যবহার করতে দেয়।
রপ্তানি করা ডেটা দিয়ে আপনি কী করতে পারেন?
BigQuery তে রপ্তানি করা তথ্যে ডিভাইসের ধরণ, অপারেটিং সিস্টেম, ব্যতিক্রম (অ্যান্ড্রয়েড অ্যাপ) বা ত্রুটি (অ্যাপল অ্যাপ) এবং Crashlytics লগ সহ অন্যান্য তথ্য সহ কাঁচা ক্র্যাশ ডেটা থাকে। আপনি এই পৃষ্ঠায় পরে Crashlytics ডেটা কীভাবে রপ্তানি করা হয় এবং এর টেবিল স্কিমা পর্যালোচনা করতে পারেন।
আপনার রপ্তানি করা Crashlytics ডেটা দিয়ে আপনি কী করতে পারেন তার কিছু উদাহরণ এখানে দেওয়া হল:
কোয়েরি চালান
আপনি আপনার Crashlytics ডেটাতে কোয়েরি চালাতে পারেন যাতে ক্র্যাশ ইভেন্ট ডেটাকে আরও সহজে বোধগম্য সারসংক্ষেপে একত্রিত করে এমন রিপোর্ট তৈরি করা যায়। যেহেতু এই ধরণের রিপোর্ট Firebase কনসোলের Crashlytics ড্যাশবোর্ডে পাওয়া যায় না, তাই এগুলি আপনার বিশ্লেষণ এবং ক্র্যাশ ডেটা বোঝার পরিপূরক হতে পারে। পরে এই পৃষ্ঠায়, উদাহরণ কোয়েরির একটি নির্বাচন খুঁজুন।একটি Looker Studio টেমপ্লেট ব্যবহার করুন
Crashlytics আপনার রপ্তানি করা ডেটা ভিজ্যুয়ালাইজ করার জন্য একটি পূর্ব-নির্মিত Looker Studio টেমপ্লেট প্রদান করে।ভিউ তৈরি করুন
BigQuery UI ব্যবহার করে, আপনি একটি "view" তৈরি করতে পারেন, যা একটি SQL কোয়েরি দ্বারা সংজ্ঞায়িত একটি ভার্চুয়াল টেবিল। বিভিন্ন ধরণের ভিউ এবং কীভাবে সেগুলি তৈরি করবেন সে সম্পর্কে বিস্তারিত নির্দেশাবলীর জন্য, BigQuery ডকুমেন্টেশন দেখুন।
Crashlytics স্ট্রিমিং BigQuery রপ্তানি করছে
BigQuery স্ট্রিমিং এর মাধ্যমে আপনি আপনার Crashlytics ডেটা রিয়েলটাইমে স্ট্রিম করতে পারেন। আপনি এটি যেকোনো উদ্দেশ্যে ব্যবহার করতে পারেন যার জন্য লাইভ ডেটা প্রয়োজন, যেমন লাইভ ড্যাশবোর্ডে তথ্য উপস্থাপন করা, লাইভ রোলআউট দেখা, অথবা অ্যালার্ট এবং কাস্টম ওয়ার্কফ্লো ট্রিগার করে এমন অ্যাপ্লিকেশন সমস্যাগুলি পর্যবেক্ষণ করা।
যখন আপনি BigQuery তে Crashlytics স্ট্রিমিং এক্সপোর্ট সক্ষম করবেন, তখন ব্যাচ টেবিল ছাড়াও আপনার কাছে একটি রিয়েলটাইম টেবিলও থাকবে। টেবিলগুলির মধ্যে আপনার যে পার্থক্যগুলি সম্পর্কে সচেতন থাকা উচিত তা এখানে দেওয়া হল:
| ব্যাচ টেবিল | রিয়েলটাইম টেবিল |
|---|---|
|
|
ব্যাচ টেবিলটি দীর্ঘমেয়াদী বিশ্লেষণ এবং সময়ের সাথে সাথে ট্রেন্ড সনাক্তকরণের জন্য আদর্শ কারণ আমরা ইভেন্টগুলি লেখার আগে টেকসইভাবে সংরক্ষণ করি এবং সেগুলি 30 দিন পর্যন্ত টেবিলে ব্যাকফিল করা যেতে পারে*। যখন আমরা আপনার রিয়েলটাইম টেবিলে ডেটা লিখি, তখন আমরা তাৎক্ষণিকভাবে BigQuery এ লিখে ফেলি, এবং তাই এটি লাইভ ড্যাশবোর্ড এবং কাস্টম সতর্কতার জন্য আদর্শ। উভয়ের সুবিধা পেতে এই দুটি টেবিলকে একটি স্টিচিং কোয়েরির সাথে একত্রিত করা যেতে পারে।
ডিফল্টরূপে, রিয়েলটাইম টেবিলের পার্টিশনের মেয়াদ শেষ হওয়ার সময় 30 দিন। এটি কীভাবে পরিবর্তন করবেন তা জানতে, BigQuery ডকুমেন্টেশনে পার্টিশনের মেয়াদ শেষ হওয়ার সময় সেট করুন দেখুন।
* নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করুন বিভাগে ব্যাকফিল সহায়তা সম্পর্কে বিস্তারিত দেখুন।
BigQuery তে এক্সপোর্ট সক্ষম করুন
Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।
BigQuery কার্ডে, লিঙ্ক এ ক্লিক করুন।
BigQuery তে রপ্তানি সক্ষম করতে স্ক্রিনে প্রদর্শিত নির্দেশাবলী অনুসরণ করুন।
যদি আপনি BigQuery তে আপনার Crashlytics ডেটাতে রিয়েল-টাইম অ্যাক্সেস চান, তাহলে স্ট্রিমিং এক্সপোর্টে আপগ্রেড করার কথা বিবেচনা করুন।
BigQuery তে Crashlytics স্ট্রিমিং এক্সপোর্ট সক্ষম করুন
Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।
BigQuery কার্ডে, Manage এ ক্লিক করুন।
স্ট্রিমিং অন্তর্ভুক্ত করুন চেকবক্সটি নির্বাচন করুন।
এই ক্রিয়াটি আপনার সমস্ত লিঙ্ক করা অ্যাপের জন্য স্ট্রিমিং সক্ষম করে।
নিশ্চিত করুন যে আপনি আপনার অ্যাপ থেকে কমপক্ষে দুটি ইভেন্ট Crashlytics এ পাঠিয়েছেন এবং সেগুলি পাঠানোর পর কয়েক মিনিট অপেক্ষা করেছেন।
নিশ্চিত করুন যে আপনার Firebase প্রকল্পটি পে-অ্যাজ-ইউ-গো ব্লেজ প্রাইসিং প্ল্যানে রয়েছে।
আপনি Firebase কনসোলের নীচের বাম কোণে দেখে এটি পরীক্ষা করতে পারেন।দুটি ইভেন্ট পাঠানোর এবং কয়েক মিনিট অপেক্ষা করার পরেও যদি আপনার রিয়েলটাইম টেবিলে কোনও ডেটা না থাকে:
Firebase কনসোলের BigQuery কার্ডে যান।
স্ট্রিমিং এক্সপোর্ট অক্ষম করুন এবং তারপর পুনরায় সক্ষম করুন।
পরিষেবা অ্যাকাউন্টটি নিশ্চিত করুন
service- PROJECT_NUMBER @gcp-sa-crashlytics.iam.gserviceaccount.comআপনার Firebase প্রকল্পে রয়েছে এবং Firebase Crashlytics পরিষেবা এজেন্টের ভূমিকা রয়েছে।
আপনি Google Cloud কনসোলের IAM পৃষ্ঠায় এটি পরীক্ষা করতে পারেন ( Include গুগল-প্রদত্ত ভূমিকা অনুদানের জন্য চেকবক্সটি নির্বাচন করতে ভুলবেন না)।কমপক্ষে দুটি ইভেন্ট Crashlytics এ পাঠান এবং কয়েক মিনিট অপেক্ষা করুন।
যদি আপনি এখনও আপনার রিয়েলটাইম টেবিলে ডেটা দেখতে না পান, তাহলে Firebase Support-এর সাথে যোগাযোগ করুন ।
রপ্তানি সক্ষম করলে কী হবে?
আপনি ডেটাসেটের অবস্থান নির্বাচন করুন। ডেটাসেট তৈরি হওয়ার পরে, অবস্থান পরিবর্তন করা যাবে না, তবে আপনি ডেটাসেটটি অন্য কোনও স্থানে অনুলিপি করতে পারেন অথবা ম্যানুয়ালি ডেটাসেটটি অন্য কোনও স্থানে স্থানান্তর (পুনরায় তৈরি) করতে পারেন। আরও জানতে, বিদ্যমান রপ্তানির জন্য অবস্থান পরিবর্তন করুন দেখুন।
এই অবস্থানটি শুধুমাত্র BigQuery তে রপ্তানি করা ডেটার জন্য প্রযোজ্য, এবং এটি Firebase কনসোলের Crashlytics ড্যাশবোর্ডে বা Android Studio-তে ব্যবহারের জন্য সংরক্ষিত ডেটার অবস্থানকে প্রভাবিত করে না।
ডিফল্টরূপে, আপনার প্রোজেক্টের সমস্ত অ্যাপ BigQuery এর সাথে লিঙ্ক করা থাকে এবং পরবর্তীতে আপনি যে অ্যাপগুলি প্রোজেক্টে যোগ করেন সেগুলি স্বয়ংক্রিয়ভাবে BigQuery এর সাথে লিঙ্ক করা হয়। কোন অ্যাপগুলি ডেটা পাঠায় তা আপনি পরিচালনা করতে পারেন।
Firebase আপনার ডেটার দৈনিক BigQuery তে সিঙ্ক সেট আপ করে।
আপনার প্রোজেক্ট লিঙ্ক করার পরে, আপনার প্রথম ডেটা BigQuery এ এক্সপোর্ট করার জন্য আপনাকে সাধারণত পরের দিনের সিঙ্ক পর্যন্ত অপেক্ষা করতে হবে।
BigQuery তে আপনার নির্ধারিত কোনও এক্সপোর্ট সেট আপ করা থাকুক না কেন, দৈনিক সিঙ্কটি দিনে একবার হয়। মনে রাখবেন যে সিঙ্ক কাজের সময় এবং সময়কাল পরিবর্তিত হতে পারে, তাই আমরা এক্সপোর্টের নির্দিষ্ট সময়ের উপর ভিত্তি করে ডাউনস্ট্রিম অপারেশন বা কাজগুলি শিডিউল করার পরামর্শ দিই না।
Firebase আপনার বিদ্যমান ডেটার একটি কপি BigQuery তে রপ্তানি করে। রপ্তানির জন্য ডেটার প্রাথমিক প্রচারে ৪৮ ঘন্টা পর্যন্ত সময় লাগতে পারে।
প্রতিটি লিঙ্ক করা অ্যাপের জন্য, এই এক্সপোর্টে দৈনিক সিঙ্ক থেকে ডেটা ধারণকারী একটি ব্যাচ টেবিল অন্তর্ভুক্ত থাকে।
আপনি ব্যাচ টেবিলের জন্য গত 30 দিনের ডেটা ব্যাকফিল ম্যানুয়ালি শিডিউল করতে পারেন অথবা BigQuery তে এক্সপোর্ট সক্ষম করার সময় সাম্প্রতিকতম তারিখের জন্য (যেটি সাম্প্রতিকতম)।
মনে রাখবেন যে আপনি যদি ২০২৪ সালের অক্টোবরের মাঝামাঝি সময়ের আগে Crashlytics ডেটা রপ্তানি সক্ষম করে থাকেন, তাহলে আপনি রপ্তানি সক্ষম করার ৩০ দিন আগেও ব্যাকফিল করতে পারবেন।
যদি আপনি BigQuery তে Crashlytics স্ট্রিমিং এক্সপোর্ট সক্ষম করেন , তাহলে সমস্ত লিঙ্ক করা অ্যাপে একটি রিয়েলটাইম টেবিল থাকবে যেখানে ক্রমাগত আপডেট হওয়া ডেটা থাকবে।
BigQuery তে রপ্তানি নিষ্ক্রিয় করতে, Firebase কনসোলে আপনার প্রকল্পটি আনলিঙ্ক করুন ।
উদাহরণ কোয়েরি
উদাহরণ ১: দিনের বেলায় ক্র্যাশ
যতটা সম্ভব বাগ ঠিক করার চেষ্টা করার পর, আপনার মনে হয় আপনার টিম অবশেষে আপনার নতুন ফটো-শেয়ারিং অ্যাপ চালু করার জন্য প্রস্তুত। তা করার আগে, আপনাকে গত মাসে প্রতিদিন কতবার ক্র্যাশ হয়েছে তা পরীক্ষা করে দেখতে হবে, যাতে নিশ্চিত হতে পারি যে আপনার বাগ-ব্যাশ সময়ের সাথে সাথে অ্যাপটিকে আরও স্থিতিশীল করে তুলেছে।
এখানে একটি 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;উদাহরণ ৭: ক্র্যাশ সমস্যার দ্বারা প্রভাবিত ব্যবহারকারীর সংখ্যা, দেশ অনুসারে বিভক্ত
আপনার টিম একটি নতুন রিলিজ চালু করার সময় একটি গুরুতর বাগ সনাক্ত করেছে। আপনি উপরে "সবচেয়ে ব্যাপক ক্র্যাশ খুঁজুন" উদাহরণ থেকে কোয়েরিটি ব্যবহার করে নির্দিষ্ট ক্র্যাশ সমস্যা আইডি সনাক্ত করতে সক্ষম হয়েছেন। আপনার টিম এখন দেখতে চাইবে যে এই ক্র্যাশটি বিশ্বের বিভিন্ন দেশের ব্যবহারকারীদের মধ্যে ছড়িয়ে পড়েছে কিনা।
এই কোয়েরিটি লেখার জন্য, আপনার টিমকে নিম্নলিখিতগুলি করতে হবে:
BigQuery তে Google Analytics ডেটা রপ্তানি সক্ষম করুন। BigQuery-তে প্রকল্প ডেটা রপ্তানি দেখুন।
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");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 টেমপ্লেটের রিয়েলটাইম ট্রেন্ডস পৃষ্ঠায় সেই ডেটা দেখতে পারেন। আপনি আপনার নিজস্ব অ্যাপের কাঁচা ক্র্যাশ ডেটার উপর ভিত্তি করে দ্রুত নতুন প্রতিবেদন এবং ভিজ্যুয়ালাইজেশন তৈরি করতে নমুনাটিকে একটি টেমপ্লেট হিসাবে ব্যবহার করতে পারেন:
উপরের ডানদিকে কোণায় "টেমপ্লেট ব্যবহার করুন" এ ক্লিক করুন।
নতুন ডেটা সোর্স ড্রপ ডাউনে, নতুন ডেটা সোর্স তৈরি করুন নির্বাচন করুন।
BigQuery কার্ডে Select এ ক্লিক করুন।
My Projects > PROJECT_ID > firebase_crashlytics > TABLE_NAME বেছে নিয়ে এক্সপোর্ট করা Crashlytics ডেটা ধারণকারী একটি টেবিল নির্বাচন করুন।
আপনার ব্যাচ টেবিলটি সর্বদা নির্বাচনের জন্য উপলব্ধ। যদি Crashlytics স্ট্রিমিং BigQuery তে এক্সপোর্ট সক্ষম করা থাকে, তাহলে আপনি পরিবর্তে আপনার রিয়েলটাইম টেবিলটি নির্বাচন করতে পারেন।
কনফিগারেশনের অধীনে, Crashlytics টেমপ্লেট স্তরটি ডিফল্টে সেট করুন।
নতুন ডেটা উৎস তৈরি করতে Connect এ ক্লিক করুন।
Crashlytics টেমপ্লেটে ফিরে যেতে Add to Report এ ক্লিক করুন।
অবশেষে, Crashlytics Looker Studio Dashboard টেমপ্লেটের আপনার কপি তৈরি করতে Create Report এ ক্লিক করুন।
BigQuery তে Crashlytics স্কিমা বুঝুন
Firebase Crashlytics ডেটা firebase_crashlytics নামক একটি BigQuery ডেটাসেটে রপ্তানি করা হয়। ডেটাসেটটি আপনার সম্পূর্ণ প্রকল্পকে কভার করে, এমনকি যদি এতে একাধিক অ্যাপ থাকে।
টেবিল
ডিফল্টরূপে, Firebase আপনার প্রোজেক্টের প্রতিটি অ্যাপের জন্য Crashlytics ডেটাসেটের ভিতরে পৃথক টেবিল তৈরি করে যা BigQuery এর সাথে লিঙ্ক করা থাকে। টেবিলগুলির নামকরণ অ্যাপের শনাক্তকারীর উপর ভিত্তি করে করা হয় (পিরিয়ডগুলিকে আন্ডারস্কোরে রূপান্তরিত করে) এবং অ্যাপের প্ল্যাটফর্মের সাথে যুক্ত করা হয় ( _IOS অথবা _ANDROID )। উদাহরণস্বরূপ, com.google.test প্যাকেজ নামের একটি অ্যান্ড্রয়েড অ্যাপের ডেটা com_google_test_ANDROID নামক একটি টেবিলে থাকবে।
যদি আপনি BigQuery তে Crashlytics স্ট্রিমিং এক্সপোর্ট সক্ষম করেন, তাহলে Crashlytics ডেটা রিয়েলটাইমে _REALTIME (উদাহরণস্বরূপ, com_google_test_ANDROID_REALTIME ) এর সাথে সংযুক্ত একটি টেবিলে স্ট্রিম করা হবে।
একটি টেবিলের প্রতিটি সারি অ্যাপে ঘটে যাওয়া একটি ইভেন্টকে প্রতিনিধিত্ব করে, যার মধ্যে রয়েছে ক্র্যাশ, অ-মারাত্মক ত্রুটি এবং ANR।
টেবিলগুলিতে আপনার অ্যাপে আপনার দ্বারা সংজ্ঞায়িত যেকোনো কাস্টম Crashlytics কী ছাড়াও Crashlytics ডেটার একটি স্ট্যান্ডার্ড সেট থাকে।
সারি
একটি টেবিলের প্রতিটি সারি অ্যাপটির সম্মুখীন হওয়া একটি ত্রুটির প্রতিনিধিত্ব করে।
কলাম
ক্র্যাশ, নন-ফ্যাটাল এরর এবং ANR-এর জন্য টেবিলের কলামগুলি একই রকম। যদি BigQuery তে Crashlytics স্ট্রিমিং এক্সপোর্ট সক্ষম করা থাকে, তাহলে রিয়েলটাইম টেবিলে ব্যাচ টেবিলের মতো একই কলাম থাকবে। মনে রাখবেন যে আপনার সারিতে এমন কলাম থাকতে পারে যা এমন ইভেন্টগুলিকে প্রতিনিধিত্ব করে যার স্ট্যাক ট্রেস নেই।
রপ্তানি করা 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) |
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 | স্ট্রিং | এই ইভেন্টের সাথে সম্পর্কিত সমস্যার ধরণ মনে রাখবেন যে সমস্ত ইভেন্টের কোনও সম্পর্কিত সমস্যার বৈকল্পিক থাকে না। |
নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করুন
২০২৪ সালের অক্টোবরের মাঝামাঝি সময়ে, Crashlytics BigQuery Crashlytics ডেটা ব্যাচ রপ্তানির জন্য একটি নতুন অবকাঠামো চালু করে।
সমস্ত Firebase প্রকল্পগুলি ১৫ সেপ্টেম্বর, ২০২৫ তারিখের মধ্যে স্বয়ংক্রিয়ভাবে নতুন ব্যাচ এক্সপোর্ট অবকাঠামোতে আপগ্রেড করা হবে। আপনি এই তারিখের আগে আপগ্রেড করতে পারেন, তবে নিশ্চিত করুন যে আপনার BigQuery ব্যাচ টেবিলগুলি আপগ্রেড করার পূর্বশর্তগুলি পূরণ করে।
আপনি নতুন অবকাঠামোতে আপগ্রেড করতে পারেন, তবে নিশ্চিত করুন যে আপনার BigQuery ব্যাচ টেবিলগুলি আপগ্রেড করার পূর্বশর্তগুলি পূরণ করে।
আপনি নতুন অবকাঠামোতে আছেন কিনা তা নির্ধারণ করুন
যদি আপনি ২০২৪ সালের অক্টোবরের মাঝামাঝি বা তার পরে ব্যাচ এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনার ফায়ারবেস প্রকল্পটি স্বয়ংক্রিয়ভাবে নতুন এক্সপোর্ট অবকাঠামো ব্যবহার করছে।
আপনার প্রকল্পটি কোন অবকাঠামো ব্যবহার করছে তা আপনি পরীক্ষা করতে পারেন: Google Cloud কনসোলে যান এবং যদি আপনার "ডেটা ট্রান্সফার কনফিগারেশন" লেবেলযুক্ত হয় Firebase Crashlytics with Multi-Region Support , তাহলে আপনার প্রকল্পটি নতুন রপ্তানি অবকাঠামো ব্যবহার করছে।
পুরাতন রপ্তানি অবকাঠামো এবং নতুন রপ্তানি অবকাঠামোর মধ্যে গুরুত্বপূর্ণ পার্থক্য
নতুন অবকাঠামোটি মার্কিন যুক্তরাষ্ট্রের বাইরে Crashlytics ডেটাসেট অবস্থানগুলিকে সমর্থন করে।
২০২৪ সালের অক্টোবরের মাঝামাঝি আগে রপ্তানি সক্ষম করা হয়েছে এবং নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করা হয়েছে — আপনি এখন ঐচ্ছিকভাবে ডেটা রপ্তানির জন্য অবস্থান পরিবর্তন করতে পারেন।
২০২৪ সালের অক্টোবরের মাঝামাঝি বা তার পরে রপ্তানি সক্ষম করা হয়েছে — সেটআপের সময় আপনাকে ডেটা রপ্তানির জন্য একটি অবস্থান নির্বাচন করতে বলা হয়েছিল।
নতুন পরিকাঠামোটি রপ্তানি সক্ষম করার আগে থেকে ডেটা ব্যাকফিল সমর্থন করে না।
পুরনো অবকাঠামো রপ্তানি সক্ষম করার তারিখের 30 দিন আগে পর্যন্ত ব্যাকফিল সমর্থন করত।
নতুন পরিকাঠামোটি গত 30 দিন পর্যন্ত অথবা BigQuery তে রপ্তানি সক্ষম করার সময় সাম্প্রতিকতম তারিখের (যেটি সাম্প্রতিকতম) ব্যাকফিল সমর্থন করে।
নতুন অবকাঠামোটি আপনার Firebase প্রকল্পে আপনার Firebase অ্যাপের জন্য সেট করা শনাক্তকারী ব্যবহার করে BigQuery ব্যাচ টেবিলের নামকরণ করে।
পুরাতন অবকাঠামো আপনার অ্যাপের বাইনারিতে থাকা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে নাম সহ ব্যাচ টেবিলে ডেটা লিখেছিল।
নতুন পরিকাঠামোটি আপনার Firebase প্রকল্পে নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে নাম সহ ব্যাচ টেবিলে ডেটা লেখে।
ধাপ ১ : আপগ্রেড করার পূর্বশর্ত
আপনার বিদ্যমান 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 অ্যাপ নিবন্ধিত আছে।
যদি আপনার ব্যাচ টেবিলের নামগুলি আপনার নিবন্ধিত Firebase অ্যাপের জন্য সেট করা শনাক্তকারীর সাথে মেলে না , তাহলে আপনার ব্যাচ এক্সপোর্টে ব্যাঘাত এড়াতে ম্যানুয়ালি আপগ্রেড করার আগে বা 15 সেপ্টেম্বর, 2025 এর আগে এই পৃষ্ঠায় দেওয়া নির্দেশাবলী অনুসরণ করুন ।
ধাপ ২ : নতুন পরিকাঠামোতে ম্যানুয়ালি আপগ্রেড করুন
যদি আপনি ২০২৪ সালের অক্টোবরের মাঝামাঝি আগে ব্যাচ এক্সপোর্ট সক্ষম করে থাকেন, তাহলে আপনি Firebase কনসোলে Crashlytics ডেটা এক্সপোর্ট বন্ধ করে আবার চালু করে ম্যানুয়ালি নতুন অবকাঠামোতে আপগ্রেড করতে পারেন।
এখানে বিস্তারিত পদক্ষেপগুলি দেওয়া হল:
Firebase কনসোলে, ইন্টিগ্রেশন পৃষ্ঠায় যান।
BigQuery কার্ডে, Manage এ ক্লিক করুন।
এক্সপোর্ট বন্ধ করতে Crashlytics স্লাইডারটি টগল করে বন্ধ করুন। অনুরোধ করা হলে, নিশ্চিত করুন যে আপনি ডেটা এক্সপোর্ট বন্ধ করতে চান।
এক্সপোর্ট পুনরায় সক্ষম করতে অবিলম্বে Crashlytics স্লাইডারটি আবার টগল করুন। অনুরোধ করা হলে, নিশ্চিত করুন যে আপনি ডেটা এক্সপোর্ট করতে চান।
BigQuery তে আপনার Crashlytics ডেটা এক্সপোর্ট এখন নতুন এক্সপোর্ট অবকাঠামো ব্যবহার করছে।
আপনার বিদ্যমান ব্যাচ টেবিলের নামটি আপনার Firebase অ্যাপ শনাক্তকারীর সাথে মেলে না।
যদি আপনার BigQuery ব্যাচ টেবিলগুলি এই অবস্থায় থাকে, তাহলে এর অর্থ হল সেগুলি Firebase-এর নতুন ব্যাচ এক্সপোর্ট-টু- BigQuery অবকাঠামোর সাথে সামঞ্জস্যপূর্ণ নয়। মনে রাখবেন যে সমস্ত Firebase প্রকল্পগুলি স্বয়ংক্রিয়ভাবে 15 সেপ্টেম্বর, 2025 তারিখের মধ্যে নতুন এক্সপোর্ট অবকাঠামোতে স্থানান্তরিত হবে।
BigQuery তে আপনার Crashlytics ডেটার ব্যাচ এক্সপোর্টে ব্যাঘাত এড়াতে ম্যানুয়ালি আপগ্রেড করার আগে অথবা ১৫ সেপ্টেম্বর, ২০২৫ এর আগে এই বিভাগের নির্দেশিকা অনুসরণ করুন।
বাধা এড়াতে বিকল্পগুলির জন্য নির্দেশাবলীতে যান
BigQuery টেবিলে ডেটা লেখার জন্য এক্সপোর্ট অবকাঠামো কীভাবে শনাক্তকারী ব্যবহার করে তা বুঝুন
দুটি এক্সপোর্ট অবকাঠামো কীভাবে BigQuery ব্যাচ টেবিলে Crashlytics ডেটা লেখে তা এখানে দেওয়া হল:
লিগ্যাসি এক্সপোর্ট অবকাঠামো : আপনার অ্যাপের বাইনারিতে বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে একটি টেবিলে ডেটা লেখে।
নতুন রপ্তানি পরিকাঠামো : আপনার Firebase প্রকল্পে নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে একটি টেবিলে ডেটা লেখে।
দুর্ভাগ্যবশত, কখনও কখনও আপনার অ্যাপের বাইনারিতে থাকা বান্ডেল আইডি বা প্যাকেজের নাম আপনার Firebase প্রজেক্টে নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের সাথে মেলে না। সাধারণত অ্যাপ রেজিস্ট্রেশনের সময় কেউ যদি প্রকৃত শনাক্তকারী প্রবেশ না করে তবে এটি ঘটে।
আপগ্রেড করার আগে যদি এটি ঠিক না করা হয় তাহলে কী হবে?
যদি এই দুটি অবস্থানের শনাক্তকারী মিল না পায়, তাহলে নতুন রপ্তানি পরিকাঠামোতে আপগ্রেড করার পরে নিম্নলিখিতগুলি ঘটবে:
আপনার Crashlytics ডেটা একটি নতুন BigQuery ব্যাচ টেবিলে লেখা শুরু করবে — অর্থাৎ, আপনার Firebase প্রকল্পে আপনার নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে একটি নাম সহ একটি নতুন টেবিল।
আপনার অ্যাপের বাইনারিতে শনাক্তকারীর উপর ভিত্তি করে নামের সাথে বিদ্যমান যেকোনো "লেগেসি" টেবিলে আর ডেটা লেখা থাকবে না।
অমিল শনাক্তকারীদের উদাহরণ পরিস্থিতি
মনে রাখবেন যে BigQuery ব্যাচ টেবিলের নামগুলি স্বয়ংক্রিয়ভাবে _IOS বা _ANDROID সাথে যুক্ত করা হয় যাতে অ্যাপের প্ল্যাটফর্মটি নির্দেশিত হয়।
| আপনার অ্যাপের বাইনারিতে শনাক্তকারী(গুলি) | আপনার Firebase অ্যাপ(গুলি) এর জন্য শনাক্তকারী(গুলি) সেট করা হয়েছে | উত্তরাধিকারসূত্রে প্রাপ্ত আচরণ | আপগ্রেডের পরে আচরণ নতুন রপ্তানি অবকাঠামোর দিকে | সমাধান |
|---|---|---|---|---|
foo | bar | অ্যাপের বাইনারি ( foo ) তে শনাক্তকারীর নামে নামকরণ করা একটি একক টেবিলে লেখা হয়। | Creates তারপর Firebase অ্যাপের জন্য সেট করা শনাক্তকারীর নামানুসারে একটি একক টেবিলে লেখে ( bar ) | নিচে বর্ণিত বিকল্প ১ অথবা ২ বাস্তবায়ন করুন। |
foo | bar , qux , ইত্যাদি। | অ্যাপের বাইনারি ( foo ) তে শনাক্তকারীর নামে নামকরণ করা একটি একক টেবিলে লেখা হয়। | Creates* তারপর Firebase Apps ( bar , qux , ইত্যাদি) এর জন্য সেট করা শনাক্তকারীর নাম অনুসারে একাধিক টেবিলে লেখে। | নিচে বর্ণিত বিকল্প ২ বাস্তবায়ন করুন। |
foo , baz , ইত্যাদি। | bar | অ্যাপের বাইনারি ( foo , baz , ইত্যাদি) এর একাধিক শনাক্তকারীর নাম অনুসারে একাধিক টেবিলে লেখা হয়। | Creates** তারপর প্রতিটি অ্যাপের ডেটা Firebase অ্যাপের জন্য সেট করা শনাক্তকারীর নামে একটি টেবিলে লেখে ( bar ) | কোন বিকল্পই বাস্তবায়িত করা যাবে না। আপনি এখনও অ্যাপের |
* যদি আপনার অ্যাপের বাইনারিতে থাকা শনাক্তকারীটি Firebase অ্যাপের জন্য সেট করা শনাক্তকারীগুলির একটির সাথে মিলে যায়, তাহলে নতুন রপ্তানি পরিকাঠামো সেই শনাক্তকারীর জন্য একটি নতুন টেবিল তৈরি করবে না। পরিবর্তে, এটি সেই নির্দিষ্ট অ্যাপের জন্য ডেটা লেখা চালিয়ে যাবে। অন্যান্য সমস্ত অ্যাপ নতুন টেবিলে লেখা হবে।
** যদি আপনার অ্যাপের বাইনারিতে থাকা কোনও একটি শনাক্তকারী Firebase অ্যাপের জন্য শনাক্তকারী সেটের সাথে মিলে যায়, তাহলে নতুন এক্সপোর্ট অবকাঠামো নতুন কোনও টেবিল তৈরি করবে না। পরিবর্তে, এটি সেই টেবিলটি বজায় রাখবে এবং এতে সমস্ত অ্যাপের জন্য ডেটা লেখা শুরু করবে।
বিঘ্ন এড়ানোর বিকল্পগুলি
কোনও বাধা এড়াতে, ম্যানুয়ালি আপগ্রেড করার আগে অথবা ১৫ সেপ্টেম্বর, ২০২৫ এর আগে নীচে বর্ণিত বিকল্পগুলির একটির জন্য নির্দেশাবলী অনুসরণ করুন।
বিকল্প ১ :
নতুন এক্সপোর্ট অবকাঠামো দ্বারা তৈরি নতুন টেবিলটি ব্যবহার করুন। আপনি আপনার বিদ্যমান টেবিল থেকে নতুন টেবিলে ডেটা কপি করবেন।Firebase কনসোলে, লিঙ্ক করা অ্যাপের জন্য এক্সপোর্ট বন্ধ করে আবার চালু করে নতুন এক্সপোর্ট অবকাঠামোতে আপগ্রেড করুন ।
এই ক্রিয়াটি আপনার Firebase প্রকল্পে আপনার নিবন্ধিত Firebase অ্যাপের জন্য সেট করা বান্ডেল আইডি বা প্যাকেজ নামের উপর ভিত্তি করে একটি নতুন ব্যাচ টেবিল তৈরি করে।
Google Cloud কনসোলে, আপনার লিগ্যাসি টেবিল থেকে সমস্ত ডেটা নতুন তৈরি করা টেবিলে কপি করুন ।
যদি আপনার ব্যাচ টেবিলের উপর নির্ভরশীল কোন ডাউনস্ট্রিম নির্ভরতা থাকে, তাহলে নতুন টেবিল ব্যবহার করার জন্য সেগুলি পরিবর্তন করুন।
বিকল্প ২ :
আপনার বিদ্যমান টেবিলে লেখা চালিয়ে যান। এটি অর্জনের জন্য আপনাকে একটি BigQuery কনফিগারেশনের কিছু ডিফল্ট ওভাররাইড করতে হবে।In the Firebase console, find and take note of the Firebase App ID (for example,
1:1234567890:ios:321abc456def7890) of the app with the mismatched batch table name and identifier:
Go to your Project settings , then scroll to the Your apps card to see all your Firebase Apps and their information.In the Firebase console, upgrade to the new export infrastructure by turning export off and then on again for the linked app.
This action does two things:
Creates a new batch table with a name that's based on the bundle ID or package name set for your registered Firebase App in your Firebase project . (You'll eventually delete this table, but do not delete it yet.)
Creates a BigQuery "data transfer config" with the source
Firebase Crashlytics with Multi-Region Support.
In the Google Cloud console, change the new "data transfer config" so that data will continue to write to your existing table:
Go to BigQuery > Data transfers to view your "data transfer config".
Select the config that has the source
Firebase Crashlytics with Multi-Region Support.Click Edit in the top-right corner.
In the Data source details section, find a list for gmp_app_id and a list for client_namespace .
In BigQuery , the Firebase App ID is called the
gmp_app_id. By default, theclient_namespacevalue in BigQuery is the corresponding unique bundle ID / package name of the app, but you'll be overriding this default configuration.BigQuery uses the
client_namespacevalue for the name of the batch table that each linked Firebase App writes to.Find the gmp_app_id of the Firebase App for which you want to override default settings. Change its client_namespace value to the name of the table you want the Firebase App to write to instead (usually this is the name of the legacy table the app was writing to with the legacy export infrastructure).
Save the config change.
Schedule a backfill for the days that your existing table is missing data.
Once the backfill is done, delete the new table that was automatically created by the new export infrastructure.