Google Play 转移作业

借助适用于 Google Play 连接器的 BigQuery Data Transfer Service,您可以自动安排和管理 Google Play 报告数据的周期性加载作业。

支持的报告

适用于 Google Play 的 BigQuery Data Transfer Service 支持以下每月报告选项:

详细报告

汇总报告

如需详细了解 Google Play 报告如何转换为 BigQuery 表,请参阅 Google Play 报告转换

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

不适用

重复频率

每天在首次创建数据转移作业之时(默认值)

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

刷新时段

过去 7 天

不可配置

回填时长上限

无限制

虽然 Google Play 没有已知的数据保留限制,但 BigQuery Data Transfer Service 会限制一次回填中可以请求的天数。如需详细了解回填,请参阅手动触发转移作业

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

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

刷新时段

刷新时段是指发生数据转移时数据转移检索数据的天数。例如,如果刷新时段为三天,并且每天进行转移,则 BigQuery Data Transfer Service 会从过去三天内的源表中检索所有数据。在此示例中,当每天进行转移时,BigQuery Data Transfer Service 会使用当前日期的源表数据副本创建新的 BigQuery 目标表分区,然后自动触发回填运行作业,以使用过去两天的源表数据来更新 BigQuery 目标表分区。自动触发的回填运行作业会覆盖或以增量方式更新 BigQuery 目标表,具体取决于 BigQuery Data Transfer Service 连接器是否支持增量更新。

首次运行数据转移作业时,数据转移作业会检索刷新时段内可用的所有源数据。例如,如果刷新时段为三天,并且您首次运行数据转移作业,则 BigQuery Data Transfer Service 会检索三天内的所有源数据。

刷新时段会映射到 TransferConfig.data_refresh_window_days API 字段

如需检索刷新时段之外的数据(例如历史数据),或在出现任何转移中断或缺口时恢复数据,您可以启动或安排回填运行作业

限制

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

准备工作

在创建 Google Play 数据转移作业之前:

  • 确认您已完成启用 BigQuery Data Transfer Service 所需的所有操作。
  • 创建 BigQuery 数据集,以用于存储 Google Play 数据。
  • 找到您的 Cloud Storage 存储桶:
    1. Google Play 管理中心,点击 下载报告并选择评价统计信息财务
    2. 如需复制您的 Cloud Storage 存储桶的 ID,请点击 复制 Cloud Storage URI。您的存储桶 ID 以 gs:// 开头。例如,对于评价报告,您的 ID 类似于以下内容:
      gs://pubsite_prod_rev_01234567890987654321/reviews
    3. 对于 Google Play 数据转移作业,您只需复制介于 gs:///reviews 之间的唯一 ID 部分的内容:
      pubsite_prod_rev_01234567890987654321
  • 如果您要设置 Pub/Sub 的转移作业运行通知,必须拥有 pubsub.topics.setIamPolicy 权限。如果您只想设置电子邮件通知,则无需 Pub/Sub 权限。如需了解详情,请参阅 BigQuery Data Transfer Service 运行通知

所需权限

  • BigQuery:确保创建数据转移作业的人员在 BigQuery 中拥有以下权限:

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

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

  • Google Play:确保您在 Google Play 中拥有以下权限:

    Google Cloud 团队无法代表您生成或授予对 Google Play 文件的访问权限。请参阅与 Google Play 支持团队联系以获取有关访问 Google Play 文件的帮助。

设置 Google Play 转移作业

设置 Google Play 数据转移作业需要提供以下信息:

  • Cloud Storage 存储分区准备工作中介绍了查找 Cloud Storage 存储桶的步骤。您的 Cloud Storage 存储桶以 pubsite_prod_rev 开头。例如:pubsite_prod_rev_01234567890987654321
  • 表后缀:加载到同一数据集的所有数据源的简单易记的名称。此后缀用于防止不同的转移作业写入相同的表。在将数据加载到同一数据集的所有传输作业中,表后缀必须是唯一的,而且后缀要简短,以尽量缩短所生成的表名称的长度。

如需设置 Google Play 数据转移作业,请按以下步骤操作:

  1. 前往 Google Cloud 控制台中的“数据转移”页面。

    转到“数据传输”

  2. 点击 创建转移作业

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

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

      转移作业来源

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

      转移作业名称

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

      • 重复频率部分,针对数据转移作业的运行频率选择一个选项。如果您选择,请提供世界协调时间 (UTC) 的有效时间。
      • 如果适用,请选择立即开始在设置的时间开始,并提供开始日期和运行时间。
    • 目标设置部分的目标数据集字段中,选择您创建用来存储数据的数据集。

      转移作业数据集

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

      • Cloud Storage 存储桶部分,请输入您的 Cloud Storage 存储桶的 ID。
      • 表后缀部分中,输入后缀,例如 MT(针对 My Transfer)。

      Google Play 来源详细信息

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

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

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

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

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

其中:

  • project_id 是项目 ID。如果未指定 --project_id,系统会使用默认项目。
  • dataset 是转移作业配置的目标数据集。
  • name 是转移作业配置的显示名。数据转移作业名称可以是任何可让您以后需要修改转移作业时识别该转移作业的值。
  • parameters 包含所创建转移作业配置的参数(采用 JSON 格式),例如 --params='{"param":"param_value"}'。对于 Google Play,您必须提供 buckettable_suffix 参数。bucket 是包含您的 Play 报告文件的 Cloud Storage 存储桶。
  • data_source 是数据源,即 play
  • service_account_name 是用于对数据转移作业进行身份验证的服务账号名称。该服务账号应属于用于创建转移作业的同一 project_id,并且应具有所有所需的权限

例如,以下命令使用 Cloud Storage 存储桶 pubsite_prod_rev_01234567890987654321 和目标数据集 mydataset 创建名为 My Transfer 的 Google Play 数据转移作业。该数据转移作业在默认项目中创建:

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"bucket":"pubsite_prod_rev_01234567890987654321","table_suffix":"MT"}' \
--data_source=play

第一次运行该命令时,您将收到如下消息:

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

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

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

试用此示例之前,请按照 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 a play transfer config.
public class CreatePlayTransfer {

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

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

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

如果您在设置数据转移作业时遇到问题,请参阅排查 BigQuery Data Transfer Service 转移作业设置问题

查询数据

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

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

价格

如需了解 Google Play 数据转移作业价格,请参阅价格页面。

将数据转移到 BigQuery 后,您需要按标准的 BigQuery 存储查询价格付费。

后续步骤