Google Ads 转移作业

通过适用于 Google Ads(以前称为 Google AdWords)的 BigQuery Data Transfer Service,您可以自动安排和管理 Google Ads 报告数据的周期性加载作业。

支持的报告

适用于 Google Ads 的 BigQuery Data Transfer Service 支持 Google Ads API v14:

如需了解 Google Ads 报告如何转换为 BigQuery Data Transfer Service 表和视图,请参阅 Google Ads 报告转换

如需将 Google Ads 报告映射到 Google Ads 界面中显示的内容,请参阅将报告映射到 Google Ads 界面

报告选项 支持
支持的 API 版本

v14

时间表

每天在首次创建传输之时(默认值)

您可以配置一天中的具体时间。

刷新时段

最近 7 天(默认值)

最多可配置 30 天

系统会每天截取一次匹配表的快照,并将其存储在最近运行日期对应的分区中。使用刷新窗口加载回填或天数时,匹配表快照不会更新。

回填时长上限

无限制

Google Ads 没有已知的数据保留限制(除了点击效果报告之外),但 BigQuery Data Transfer Service 会限制一次回填中可以请求的天数。如需了解回填,请参阅设置回填

每个经理账号的客户 ID 数

8000

对于每个 Google Ads 经理账号 (MCC),BigQuery Data Transfer Service 最多支持 8,000 个客户 ID

从 Google Ads 转移作业中提取数据

当您将数据从 Google Ads 转移到 BigQuery 时,系统会将数据加载到按日期分区的 BigQuery 表中。数据加载到的表分区对应于数据源中的日期。如果您在同一日期安排多次转移,BigQuery Data Transfer Service 会使用最新数据覆盖该特定日期的分区。同一天的多个转移作业或正在运行的回填不会导致重复数据,其他日期的分区不受影响。

限制

  • 您可以配置 Google Ads 转移作业的最大频率为每 24 小时一次。默认情况下,转移作业从创建转移作业时开始。但是,您可以在创建转移作业时配置转移作业开始时间。
  • BigQuery Data Transfer Service 不支持在 Google Ads 转移期间执行增量转移。指定数据转移的日期时,系统会转移该日期的所有数据。

准备工作

在创建 Google Ads 转移作业之前,请完成以下任务:

所需权限

请确保创建转移作业的人员拥有以下必要权限:

  • BigQuery Data Transfer Service

    • 创建转移作业所需的 bigquery.transfers.update 权限
    • 针对目标数据集的 bigquery.datasets.getbigquery.datasets.update 权限

    预定义的 IAM 角色 bigquery.admin 包含 bigquery.transfers.updatebigquery.datasets.updatebigquery.datasets.get 权限。如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制参考文档

  • Google Ads:对转移作业配置中使用的 Google Ads 客户 ID 或经理账号 (MCC) 的读取权限。

创建 Google Ads 数据转移作业

要为 Google Ads 报告创建数据转移作业,您需要 Google Ads 客户 ID 或经理账号 (MCC)。如需了解如何检索 Google Ads 客户 ID,请参阅查找客户 ID

如需为 Google Ads 报告创建数据转移作业,请选择以下选项之一:

控制台

  1. 转到 Google Cloud 控制台中的 BigQuery 页面。

    转到 BigQuery 页面

  2. 点击 数据转移

  3. 点击 创建转移作业

  4. 来源类型部分的来源中,选择 Google Ads

  5. 转移配置名称部分的显示名中,输入转移作业的名称,例如 My Transfer。转移作业名称可以是任何可让您在需要修改转移作业时识别该转移作业的名称。

  6. 时间表选项部分中,执行以下操作:

    • 重复频率部分,选择转移作业的运行频率选项。如果您选择,请提供世界协调时间 (UTC) 的有效时间。

      • 小时
      • 星期几
      • 点播课程
    • 如果适用,请选择立即开始在设置的时间开始,并提供开始日期和运行时间。

  7. 目标设置部分的数据集中,选择您创建用来存储数据的数据集。

  8. 数据源详细信息部分,执行以下操作:

    1. 客户 ID中,输入您的 Google Ads 客户 ID:

      Google Ads 来源详细信息

    2. 可选:选择选项来排除已移除或已停用的项,并包含 Google Ads 中新生成的表。

    3. 可选:输入要包含的表的逗号分隔列表,例如 Campaign, AdGroup。为此列表添加 - 字符作为前缀,以排除某些表,例如 -Campaign, AdGroup。默认情况下,所有表均包含在内。

    4. 可选:选择相应选项,添加专门针对效果最大化广告系列报告的表。如需详细了解效果最大化广告系列支持,请参阅效果最大化广告系列支持

    5. 可选:对于刷新时段,请输入介于 1 到 30 之间的值。

  9. 服务账号菜单中,从与您的 Google Cloud 项目关联的服务账号中选择一个服务账号。您可以将服务账号与转移作业相关联,而不是使用用户凭据。如需详细了解如何将服务账号用于数据转移,请参阅使用服务账号

    • 如果您使用联合身份登录,则需要有服务账号才能创建转移作业。如果您使用 Google 账号登录,则转移作业的服务账号是可选的。
    • 服务账号必须具有所需的权限
  10. 可选:在通知选项部分中,执行以下操作:

    • 点击切换开关以启用电子邮件通知。启用此选项后,如果转移作业运行失败,转移作业管理员会收到电子邮件通知。

    • 点击切换开关以启用 Pub/Sub 通知。在选择 Cloud Pub/Sub 主题部分中,选择主题名称或点击创建主题。此选项用于为您的转移作业配置 Pub/Sub 运行通知

      Google Ads 通知

  11. 点击保存

bq

输入 bq mk 命令并提供转移作业创建标志 --transfer_config。此外,还必须提供以下标志:

  • --data_source
  • --target_dataset
  • --display_name
  • --params

以下标志是可选的:

  • --project_id:指定要使用的项目。如果未指定此标志,则系统会使用默认项目。
  • --table_filter:指定要包含在转移作业中的表。如果未指定此标志,则包含所有表。如需仅包含特定表,请使用以英文逗号分隔的值列表(例如 AdCampaignAdGroup)。如需排除特定表,请在值的前面加上连字符 (-),例如 -AdCampaignAdGroup
  • --service_account_name:指定用于 Google Ads 转移作业身份验证的服务账号,而不是您的用户账号。
bq mk \
--transfer_config \
--project_id=project_id \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source \
--table_filter=tables
--service_account_name=service_account_name

其中:

  • project_id 是项目 ID。
  • dataset 是转移作业配置的目标数据集。
  • name 是转移作业配置的显示名。转移作业名称可以是任何可让您在需要修改转移作业时识别该转移作业的名称。
  • parameters 包含所创建转移作业配置的参数(采用 JSON 格式),例如 --params='{"param":"param_value"}'。对于 Google Ads,您必须提供 customer_id 参数。您可以选择将 exclude_removed_items 参数设置为 true,以防止转移已移除或已停用的实体及指标。
  • data_source 是数据源,即 google_ads
  • tables 是转移作业中要包含或排除的表的英文逗号分隔列表。
  • service_account_name 是用于对转移作业进行身份验证的服务账号名称。该服务账号必须属于用于创建转移作业的同一 project_id,并且必须具有所有所需的权限

例如,以下命令使用客户 ID 123-123-1234 和目标数据集 mydataset 创建名为 My Transfer 的 Google Ads 转移作业。该转移作业将在默认项目中创建:

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"customer_id":"123-123-1234","exclude_removed_items":"true"}' \
--data_source=google_ads

首次运行此命令时,您会收到如下消息:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

请按照该消息中的说明操作,并将身份验证代码粘贴到命令行中。

API

使用 projects.locations.transferConfigs.create 方法并提供一个 TransferConfig 资源实例。

Java

试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。如需了解详情,请参阅 BigQuery Java API 参考文档

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create ads(formerly AdWords) transfer config
public class CreateAdsTransfer {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    String datasetId = "MY_DATASET_ID";
    // the customer_id only allows digits and hyphen ('-').
    String customerId = "012-345-6789";
    String refreshWindow = "100";
    Map<String, Value> params = new HashMap<>();
    params.put("customer_id", Value.newBuilder().setStringValue(customerId).build());
    params.put("refreshWindow", Value.newBuilder().setStringValue(refreshWindow).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Ads Transfer Config Name")
            .setDataSourceId("adwords")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .build();
    createAdsTransfer(projectId, transferConfig);
  }

  public static void createAdsTransfer(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = client.createTransferConfig(request);
      System.out.println("Ads transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Ads transfer was not created." + ex.toString());
    }
  }
}

手动触发 Google Ads 转移作业

如果您手动触发 Google Ads 转移作业,系统会每天截取一次匹配表的快照,并将其存储在与最近运行日期对应的分区中。触发手动转移作业时,以下表的匹配表快照不会更新:

  • 广告
  • AdGroup
  • AdGroupAudience
  • AdGroupBidModifier
  • AdGroupAdLabel
  • AdGroupCriterion
  • AdGroupCriterionLabel
  • AdGroupLabel
  • AgeRange
  • 资产
  • AssetGroup
  • AssetGroupAsset
  • AssetGroupListingGroupFilter
  • AssetGroupSignal
  • 受众
  • BidGoal
  • Budget
  • 宣传活动
  • CampaignAudience
  • CampaignCriterion
  • CampaignLabel
  • 客户
  • Gender
  • Keyword
  • LocationBasedCampaignCriterion
  • ParentalStatus
  • Placement
  • 视频

效果最大化广告系列支持

借助 Google Ads 连接器,您可以导出效果最大化广告系列数据。在创建数据转移作业时,您必须选中包含效果最大化广告系列表格复选框,因为在默认情况下,效果最大化广告系列数据不会导出。

添加效果最大化广告系列数据会从某些表中移除 ad_group 字段,并包含新表。您不能添加 ad_group 字段,因为 Google Ads API 会过滤效果最大化广告系列数据。

下表排除了选中包含效果最大化广告系列表格复选框时的 ad_group 相关列:

  • GeoStats
  • GeoConversionStats
  • ShoppingProductConversionStats
  • ShoppingProductStats
  • LocationsUserLocationsStats

选中包含效果最大化广告系列表格复选框后,系统会添加以下表:

  • 资产
  • AssetGroup
  • AssetGroupAsset
  • AssetGroupListingGroupFilter
  • AssetGroupSignal
  • 受众
  • AssetGroupProductGroupStats
  • CampaignAssetStats

对 Google Ads 经理账号的支持

对于拥有多个特定于客户 ID 的 Google Ads 转移作业的现有客户,我们鼓励在经理账号 (MCC) 级层设置一次 Google Ads 转移作业,安排数据回填,并停用各特定于客户 ID 的 Google Ads 转移作业。

与使用各个客户 ID 相比,使用 Google Ads 经理账号具有多项优势:

  • 针对多个客户 ID 生成报告时,您不再需要管理多个转移作业。
  • 跨客户查询的编写方式简单得多,因为所有客户 ID 都存储在同一个表中。
  • 使用 MCC 可以缓解 BigQuery Data Transfer Service 加载配额问题,因为多个客户 ID 将加载到同一作业中。

如需详细了解 Google Ads 经理账号 (MCC),请参阅使用客户账号关于将账号关联到经理账号

示例

以下列表显示了与特定 Google Ads 经理账号相关联的客户 ID:

  • 1234567890 - root 经理账号
    • 1234 - 子级经理账号
      • 1111 - 客户 ID
      • 2222 - 客户 ID
      • 3333 - 客户 ID
      • 4444 - 客户 ID
      • 567 - 子级经理账号
        • 5555 - 客户 ID
        • 6666 - 客户 ID
        • 7777 - 客户 ID
    • 89 - 子级经理账号
      • 8888 - 客户 ID
      • 9999 - 客户 ID
    • 0000 - 客户 ID

每份报告都会显示与某一经理账号关联的各客户 ID。如需详细了解 BigQuery Data Transfer Service 中的 Google Ads 报告结构,请参阅 Google Ads 报告转换

客户 ID 1234567890 对应的转移配置

root 经理账号(客户 ID 1234567890)对应的转移配置将生成包含以下客户 ID 的转移运行:

  • 1111(通过子经理账号 1234)
  • 2222(通过子经理账号 1234)
  • 3333(通过子经理账号 1234)
  • 4444(通过子级经理账号 1234)
  • 5555(通过子经理账号 567 和子经理账号 1234)
  • 6666(通过子经理账号 567 和子经理账号 1234)
  • 7777(通过子经理账号 567 和子经理账号 1234)
  • 8888(通过子级经理账号 89)
  • 9999(通过子级经理账号 89)
  • 0000(个别客户 ID)

客户 ID 1234 对应的转移配置

子经理账号 123(客户 ID 1234)对应的转移配置将生成包含以下客户 ID 的转移运行:

  • 1111
  • 2222
  • 3333
  • 4444
  • 5555(通过子经理账号 567)
  • 6666(通过子经理账号 567)
  • 7777(通过子经理账号 567)

客户 ID 567 对应的转移配置

子经理账号 567(客户 ID 567)对应的转移配置将生成包含以下客户 ID 的转移运行:

  • 5555
  • 6666
  • 7777

客户 ID 89 对应的转移配置

子经理账号 89(客户 ID 89)对应的转移配置将生成包含以下客户 ID 的转移运行:

  • 8888
  • 9999

客户 ID 0000 对应的转移配置

客户 ID 0000 对应的转移配置将生成仅包含个别客户 ID 的转移运行:

  • 0000

将 Google Ads 数据迁移到 MCC

要将 BigQuery Data Transfer Service 中的现有 Google Ads 数据迁移到 MCC 结构,您可以设置回填,将现有数据添加到由与经理账号关联的转移作业配置创建的表。请注意,如果您安排了回填,系统不会更新匹配表。

排查 Google Ads 转移作业设置问题

如果您在设置转移作业时遇到问题,请参阅排查转移配置问题中的 Google Ads 转移问题

查询数据

当数据转移到 BigQuery Data Transfer Service 时,系统会将其写入注入时间分区表。如需了解详情,请参阅分区表简介

如果您要直接查询表,而不是使用自动生成的视图,那么必须在查询中使用 _PARTITIONTIME 伪列。如需了解详情,请参阅查询分区表

Google Ads 示例查询

您可以使用以下 Google Ads 示例查询来分析已转移的数据。您还可以在 Looker 数据洞察等可视化工具中使用查询。这些查询旨在帮助您开始使用 BigQuery Data Transfer Service 来查询 Google Ads 数据。如果您对这些报告的功能有其他问题,请联系您的 Google Ads 技术代表。

在以下每个查询中,将 dataset 替换为您的数据集名称。将 customer_id 替换为 Google Ads 客户 ID。

如果您要直接查询表,而不是使用自动生成的视图,那么必须在查询中使用 _PARTITIONTIME 伪列。如需了解详情,请参阅查询分区表

广告系列效果

以下示例查询分析了最近 30 天内 Google Ads 广告系列的效果。

控制台

SELECT
  c.customer_id,
  c.campaign_name,
  c.campaign_status,
  SUM(cs.metrics_impressions) AS Impressions,
  SUM(cs.metrics_interactions) AS Interactions,
  (SUM(cs.metrics_cost_micros) / 1000000) AS Cost
FROM
  `DATASET.ads_Campaign_CUSTOMER_ID` c
LEFT JOIN
  `DATASET.ads_CampaignBasicStats_CUSTOMER_ID` cs
ON
  (c.campaign_id = cs.campaign_id
  AND cs._DATA_DATE BETWEEN
  DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY) AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY))
WHERE
  c._DATA_DATE = c._LATEST_DATE
GROUP BY
  1, 2, 3
ORDER BY
  Impressions DESC

bq

  bq query --use_legacy_sql=false '
  SELECT
    c.customer_id,
    c.campaign_name,
    c.campaign_status,
    SUM(cs.metrics_impressions) AS Impressions,
    SUM(cs.metrics_interactions) AS Interactions,
    (SUM(cs.metrics_cost_micros) / 1000000) AS Cost
  FROM
    `DATASET.ads_Campaign_CUSTOMER_ID` c
  LEFT JOIN
    `DATASET.ads_CampaignBasicStats_CUSTOMER_ID` cs
  ON
    (c.campaign_id = cs.campaign_id
    AND cs._DATA_DATE BETWEEN
    DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY) AND DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY))
  WHERE
    c._DATA_DATE = c._LATEST_DATE
  GROUP BY
    1, 2, 3
  ORDER BY
    Impressions DESC'

关键字计数

以下示例查询按广告系列、广告组和关键字状态分析关键字。此查询使用 KeywordMatchType 函数。关键字匹配类型有助于控制哪些搜索可以触发广告。如需详细了解关键字匹配选项,请参阅关于关键字匹配选项

控制台

  SELECT
    c.campaign_status AS CampaignStatus,
    a.ad_group_status AS AdGroupStatus,
    k.ad_group_criterion_status AS KeywordStatus,
    k.ad_group_criterion_keyword_match_type AS KeywordMatchType,
    COUNT(*) AS count
  FROM
    `DATASET.ads_Keyword_CUSTOMER_ID` k
    JOIN
    `DATASET.ads_Campaign_CUSTOMER_ID` c
  ON
    (k.campaign_id = c.campaign_id AND k._DATA_DATE = c._DATA_DATE)
  JOIN
    `DATASET.ads_AdGroup_CUSTOMER_ID` a
  ON
    (k.ad_group_id = a.ad_group_id AND k._DATA_DATE = a._DATA_DATE)
  WHERE
    k._DATA_DATE = k._LATEST_DATE
  GROUP BY
    1, 2, 3, 4

bq

  bq query --use_legacy_sql=false '
  SELECT
    c.campaign_status AS CampaignStatus,
    a.ad_group_status AS AdGroupStatus,
    k.ad_group_criterion_status AS KeywordStatus,
    k.ad_group_criterion_keyword_match_type AS KeywordMatchType,
    COUNT(*) AS count
  FROM
    `DATASET.ads_Keyword_CUSTOMER_ID` k
  JOIN
    `DATASET.ads_Campaign_CUSTOMER_ID` c
  ON
    (k.campaign_id = c.campaign_id AND k._DATA_DATE = c._DATA_DATE)
  JOIN
    `DATASET.ads_AdGroup_CUSTOMER_ID` a
  ON
    (k.ad_group_id = a.ad_group_id AND k._DATA_DATE = a._DATA_DATE)
  WHERE
    k._DATA_DATE = k._LATEST_DATE
  GROUP BY
    1, 2, 3, 4'