ব্যাচ জবে লিস্টিং গ্রুপ ফিল্টার ব্যবহার করুন

আপনি যখন AdGroupCriterion.listing_group বা AssetGroupListingGroupFilter-এর প্রসঙ্গে লিস্টিং গ্রুপের ফিল্টার নিয়ে কাজ করেন, তখন আপনার ইন্টিগ্রেশন ডিজাইন করার সময় নিম্নলিখিত বিষয়গুলি বিবেচনা করুন।

ব্যাচ স্প্লিটিং

কোনও ব্যাচ জবে যদি এমন কোনও অপারেশন থাকে যাতে বিজ্ঞাপন গ্রুপের মাপকাঠি বা অ্যাসেট গ্রুপের লিস্টিং গ্রুপের ফিল্টার থাকে, তাহলে Google Ads API সার্ভার ব্যাচ জবটি পেলে, সেটির অপারেশন একাধিক সাব-ব্যাচে বিভক্ত হয়ে যায়। ব্যাচ জবের স্ট্যান্ডার্ড অপারেশনের মতো নয়, লিস্টিং গ্রুপের ফিল্টার অপারেশন সহ প্রতিটি সাব-ব্যাচকে অ্যাটমিক হিসেবে বিবেচনা করা হয়।

লিস্টিং গ্রুপের ফিল্টার সহ ব্যাচ জব যেভাবে সাব-ব্যাচে বিভক্ত করা হয় তা নিম্নলিখিত বিষয়গুলির দ্বারা নির্ধারিত হয়:

  1. লিস্টিং গ্রুপের ফিল্টারের ধরন
  2. লিস্টিং গ্রুপ ফিল্টার AdGroup বা AssetGroup-কে টার্গেট করছে
  3. কাজগুলির ক্রম

অপারেশন কীভাবে গ্রুপ করা হয় তা বিবেচনা করুন:

  • একই AssetGroup-কে টার্গেট করা সব পরপর AssetGroupListingGroupFilterOperation অপারেশন (create, update এবং remove) একটি অ্যাটমিক সাব-ব্যাচে একসাথে গ্রুপ করা হয় (কোনও আংশিক ব্যর্থতার আচরণ নেই)।
  • একই AdGroup-কে টার্গেট করে LISTING_GROUP মাপকাঠির (AdGroupCriterion.listing_group) জন্য পরপর সব AdGroupCriterionOperation অপারেশন (create, update এবং remove) একটি অ্যাটমিক সাব-ব্যাচে (আংশিক ব্যর্থতার আচরণ নেই) একসাথে গ্রুপ করা হয়।
  • অন্যান্য সব পরপর অপারেশন নন-অ্যাটমিক সাব-ব্যাচে (আংশিক ব্যর্থতার আচরণ) একসাথে গ্রুপ করা হয়।

নিম্নলিখিত ডায়াগ্রামটি এই ধারণাটি ব্যাখ্যা করে। প্রতিটি ধূসর বক্স Google Ads API ব্যবহার করে জমা দেওয়া ব্যাচ জবকে দেখায়। ধূসর বক্সের মধ্যে, Google Ads API সার্ভার যে সাব-ব্যাচ তৈরি করে তা দেখানোর জন্য আলাদা অপারেশনগুলি রঙ অনুযায়ী গ্রুপ করা হয়। প্রতিটি ধূসর বক্সে অপারেশনের ক্রম, ব্যাচ জবে অপারেশন যোগ করার ক্রমের সাথে মিলে যায়।

ব্যাচ অপারেশন সাব-ব্যাচে গ্রুপ করা হয়েছে তা ডায়াগ্রামে দেখানো হয়েছে

সীমাবদ্ধতা

ব্যাচ জবের ক্ষেত্রে লিস্টিং গ্রুপের ফিল্টার নিয়ে কাজ করার সময়, নিম্নলিখিত সীমাবদ্ধতা প্রযোজ্য হয়:

  • LISTING_GROUP ক্রাইটেরিয়ার জন্য (AdGroupCriterion.listing_group) একই AdGroup টার্গেট করে পরপর AdGroupCriterionOperation অপারেশন (create, update এবং remove)-এর একটি অ্যাটমিক সাব-ব্যাচে ২০,০০০-এর বেশি অপারেশন থাকতে পারবে না। তবে, ১০,০০০-এর বেশি অপারেশন না করার সাজেশন দেওয়া হয়। প্রতিটি AddBatchJobOperationsRequest-এ সর্বাধিক ১০,০০০টি অপারেশন করা যায়, তাই ১০,০০১ থেকে ২০,০০০টি অপারেশনের AdGroup সাব-ব্যাচ আপলোড করতে হলে, অন্তত পরপর দুটি AddBatchJobOperations অনুরোধের মাধ্যমে তা করতে হবে।
  • একই AssetGroup-কে টার্গেট করে পরপর AssetGroupListingGroupFilterOperationটি অপারেশন (create, update এবং remove)-এর একটি অ্যাটমিক সাব-ব্যাচে ১০,০০০-এর বেশি অপারেশন থাকতে পারবে না।
  • এইসব অপারেশন গণনা সংক্রান্ত সীমার যেকোনও একটি লঙ্ঘন করলে (অথবা একটি সাব-ব্যাচের জন্য সার্ভারের ইন্টার্নাল সিরিয়ালাইজড বাইট সাইজ সীমা অতিক্রম করলে) সেই সাব-ব্যাচে ব্যাচ জব বাতিল হয়ে যায়: আগে থেকে সম্পূর্ণ হয়ে যাওয়া যেকোনও সাব-ব্যাচ কমিট করা থাকে, যেখানে লঙ্ঘনকারী সাব-ব্যাচ এবং পরবর্তী যেকোনও সাব-ব্যাচের সব অপারেশন InternalError.INTERNAL_ERROR-এর সাথে ব্যর্থ হয়।

সমস্যার সমাধান

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

যেমন, ListBatchJobResults-এর থেকে পাওয়া উত্তর প্রসেস করার সময়:

এইসব সমস্যা থেকে বোঝা যায় যে ওই ইন্ডেক্সে অপারেশন রোল ব্যাক করা হয়েছে কারণ একই অ্যাটমিক সাব-ব্যাচে অন্য অপারেশন কাজ করেনি। সমস্যার মূল কারণ শনাক্ত করতে, একই AdGroup বা AssetGroup আইডি শেয়ার করা অপারেশনের জন্য প্রতিটি BatchJobResult-এ status মেসেজগুলি—ট্রানজ্যাকশন সংক্রান্ত সমস্যার operation_index-এর আগে ও পরে—পুনরাবৃত্তি করুন।