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 会使用最新数据覆盖该特定日期的分区。同一天的多个转移作业或正在运行的回填不会导致重复数据,其他日期的分区不受影响。

限制

  • 可安排数据转移作业的最小频率为每 24 小时一次。默认情况下,转移作业从创建转移作业时开始。但是,您可以在设置转移作业时配置转移作业开始时间。
  • BigQuery Data Transfer Service 不支持在 Google Play 转移期间执行增量转移。指定数据转移的日期时,系统会转移该日期的所有数据。
  • 系统会每月生成一次收入报告,通常在次月 5 日之前提供该报告。默认情况下,Google Play 转移作业只会刷新过去 7 天的数据。因此,我们仅转移上个月最后几天的收入报告。若要转移整个月的收入数据,需要通过手动回填涵盖缺失的日期。

准备工作

在创建 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 控制台中的 BigQuery 页面。

    转到 BigQuery 页面

  2. 点击转移

  3. 点击创建转移作业

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

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

      转移作业来源

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

      转移作业名称

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

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

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

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

      转移作业数据集

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

      • Cloud Storage 存储桶部分,请输入您的 Cloud Storage 存储桶的 ID。
      • 表后缀 (Table suffix) 部分中,输入后缀,例如“MT”(表示“My Transfer”)。

        Google Play 来源详细信息

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

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

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

bq

输入 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.

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

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 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 存储查询价格付费。

后续步骤