Google Ad Manager 转移作业

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

支持的报告

目前,适用于 Google Ad Manager 的 BigQuery Data Transfer Service 支持以下报告选项:

如需了解 Google Ad Manager 报告如何转换为 BigQuery 表和视图,请参阅 Google Ad Manager 报告转换

报告选项 支持
支持的 API 版本 v201908
时间表

每 8 小时(基于创建时间)。

无法配置

刷新时段

过去 2 天

无法配置

最大回填时长

过去 60 天

Google Ad Manager 最多可将数据转移文件保留 60 天。保存时间超过 60 天的文件会被 Google Ad Manager 删除。

准备工作

在创建 Google Ad Manager 转移作业之前,请先做好以下准备工作:

  • 确认您已完成启用 BigQuery Data Transfer Service 所需的全部操作。
  • 创建 BigQuery 数据集以存储 Google Ad Manager 数据。
  • 确保您的组织有权访问 Google Ad Manager 数据转移 (Google Ad Manager DT) 文件。 这些文件由 Google Ad Manager 团队提交到 Cloud Storage 存储分区。要获取对 Google Ad Manager DT 文件的访问权限,请完成以下步骤。Google Ad Manager 团队可能会收取额外费用。

    • 查看数据转移概览报告
    • 在页面的右上角,点击与我们联系
    • 点击报告
    • 发送电子邮件或与代表聊天,询问是否可以访问 Google Ad Manager 数据转移文件。

    完成此步骤后,您将收到类似于以下名称的 Cloud Storage 存储分区:

    gdfp-12345678

    Google Cloud 团队不能代表您生成或授予对 Google Ad Manager DT 文件的访问权限。请联系 Google Ad Manager 支持团队,获取对 Google Ad Manager DT 文件的访问权限。

  • 启用对 Google Ad Manager 网络的 API 访问权限
  • 如果您想要设置转移作业通知,则必须拥有 Pub/Sub 的 pubsub.topics.setIamPolicy 权限。如果您只是要设置电子邮件通知,则无需 Pub/Sub 权限。如需了解详情,请参阅 BigQuery Data Transfer Service 运行通知
  • 所需权限

    • BigQuery:确保转移作业创建者在 BigQuery 中拥有以下权限:

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

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

    • Google Ad Manager:存储在 Cloud Storage 中的 Google Ad Manager DT 文件的读取权限。对 Google Ad Manager DT 文件的权限由 Google Ad Manager 团队负责管理。

    设置 Google Ad Manager 转移作业

    为 Google Ad Manager 设置 BigQuery 数据转移作业需要提供以下信息:

    • Cloud Storage 存储分区:您的 Google Ad Manager DT 文件的 Cloud Storage 存储分区 URI(如准备工作中所述)。存储分区名称应类似于:

      gdfp-12345678
    • 网络代码:在登录网络后,您将在网址中找到 Google Ad Manager 的网络代码。例如,在网址 https://admanager.google.com/2032576#delivery 中,2032576 是您的网络代码。如需了解详情,请参阅 Google Ad Manager 使用入门

    要为 Google Ad Manager 创建 BigQuery Data Transfer Service 转移作业,请执行以下操作:

    控制台

    1. 转到 Cloud Console 中的 BigQuery 页面。

      转到 BigQuery 页面

    2. 点击转移

    3. 点击创建转移作业

    4. 创建转移作业页面上:

      • 来源类型部分的来源中,选择 Google Ad Manager

        转移作业来源

      • 转移配置名称部分的显示名中,输入转移作业的名称,例如 My Transfer。转移作业名称可以是任何容易辨识的值,方便您以后在需要修改该作业时能轻松识别。

        转移作业名称

      • 时间表选项部分的时间表中,保留默认值(立即开始)或点击在设置的时间开始 (Start at a set time)。

        • 重复频率部分,从以下选项中选择转移作业的运行频率。
          • 每日一次(默认值)
          • 每周一次
          • 每月一次
          • 自定义
          • 按需
        • 开始日期和运行时间部分,输入开始转移作业的日期和时间。如果选择立即开始,则此选项会处于停用状态。

          转移作业时间安排

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

        转移作业数据集

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

        • Cloud Storage 存储分区部分,输入存储数据转移文件的 Cloud Storage 存储分区的名称。当您输入存储分区名称时,请不要包含 gs://
        • 网络代码 (Network code) 部分,输入您的网络代码。

          Google Ad Manager 来源详细信息

      • (可选)在通知选项部分,执行以下操作:

        • 点击切换开关以启用电子邮件通知。启用此选项后,转移作业管理员会在转移作业运行失败时收到电子邮件通知。
        • 选择 Pub/Sub 主题部分,选择您的主题名称,或点击创建主题。此选项用于为您的转移作业配置 Pub/Sub 运行通知
    5. 点击保存

    bq

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

    • --data_source
    • --target_dataset
    • --display_name
    • --params
    bq mk --transfer_config \
    --project_id=project_id \
    --target_dataset=dataset \
    --display_name=name \
    --params='parameters' \
    --data_source=data_source
    

    其中:

    • project_id 是项目 ID。
    • dataset 是转移作业配置的目标数据集。
    • name 是转移作业配置的显示名。转移作业名称可以是任何容易辨识的值,让您以后在需要修改时能够轻松识别。
    • parameters 包含所创建转移作业配置的参数(采用 JSON 格式),例如 --params='{"param":"param_value"}'。对于 Google Ad Manager,您必须提供 bucketnetwork_code 参数。bucket 是包含您的 Google Ad Manager DT 文件的 Cloud Storage 存储分区。network_code 是您的网络代码。
    • data_source 是数据源 - dfp_dt (Google Ad Manager)。

    您还可以提供 --project_id 标志以指定具体项目。如果未指定 --project_id,系统会使用默认项目。

    例如,以下命令会使用网络代码 12345678、Cloud Storage 存储分区 gdfp-12345678 和目标数据集 mydataset 创建名为 My Transfer 的 Google Ad Manager 转移作业。该转移作业将在默认项目中创建:

    bq mk --transfer_config \
    --target_dataset=mydataset \
    --display_name='My Transfer' \
    --params='{"bucket": "gdfp-12345678","network_code": "12345678"}' \
    --data_source=dfp_dt
    

    运行命令后,您会收到如下消息:

    [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

    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 a ad manager(formerly DFP) transfer config
    public class CreateAdManagerTransfer {
    
      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";
        String bucket = "gs://cloud-sample-data";
        // the network_code can only be digits with length 1 to 15
        String networkCode = "12345678";
        Map<String, Value> params = new HashMap<>();
        params.put("bucket", Value.newBuilder().setStringValue(bucket).build());
        params.put("network_code", Value.newBuilder().setStringValue(networkCode).build());
        TransferConfig transferConfig =
            TransferConfig.newBuilder()
                .setDestinationDatasetId(datasetId)
                .setDisplayName("Your Ad Manager Config Name")
                .setDataSourceId("dfp_dt")
                .setParams(Struct.newBuilder().putAllFields(params).build())
                .build();
        createAdManagerTransfer(projectId, transferConfig);
      }
    
      public static void createAdManagerTransfer(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("Ad manager transfer created successfully :" + config.getName());
        } catch (ApiException ex) {
          System.out.print("Ad manager transfer was not created." + ex.toString());
        }
      }
    }

    排查 Google Ad Manager 转移作业设置问题

    如果您在设置转移作业时遇到问题,请参阅排查 BigQuery Data Transfer Service 转移作业设置问题中的 Google Ad Manager 转移作业问题

    查询数据

    当数据转移到 BigQuery 时,数据会写入按提取时间分区的表。如需了解详情,请参阅分区表简介

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

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

    在以下每个查询中,将 dataset 等变量替换为您的值。例如,将 network_code 替换为您的 Google Ad Manager 网络代码。

    展示次数和唯一身份用户数(按城市)

    以下示例查询会分析过去 30 天内的展示次数和唯一身份用户数(按城市)。

    控制台

    # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
    SELECT
      City,
      _DATA_DATE AS Date,
      count(*) AS imps,
      count(distinct UserId) AS uniq_users
    FROM `dataset.NetworkImpressionsnetwork_code`
    WHERE
      _DATA_DATE BETWEEN start_date AND end_date
    GROUP BY City, Date
    

    bq

    # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
    bq query --use_legacy_sql=false \
    'SELECT
      City,
      _DATA_DATE AS Date,
      count(*) AS imps,
      count(distinct UserId) AS uniq_users
    FROM `dataset.NetworkImpressions_network_code`
    WHERE
      _DATA_DATE BETWEEN start_date AND end_date
    GROUP BY City, Date'
    

    展示次数和唯一身份用户数(按专列项类型)

    以下示例查询会分析过去 30 天内的展示次数和唯一身份用户数(按专列项类型)。

    控制台

    # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
    SELECT
      MT.LineItemType AS LineItemType,
      DT._DATA_DATE AS Date,
      count(*) AS imps,
      count(distinct UserId) AS uniq_users
    FROM `dataset.NetworkImpressionsnetwork_code` AS DT
    LEFT JOIN `dataset.MatchTableLineItem_network_code` AS MT
    ON
      DT.LineItemId = MT.Id
    WHERE
      DT._DATA_DATE BETWEEN start_date AND end_date
    GROUP BY LineItemType, Date
    ORDER BY Date desc, imps desc
    

    bq

        # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
        # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
        bq query --use_legacy_sql=false \
        'SELECT
          MT.LineItemType AS LineItemType,
          DT._DATA_DATE AS Date,
          count(*) AS imps,
          count(distinct UserId) AS uniq_users
        FROM `dataset.NetworkImpressions_network_code` AS DT
        LEFT JOIN `dataset.MatchTableLineItem_network_code` AS MT
        ON
          DT.LineItemId = MT.Id
        WHERE
          DT._DATA_DATE BETWEEN start_date AND end_date
        GROUP BY LineItemType, Date
        ORDER BY Date desc, imps desc'
    

    展示次数(按广告单元)

    以下示例查询会分析过去 30 天内的展示次数(按广告单元)。

    控制台

    # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
    SELECT
      MT.AdUnitCode AS AdUnitCode,
      DT.DATA_DATE AS Date,
      count(*) AS imps
    FROM `dataset.NetworkImpressionsnetwork_code` AS DT
    LEFT JOIN `dataset.MatchTableLineItem_network_code` AS MT
    ON
      DT.AdUnitId = MT.Id
    WHERE
      DT._DATA_DATE BETWEEN start_date AND end_date
    GROUP BY AdUnitCode, Date
    ORDER BY Date desc, imps desc
    

    bq

    # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
    bq query --use_legacy_sql=false \
    'SELECT
      MT.AdUnitCode AS AdUnitCode,
      DT._DATA_DATE AS Date,
      count(*) AS imps
    FROM `dataset.NetworkImpressions_network_code` AS DT
    LEFT JOIN `dataset.MatchTableLineItem_network_code` AS MT
    ON
      DT.AdUnitId = MT.Id
    WHERE
      DT._DATA_DATE BETWEEN start_date AND end_date
    GROUP BY AdUnitCode, Date
    ORDER BY Date desc, imps desc'
    

    展示次数(按专列项)

    以下示例查询会分析过去 30 天内的展示次数(按专列项)。

    控制台

    # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
    SELECT
      MT.Name AS LineItemName,
      DT._DATA_DATE AS Date,
      count(*) AS imps
    FROM `dataset.NetworkImpressionsnetwork_code` AS DT
    LEFT JOIN `dataset.MatchTableLineItem_network_code` AS MT
    ON
      DT.LineItemId = MT.Id
    WHERE
      DT._DATA_DATE BETWEEN start_date AND end_date
    GROUP BY LineItemName, Date
    ORDER BY Date desc, imps desc
    

    bq

    # START_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -31 DAY)
    # END_DATE = DATE_ADD(CURRENT_DATE(), INTERVAL -1 DAY)
    bq query --use_legacy_sql=false \
    'SELECT
      MT.Name AS LineItemName,
      DT._DATA_DATE AS Date,
      count(*) AS imps
    FROM `dataset.NetworkImpressions_network_code` AS DT
    LEFT JOIN `dataset.MatchTableLineItem_network_code` AS MT
    ON
      DT.LineItemId = MT.Id
    WHERE
      DT._DATA_DATE BETWEEN start_date AND end_date
    GROUP BY LineItemName, Date
    ORDER BY Date desc, imps desc'