YouTube 频道转移作业

借助适用于 YouTube 的 BigQuery Data Transfer Service,您可以自动安排和管理 YouTube 频道报告的周期性加载作业。

支持的报告

适用于 YouTube 频道报告的 BigQuery Data Transfer Service 支持以下报告选项:

报告选项 支持
支持的 API 版本 2018 年 6 月 18 日
时间安排

每天,约在 14:10 UTC

您可以配置时段

刷新时段

过去 1 天

无法配置。

回填时长上限

30 天

自 2018 年 7 月起,包含历史数据的 YouTube 报告自生成之日起 30 天内可用。(包含非历史数据的报告在 60 天内可用。)如需了解详情,请参阅 YouTube Reporting API 文档中的历史数据

如需了解 YouTube 频道报告如何转换为 BigQuery 表和视图,请参阅 YouTube 频道报告转换

从 YouTube 频道转移作业中提取数据

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

限制

  • 每个报告支持的文件大小上限为 1710 GB。
  • 可安排数据转移作业的最小频率为每 24 小时一次。默认情况下,转移作业从创建转移作业时开始。但是,您可以在设置转移作业时配置转移作业开始时间。
  • BigQuery Data Transfer Service 不支持在 YouTube 内容所有者转移作业期间执行增量转移。指定数据转移的日期时,系统会转移该日期的所有数据。
  • 如果您以联合身份登录,则无法创建 YouTube 频道转移作业。您只能在使用 Google 账号登录时创建 YouTube 频道转移作业。

准备工作

创建 YouTube 频道转移作业之前,请先做好以下准备工作:

所需权限

创建 YouTube 频道转移作业需要以下权限:

  • YouTube:YouTube 频道的所有权
  • BigQuery:BigQuery 中的以下 Identity and Access Management (IAM) 权限:

    • 用于创建转移作业的 bigquery.transfers.update
    • 目标数据集的 bigquery.datasets.getbigquery.datasets.update 权限。
    • 如果您要设置 Pub/Sub 的转移作业运行通知,必须拥有 pubsub.topics.setIamPolicy 权限。如果您只是要设置电子邮件通知,则无需 Pub/Sub 权限。如需了解详情,请参阅 BigQuery Data Transfer Service 运行通知

预定义的 IAM 角色 bigquery.admin 具有创建 YouTube 频道转移作业所需的所有 BigQuery 权限。如需详细了解 BigQuery 中的 IAM 角色,请参阅预定义的角色和权限

设置 YouTube 频道转移作业

设置 YouTube 频道转移作业需要提供以下信息:

  • 表后缀:您在设置转移作业时为频道提供的简单易记的名称。系统会将此后缀附加到作业 ID 的后面以创建表名称,例如 reportTypeId_suffix。此后缀用于防止不同的转移作业写入相同的表。在将数据加载到同一数据集的所有转移作业中,表后缀必须是唯一的,而且要简短,以尽量缩短所生成的表名称的长度。

如果您目前在使用 YouTube Reporting API,并且目前具有报告作业,则 BigQuery Data Transfer Service 会加载您的报告数据。如果您目前没有报告作业,设置转移作业会自动启用 YouTube 报告作业。

如需创建 YouTube 频道转移作业,请执行以下操作:

控制台

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

    转到 BigQuery 页面

  2. 点击转移

  3. 点击创建转移作业

  4. 创建转移作业页面中执行以下操作:

    • 来源类型部分的来源中,选择 YouTube 频道

      转移作业来源

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

      转移作业名称

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

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

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

    • Destination settings 部分的 Destination dataset 中,选择您创建的用来存储数据的数据集。

      转移作业数据集

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

      • 表后缀 (Table suffix) 部分中,输入后缀,例如 MT
      • 勾选 Configure jobs(配置作业)复选框,以允许 BigQuery 为您管理 YouTube 报告作业。如果您的账号目前没有对应的 YouTube 报告,系统会创建新的报告作业来启用它们。

        YouTube 频道来源详细信息

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

      • 点击切换开关以启用电子邮件通知。启用此选项后,转移作业管理员会在转移作业运行失败时收到电子邮件通知。
      • 选择 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"}'。对于 YouTube 频道转移作业,您必须提供 table_suffix 参数。您可以选择将 configure_jobs 参数设置为 true,以允许 BigQuery Data Transfer Service 为您管理 YouTube 报告作业。如果您的频道目前没有 YouTube 报告,系统会创建新的报告作业来启用报告。
  • data_source 是数据源,即 youtube_channel

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

例如,以下命令使用表后缀 MT 和目标数据集 mydataset 创建名为 My Transfer 的 YouTube 频道转移作业。该转移作业将在默认项目中创建:

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"table_suffix":"MT","configure_jobs":"true"}' \
--data_source=youtube_channel

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 youtube channel transfer config.
public class CreateYoutubeChannelTransfer {

  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 tableSuffix = "_test";
    Map<String, Value> params = new HashMap<>();
    params.put("table_suffix", Value.newBuilder().setStringValue(tableSuffix).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Youtube Channel Config Name")
            .setDataSourceId("youtube_channel")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .build();
    createYoutubeChannelTransfer(projectId, transferConfig);
  }

  public static void createYoutubeChannelTransfer(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("Youtube channel transfer created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("Youtube channel transfer was not created." + ex.toString());
    }
  }
}

查询数据

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

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

排查 YouTube 频道转移作业设置问题

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