有效管理資料

許多 Google Ads 應用程式的核心功能是擷取帳戶資料,用於資料分析、客戶查詢和政策合規檢查等用途。擷取資料時,您應最佳化用量,以免 Google 伺服器超載,或受到頻率限制。詳情請參閱「頻率限制」指南,以及如何維護最新聯絡電子郵件地址

快取資料

您應快取從本機資料庫的 API 伺服器擷取的實體詳細資料,不要在每次需要資料時都呼叫伺服器,尤其是經常存取或不常變更的實體。請盡可能使用 change-eventchange-status,偵測自上次同步處理結果以來,哪些物件有所變更。

最佳化執行報表的頻率

Google Ads 發布了有關資料更新間隔和資料更新頻率的規範。您應根據本指南,判斷擷取報表的頻率。

如果您需要定期更新帳戶,建議您將這類帳戶的數量限制在較少的範圍內,例如僅有前 20 個 Google Ads 帳戶。其餘作業則可以較低的頻率更新,例如每天一或兩次。

調整報表大小

應用程式應擷取大量資料,而非執行大量小型報表。其中一項因素是帳戶限制

例如,假設下列程式碼會提取特定廣告群組的統計資料,並更新統計資料資料庫資料表:

  List<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  foreach (long adGroupId in adGroupIds)
  {
    string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
        "metrics.cost_micros, metrics.impressions, segments.date FROM " +
        "ad_group WHERE segments.date DURING LAST_7_DAYS AND " +
        "ad_group.id = ${adGroupId}";
    List<GoogleAdsRow> rows = RunGoogleAdsReport(customerId, query);
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

這個程式碼適合小型測試帳戶。不過,Google Ads 最多可為每個廣告活動啟用 20,000 個廣告群組,每個帳戶最多 10,000 個廣告活動。因此,如果這段程式碼對一個大型 Google Ads 帳戶執行,可能就會導致 Google Ads API 伺服器超載,進而導致頻率限制和節流。

更好的做法是執行單一報表並在本機處理。另請參考使用記憶體內地圖的方法。

  Hashset<long> adGroupIds = FetchAdGroupIdsFromLocalDatabase();

  string query = "SELECT ad_group.id, ad_group.name, metrics.clicks, " +
      "metrics.cost_micros, metrics.impressions, segments.date FROM " +
      "ad_group WHERE segments.date DURING LAST_7_DAYS";
  List<GoogleAdsRow> rows = RunGoogleAdsReport(customer_id, query);

  var memoryMap = new Dictionary<long, List<GoogleAdsRow>>();
  for each (GoogleAdsRow row in rows)
  {
    var adGroupId = row.AdGroup.Id;

    if (adGroupIds.Contains(adGroupId))
    {
      CheckAndAddRowIntoMemoryMap(row, adGroupId, memoryMap);
    }
  }
  foreach (long adGroupId in memoryMap.Keys())
  {
    InsertRowsIntoStatsTable(adGroupId, rows);
  }

如此可降低 Google Ads API 伺服器的負載,因為執行的報表數量較少。

如果您發現報表過大而無法保存在記憶體中,也可以新增 LIMIT 子句,將查詢細分為較小的群組:

SELECT
  ad_group.id,
  ad_group.name,
  metrics.clicks,
  metrics.cost_micros,
  metrics.impressions,
  segments.date
FROM ad_group
WHERE segments.date DURING LAST_7_DAYS
  AND ad_group.id IN (id1, id2, ...)
LIMIT 100000

標籤是將實體分組及減少報表查詢次數的另一種方式。詳情請參閱標籤指南

最佳化擷取內容

執行報表時,應留意包含在查詢中的資料欄。請參考排定每小時執行的範例:

SELECT
  customer.id,
  customer.currency_code,
  campaign.id,
  campaign.name,
  ad_group.id,
  ad_group.name,
  ad_group_criterion.keyword.match_type,
  ad_group_criterion.keyword.text,
  ad_group_criterion.criterion_id,
  ad_group_criterion.quality_info.creative_quality_score,
  ad_group_criterion.system_serving_status,
  ad_group_criterion.negative,
  ad_group_criterion.quality_info.quality_score,
  ad_group_criterion.quality_info.search_predicted_ctr,
  ad_group_criterion.quality_info.post_click_quality_score,
  metrics.historical_landing_page_quality_score,
  metrics.search_click_share,
  metrics.historical_creative_quality_score,
  metrics.clicks,
  metrics.impressions
FROM keyword_view
WHERE segments.date DURING LAST_7_DAYS

唯一每小時可能會變更的資料欄是 metrics.clicksmetrics.impressions。所有其他資料欄則不常更新或完全不更新,因此每小時擷取這些資料欄的效率極低。您可以將這些值儲存在本機資料庫中,然後執行 change-eventchange-status 報表,每天下載一、兩次變更。

在某些情況下,您可以套用適當的篩選器,藉此減少下載的資料列數。

清除未使用的帳戶

如果您的應用程式會管理第三方廣告客戶帳戶,就必須在開發應用程式時將客戶流失納入考量。您應定期清除程序和資料儲存庫,為不再使用應用程式的客戶移除帳戶。清理未使用的 Google Ads 帳戶時,請注意下列原則:

  • 撤銷客戶授予您的應用程式管理其帳戶的授權。
  • 停止對客戶的 Google Ads 帳戶發出 API 呼叫。尤其是 Cron 工作和資料管道等離線工作 (例如設計成不需要使用者介入即可執行) 的工作。
  • 如果客戶撤銷授權,您的應用程式應妥善處理這種情況,避免向 Google 的 API 伺服器傳送無效的 API 呼叫。
  • 如果客戶已取消 Google Ads 帳戶,您應該偵測該帳戶,避免向 Google 的 API 伺服器傳送無效的 API 呼叫。
  • 經過一段時間後,再從本機資料庫刪除從客戶 Google Ads 帳戶下載的資料。