减少同步报表超时错误的最佳实践
由于吞吐量的限制,使用同步模式获取大量数据可能导致请求超时。为减少或避免请求超时,我们建议您遵循以下最佳实践。
使用筛选条件分小批次获取数据
- 使用
campaign_ids,adgroup_ids,ad_ids作为筛选条件(filtering),分批获取数据。每次请求最多可以传入 100 个 ID(注意:如果是推广系列 ID,则最多可以传入 30 个 ID)。我们尤其建议您在使用受众分析报表时采取此最佳实践。
注意
如果您在广告层级上生成报表,则需要添加campaign_ids作为筛选条件。添加的推广系列 ID 不能超过 30 个。
- 使用
campaign_status,adgroup_status,ad_status或playable_status作为筛选条件(filtering),这样可以降低系统负载,提高整体效率。此外,请避免在状态相关筛选条件中传入STATUS_ALL,STATUS_DELETE和STATUS_DISABLE。
示例
以下示例展示了如何使用筛选条件减少返回的数据量。
错误示例
下面的请求会返回数以千计的广告组ID,这不仅会导致超时,还会影响报表产品的整体性能。
(code)
{
"advertiser_id": "xxx",
"report_type": "AUDIENCE",
"dimensions": "[\"adgroup_id\", \"interest_category_tier2\"]",
"data_level": "AUCTION_ADGROUP",
"start_date": "2023-01-16",
"end_date": "2023-01-16",
"metrics": "[\"spend\", \"cost_per_result\", \"ctr\", \"clicks\", \"campaign_id\", \"cpc\", \"conversion_rate\", \"impressions\", \"cost_per_conversion\", \"conversion\"]",
"page_size": "1000",
}
(/code)
正确示例
为了解决这个问题,您可以添加campaign_ids作为筛选条件,只获取指定推广系列下的广告组。
1. 使用/campaign/get/获取您广告主ID下的推广系列。
2. 使用/adgroup/get/获取您广告主ID下的广告组,并检查它们是否是您想要生成报表的广告组。
3. 根据上述信息,指定campaign_ids作为筛选条件来减少返回的数据量。
(code)
{
"advertiser_id": "xxx",
"report_type": "AUDIENCE",
"dimensions": "[\"adgroup_id\", \"interest_category_tier2\"]",
"data_level": "AUCTION_ADGROUP",
"start_date": "2023-01-16",
"end_date": "2023-01-16",
"metrics": "[\"spend\", \"cost_per_result\", \"ctr\", \"clicks\", \"campaign_id\", \"cpc\", \"conversion_rate\", \"impressions\", \"cost_per_conversion\", \"conversion\"]",
"page_size": "1000",
"filters": "[{\"field_name\":\"campaign_ids\",\"filter_type\":\"IN\",\"filter_value\":\"[xxxxx, xxxxx]\"}]"
}
(/code)
使用时间范围来缩小结果
指定start_date和end_date来缩小时间范围,开始日期和结束日期之间的时间差必须在 7 天以内。虽然您需要分批查询数据,但可以避免请求超时。我们尤其建议您在使用受众分析报表时采取此最佳实践。
减少指标的数量
您查询的指标数量必须小于100个。我们尤其建议您在使用受众分析报表时采取此最佳实践。
不要重新发送超时的请求
如果请求超时,请不要使用同样的请求重试,建议您遵循以下最佳实践,例如,在请求中使用筛选条件或时间范围再进行重试。
确保广告主ID与推广系列、广告组或广告ID匹配
对于需要管理多个广告主 ID 的用户,传入的广告主 ID 必须与您查询的推广系列、广告组或广告 ID 匹配,否则会返回空数据。使用任意广告主 ID 与一批推广系列、广告组或广告ID进行枚举的方式是报表接口的误用,也将造成资源浪费。
我们推荐首先用/campaign/get/、/adgroup/get/或/ad/get/接口获取某个广告主 ID 对应的推广系列、广告组或广告 ID,然后再在报表中传入正确的 ID 组合。
在第二天上午 9 点之后获取前一天的受众数据
受众数据的获取有 10-12 个小时的延迟。如果要获取前一天的受众数据,我们建议您在第二天上午 9 点(广告账户时区)后发起报表请求。
生成异步报表
异步报表花费的时间相对较长,但是异步请求不会超时。而且,异步报表能够获取的数据没有时间限制。对于异步报表,每个开发者应用的频控限制为每秒 1 次请求,每个开发者应用每天能够运行的任务数最多为 4,500 个。
关于如何生成异步报表,请参见生成异步报表。