โปรดคำนึงถึงหลักเกณฑ์ต่อไปนี้เมื่อใช้ BatchJobService
ปรับปรุงอัตราการส่งข้อมูล
ระบบจะเลือกงานขนาดใหญ่จำนวนน้อยแทนที่จะเป็นงานขนาดเล็กจำนวนมาก
จัดเรียงการดำเนินการที่อัปโหลดตามประเภทการดำเนินการ (ยกเว้นการดำเนินการที่ต้องพึ่งพาซึ่งกันและกัน ซึ่งต้องจัดกลุ่มตามลำดับในกลุ่มย่อยแบบอะตอมมิก) เช่น หากงานของคุณมีการดำเนินการเพื่อเพิ่มแคมเปญมาตรฐาน กลุ่มโฆษณา และเกณฑ์กลุ่มโฆษณา ให้จัดลำดับการดำเนินการในการอัปโหลดเพื่อให้การดำเนินการของแคมเปญทั้งหมดอยู่ก่อน ตามด้วยการดำเนินการของกลุ่มโฆษณาทั้งหมด และสุดท้ายคือการดำเนินการของเกณฑ์กลุ่มโฆษณาทั้งหมด
ในการดำเนินการประเภทเดียวกัน การจัดกลุ่มตามทรัพยากรหลักจะช่วยปรับปรุงประสิทธิภาพได้ ตัวอย่างเช่น หากคุณมีออบเจ็กต์ชุด
AdGroupCriterionOperationการจัดกลุ่มการดำเนินการตามกลุ่มโฆษณาจะ มีประสิทธิภาพมากกว่าการผสมการดำเนินการที่ส่งผลต่อเกณฑ์กลุ่มโฆษณาในกลุ่มโฆษณาต่างๆ
ความเป็นหน่วยย่อยในการแยกกลุ่ม
Google Ads API จะแบ่งการดำเนินการในงานแบบกลุ่มที่ส่งเป็นชุดย่อยที่เล็กลงเพื่อประมวลผล แม้ว่าชุดย่อยมาตรฐานจะดำเนินการโดยเปิดใช้ความล้มเหลวบางส่วน แต่ระบบจะประมวลผลชุดย่อยสำหรับการดำเนินการที่ขึ้นต่อกันบางอย่างแบบอะตอมมิกเป็นธุรกรรมเดียว
- การดำเนินการ
AdGroupCriterionOperationติดต่อกัน (create,updateและremove) สำหรับ เกณฑ์LISTING_GROUP(AdGroupCriterion.listing_group) ที่กำหนดเป้าหมายไปยังAdGroupเดียวกัน (ล้มเหลวด้วยCriterionError.LISTING_GROUP_ERROR_IN_ANOTHER_OPERATIONหากการดำเนินการใดๆ ในกลุ่มล้มเหลว) - การดำเนินการ
AssetGroupListingGroupFilterOperationต่อเนื่อง (create,updateและremove) ที่กำหนดเป้าหมายไปยังAssetGroupเดียวกัน (ล้มเหลวด้วยBatchJobError.ASSET_GROUP_LISTING_GROUP_FILTER_TRANSACTION_FAILUREหากการดำเนินการใดๆ ในกลุ่มล้มเหลว) AssetGroupOperation(create) ตามด้วยการดำเนินการAssetGroupAssetOperation(create) สูงสุด 999 รายการทันที ซึ่งกำหนดเป้าหมายไปยังAssetGroupเดียวกัน (จะล้มเหลวด้วยBatchJobError.ASSET_GROUP_AND_ASSET_GROUP_ASSET_TRANSACTION_FAILUREหากการดำเนินการใดๆ ในกลุ่มล้มเหลว) แต่ละAssetGroupOperation(updateหรือremove) จะทำงานใน กลุ่มย่อยแบบเดี่ยวที่แยกต่างหากของตัวเองCampaignOperationPerformance Max (create) ที่เปิดใช้หลักเกณฑ์การใช้แบรนด์ (brand_guidelines_enabledตั้งค่าเป็นtrueหรือปล่อยให้ไม่ได้ตั้งค่า เนื่องจากค่าเริ่มต้นคือtrueเว้นแต่จะตั้งค่าเป็นfalseอย่างชัดเจนหรือสร้างแคมเปญ Performance Max สำหรับเป้าหมายการท่องเที่ยว) ตามด้วยการดำเนินการCampaignAssetOperation(create) สูงสุด 999 รายการ ที่กำหนดเป้าหมายเป็นCampaignเดียวกัน (ล้มเหลวด้วยBatchJobError.CAMPAIGN_AND_CAMPAIGN_ASSET_TRANSACTION_FAILUREหากการดำเนินการใดๆ ในกลุ่มล้มเหลว) คุณสร้างแคมเปญ Performance Max สำหรับการค้าปลีก (ที่มีฟีด Merchant Center) ได้โดยไม่ต้องลิงก์แหล่งข้อมูลแบรนด์CampaignAssetในกลุ่มย่อยแบบอะตอมเดียวกัน
สําหรับทั้งAssetGroupและ Performance Max
Campaign การสร้างกลุ่มย่อย (การดําเนินการทั้งหมดสูงสุด 1,000 รายการต่อกลุ่มย่อย
การดําเนินการ create ของบัญชีย่อยใดๆ ที่เกิน 999 รายการจะไปอยู่ในกลุ่มย่อยแบบไม่เป็นกลุ่มย่อยถัดไป):
createการดำเนินการหลัก (resource_nameในAssetGroupหรือCampaign) และcreateการดำเนินการย่อยที่ต่อเนื่องกัน (asset_groupในAssetGroupAssetหรือcampaignในCampaignAsset) ต้องระบุรหัสชั่วคราวที่ติดลบเดียวกัน- วางการดำเนินการ
AssetOperation(create) ที่จำเป็น สำหรับทรัพยากรAssetใหม่ก่อนทรัพยากรหลักAssetGroupOperationหรือCampaignOperation(create) โดยห้ามวางระหว่างทรัพยากรหลักcreateกับการดำเนินการของลิงก์ย่อยcreate(ซึ่งจะปิดกลุ่มย่อยแบบอะตอมทันทีและแยกการสร้างทรัพยากรหลักออกจาก ชิ้นงานที่ลิงก์)
เมื่อชุดย่อยแบบอะตอมล้มเหลว BatchJobResult.status ของการดำเนินการที่ทำให้เกิดข้อผิดพลาดจะมีข้อผิดพลาดในการตรวจสอบพื้นฐาน ในขณะที่การดำเนินการที่เหลือในชุดย่อยนั้นจะย้อนกลับพร้อมกับข้อผิดพลาดของธุรกรรมที่เกี่ยวข้องสำหรับชุดย่อยนั้น ตรวจสอบรายการBatchJobResultที่อยู่ติดกันซึ่งใช้รหัส AdGroup, AssetGroup หรือ Campaign เดียวกัน
เพื่อระบุข้อผิดพลาดที่เป็นสาเหตุหลัก
หากไม่ได้เพิ่มการดำเนินการที่เกี่ยวข้องในกลุ่มเหล่านี้อย่างต่อเนื่อง Google Ads API จะแยกการดำเนินการเหล่านั้นออกเป็นกลุ่มย่อยๆ แยกกัน ซึ่งจะทำให้การแก้ไข ไม่เป็นไปตามข้อกำหนดขั้นต่ำของชิ้นงาน หรือทำให้โครงสร้างกลุ่มรายชื่อไม่สมบูรณ์ ดูรายละเอียดได้ที่ ใช้ตัวกรองกลุ่มรายชื่อในงานแบบกลุ่มและ การประมวลผลแบบกลุ่มของ Performance Max
การจัดกลุ่มเชิงตรรกะ
เมื่อแก้ไขลําดับชั้นการกําหนดเป้าหมายผลิตภัณฑ์
(AssetGroupListingGroupFilterOperation ในแคมเปญ Performance
Max หรือ AdGroupCriterionOperation ใน
แคมเปญ Shopping) หรือสร้าง AssetGroup ใหม่หรือ
Performance Max Campaign ให้จัดกลุ่มการดําเนินการทั้งหมดที่กําหนดเป้าหมายไปยัง
ทรัพยากรระดับบนสุดเดียวกัน (AssetGroup, AdGroup หรือ
Campaign) ต่อเนื่องกัน ซึ่งจะช่วยลดการแย่งชิงการล็อกในแบ็กเอนด์และ
เก็บต้นไม้ที่ขึ้นต่อกันไว้ด้วยกัน
ความสอดคล้องของข้อมูล
เนื่องจากระบบจะตรวจสอบโครงสร้างตัวกรองกลุ่มรายชื่อและข้อกำหนดของชิ้นงาน Performance Max เมื่อสิ้นสุดธุรกรรมการดำเนินการย่อยแบบอะตอมแต่ละรายการ โปรดหลีกเลี่ยงการแยก การอัปเดตไปยังทรัพยากรหลักเดียวกันในขอบเขตที่ไม่ต่อเนื่องในงาน หรือ ในงานที่ทํางานพร้อมกัน
หลีกเลี่ยงปัญหาการทำงานพร้อมกัน
เมื่อส่งงานหลายรายการพร้อมกันสำหรับบัญชีเดียวกัน ให้ลดโอกาสที่งานจะดำเนินการกับออบเจ็กต์เดียวกันในเวลาเดียวกันขณะที่ยังคงขนาดงานขนาดใหญ่ไว้ งานที่ยังไม่เสร็จจำนวนมากที่มีสถานะเป็น
RUNNINGซึ่งพยายามเปลี่ยนชุดออบเจ็กต์เดียวกันอาจ ทำให้เกิดสภาวะคล้ายกับเดดล็อก ส่งผลให้การทำงานช้าลงอย่างมากและอาจทำให้งาน ล้มเหลวด้วยอย่าส่งการดำเนินการหลายรายการที่เปลี่ยนแปลงออบเจ็กต์เดียวกันในงานเดียวกัน เนื่องจากผลลัพธ์อาจคาดเดาไม่ได้
ดึงข้อมูลผลลัพธ์อย่างเหมาะสม
อย่าสำรวจสถานะของงานบ่อยเกินไป มิฉะนั้นคุณอาจเสี่ยงที่จะได้รับข้อผิดพลาดเนื่องจากเกินขีดจำกัดอัตราคำขอ
ปล่อยให้
page_sizeไม่ได้ตั้งค่า (หรือตั้งค่าเป็นสูงสุดที่1000) เมื่อเรียกใช้ListBatchJobResultsเพื่อลด การเดินทางไปกลับของการแบ่งหน้า และตั้งค่าresponse_content_typeเป็นMUTABLE_RESOURCEเฉพาะในกรณีที่แอปพลิเคชันตรวจสอบฟิลด์ทรัพยากรที่ส่งคืนนอกเหนือจากresource_nameลำดับผลลัพธ์จะเหมือนกับลำดับการอัปโหลด
คำแนะนำเพิ่มเติมในการใช้งาน
คุณสามารถกำหนดขอบเขตบนสำหรับระยะเวลาที่อนุญาตให้งานแบบกลุ่มทำงานก่อนที่จะ ถูกยกเลิก เมื่อสร้างงานแบบกลุ่มใหม่ ให้ตั้งค่าฟิลด์
metadata.execution_limit_secondsเป็น ระยะเวลาที่ต้องการเป็นวินาที ไม่มีการจำกัดเวลาเริ่มต้นหากไม่ได้ตั้งค่าmetadata.execution_limit_secondsแม้ว่าขีดจำกัดของโปรโตคอลคือ 10,000 การดำเนินการต่อคำขอ แต่เราขอแนะนำให้เพิ่มการดำเนินการไม่เกิน 1,000 รายการต่อ
AddBatchJobOperationsRequestและใช้sequence_tokenเพื่ออัปโหลดการดำเนินการที่เหลือไปยังงานเดียวกัน การส่งการดำเนินการมากเกินไปในAddBatchJobOperationsRequestเดียวอาจทำให้เกิดข้อผิดพลาดBatchJobError.REQUEST_TOO_LARGEทั้งนี้ขึ้นอยู่กับขนาดของการดำเนินการ คุณสามารถจัดการข้อผิดพลาดนี้ได้โดยลดจำนวนการดำเนินการและลองส่งคำขอAddBatchJobOperationsRequestอีกครั้ง
ข้อจำกัด
BatchJobแต่ละรายการรองรับการดำเนินการได้สูงสุด 1 ล้านรายการ การโทรAddBatchJobOperationsที่เกินขีดจำกัดนี้จะทำให้เกิดข้อผิดพลาดResourceCountLimitExceededError.RESOURCE_LIMIT(โดยมีResourceLimitType.BATCH_JOB_OPERATIONS_PER_JOBในErrorDetails.resource_count_details)แต่ละบัญชีจะมีงานที่ใช้งานอยู่หรือรอดำเนินการได้สูงสุด 100 งานในเวลาเดียวกัน การเกินขีดจำกัดนี้เมื่อสร้างงานแบบกลุ่มด้วย
MutateBatchJobจะทำให้เกิดข้อผิดพลาดResourceCountLimitExceededError.RESOURCE_LIMIT(พร้อมResourceLimitType.BATCH_JOBS_PER_CUSTOMERในErrorDetails.resource_count_details)ระบบจะนำงานที่รอดำเนินการซึ่งเก่ากว่า 7 วันออกโดยอัตโนมัติ
AddBatchJobOperationsRequestแต่ละรายการมีขีดจำกัดที่แน่นอนของการดำเนินการเปลี่ยนแปลง 10,000 รายการต่อคำขอ การดำเนินการเกิน 10,000 รายการในคำขอเดียวจะแสดงข้อผิดพลาดBatchJobError.REQUEST_TOO_LARGEสำหรับฟิลด์
page_sizeในListBatchJobResultsRequestให้ทำดังนี้- หากไม่ได้ตั้งค่า
page_sizeหรือตั้งค่าเป็น0ระบบจะใช้ค่าเริ่มต้นเป็น สูงสุด1000 - หาก
page_sizeเกิน1000หรือน้อยกว่า0API จะ แสดงข้อผิดพลาดBatchJobError.INVALID_PAGE_SIZE
- หากไม่ได้ตั้งค่า
AddBatchJobOperationsRequestแต่ละรายการมีขนาดสูงสุด 41,937,920 ไบต์ หากเกินขีดจำกัดนี้ คุณจะได้รับข้อผิดพลาดBatchJobError.REQUEST_TOO_LARGE(หรือINTERNAL_ERRORหากถูกปฏิเสธที่เลเยอร์การรับส่ง) คุณ สามารถกำหนดขนาดที่แปลงเป็นอนุกรมของคำขอก่อนส่งและดำเนินการ ที่เหมาะสมหากมีขนาดใหญ่เกินไปได้โดยทำดังนี้Java
static final int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.getSerializedSize();C#
const int MAX_REQUEST_BYTES = 41_937_920; // ... (code to get the AddBatchJobOperationsRequest object) int sizeInBytes = request.CalculateSize();PHP
const MAX_REQUEST_BYTES = 41937920; // ... (code to get the AddBatchJobOperationsRequest object) $size_in_bytes = $request->byteSize();Python
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = type(request).pb(request).ByteSize()Ruby
MAX_REQUEST_BYTES = 41_937_920 # ... (code to get the AddBatchJobOperationsRequest object) size_in_bytes = request.to_proto.bytesizePerl
use JSON::XS; use constant MAX_REQUEST_BYTES => 41937920; # ... (code to get the AddBatchJobOperationsRequest object) # The Perl client library uses REST/JSON; UTF-8 JSON byte length provides a # conservative upper-bound estimate of the serialized request size. my $json_encoder = JSON::XS->new->utf8->convert_blessed; my $size_in_bytes = length($json_encoder->encode($request));
ขนาดของการดำเนินการเปลี่ยนแปลงรายการเดียว
แม้ว่าคำขอโดยรวมจะมีขนาดได้สูงสุด 41,937,920 ไบต์ แต่ขนาดที่แปลงเป็นอนุกรมของ
MutateOperation รายการเดียวในกลุ่มจะจำกัดไว้ที่
10,484,504 ไบต์ (10 MiB ลบ 1,256 ไบต์) หากเกินขีดจำกัดนี้ ระบบจะแสดงข้อผิดพลาด
BatchJobError.REQUEST_TOO_LARGE โปรดทราบว่าแม้ว่าเอกสารอ้างอิงสำหรับ BatchJobError.REQUEST_TOO_LARGE จะอ้างอิงถึงเกณฑ์ 10,484,504 ไบต์ แต่ AddBatchJobOperations จะแสดงรหัสข้อผิดพลาดเดียวกันนี้
เมื่อมีการเกินเกณฑ์คำขอทั้ง 3 รายการ (ไบต์คำขอทั้งหมด 41,937,920 ไบต์
ไบต์การดำเนินการเดียว 10,484,504 ไบต์ หรือการดำเนินการ 10,000 รายการต่อการเรียกใช้)
โดยฟิลด์ message ของข้อผิดพลาดจะระบุว่ามีการละเมิดขีดจำกัดใด