使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

传输作业操作

使用 BigQuery Data Transfer Service 创建转移作业后,您可以执行以下操作:

  • 获取有关传输配置的信息
  • 列出传输配置
  • 查看传输的运行历史记录
  • 查看传输运行详情,例如日志消息
  • 更新传输
  • 设置回填
  • 更新凭据
  • 停用传输
  • 删除传输

获取转移作业相关信息

创建传输后,您可以获取有关传输配置的信息。配置包含您在创建传输时提供的值。

所需权限

要获取有关转移作业的信息,您需要具备 bigquery.transfers.get 权限。以下预定义的 IAM 角色包含 bigquery.transfers.get 权限:

  • bigquery.admin
  • bigquery.user

获得 bigquery.transfers.get 权限的用户可以查看有关项目中所有转移作业的信息。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

获取转移作业相关信息

获取转移作业配置相关信息的方法如下:

控制台

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

    进入 BigQuery 页面

  2. 点击转移作业

  3. 转移作业页面上,点击列表中的相应转移作业。

  4. 点击所选转移作业的配置

  5. 系统会显示转移作业配置和数据源详细信息。以下示例显示了 Teradata 迁移的配置属性。

    控制台中的转移作业配置

bq

输入 bq show 命令并提供转移作业配置的资源名称。--format 标志可用于控制输出格式。

bq show \
--format=prettyjson \
--transfer_config resource_name

其中:

例如,输入以下命令可显示转移作业配置 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

bq show \
--format=prettyjson \
--transfer_config projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

使用 projects.locations.transferConfigs.get 方法并通过 name 参数提供转移作业配置。

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.GetTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import java.io.IOException;

// Sample to get config info.
public class GetTransferConfigInfo {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    // i.e projects/{project_id}/transferConfigs/{config_id}` or
    // `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`
    getTransferConfigInfo(configId);
  }

  public static void getTransferConfigInfo(String configId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      GetTransferConfigRequest request =
          GetTransferConfigRequest.newBuilder().setName(configId).build();
      TransferConfig info = dataTransferServiceClient.getTransferConfig(request);
      System.out.print("Config info retrieved successfully." + info.getName() + "\n");
    } catch (ApiException ex) {
      System.out.print("config not found." + ex.toString());
    }
  }
}

列出传输配置

所需权限

要列出项目中的所有转移作业或转移作业配置,您需要具备 bigquery.transfers.get 权限。以下预定义的 IAM 角色包含 bigquery.transfers.get 权限:

  • bigquery.admin
  • bigquery.user

获得 bigquery.transfers.get 权限的用户可以列出项目中的所有转移作业。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

列出转移作业

列出项目中的转移作业配置的方法如下:

控制台

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

    进入 BigQuery 页面

  2. 点击转移作业

  3. 如果项目中有转移作业配置,则转移作业页面上会显示转移作业配置列表。

bq

要按位置列出一个项目的所有转移作业配置,请输入 bq ls 命令并提供 --transfer_location--transfer_config 标志。您还可以提供 --project_id 标志以指定具体项目。如果未指定 --project_id,则系统会使用默认项目。--format 标志可用于控制输出格式。

要列出特定数据源的转移作业配置,请提供 --filter 标志。

要以分页格式查看特定数量的转移作业配置,请提供 --max_results 标志以指定转移作业数量。该命令使用 --page_token 标志返回您提供的页面标记,以查看后续 n 个配置。 如果省略 --max_results,则系统最多会返回 1000 个配置。此外,--max_results 不接受大于 1000 的值。如果您的项目拥有超过 1000 个配置,您可以使用 --max_results--page_token 遍历所有配置。

bq ls \
--transfer_config \
--transfer_location=location \
--project_id=project_id \
--max_results=integer \
--filter=dataSourceIds:data_sources

其中:

示例:

输入以下命令以显示您的默认项目位于美国的所有转移作业配置。--format 标志用于控制输出。

bq ls \
--format=prettyjson \
--transfer_config \
--transfer_location=us

输入以下命令以显示 ID 为 myproject 的项目位于美国的所有转移作业配置。

bq ls \
--transfer_config \
--transfer_location=us \
--project_id=myproject

输入以下命令以列出最新的 3 个转移作业配置。

bq ls \
--transfer_config \
--transfer_location=us \
--project_id=myproject \
--max_results=3

该命令会返回下一页标记。复制页面标记并在 bq ls 命令中提供此标记,以查看接下来的 3 个结果。

bq ls \
--transfer_config \
--transfer_location=us \
--project_id=myproject \
--max_results=3 \
--page_token=AB1CdEfg_hIJKL

输入以下命令以列出项目 ID 为 myproject 的 Ads 和 Campaign Manager 转移作业配置。

bq ls \
--transfer_config \
--transfer_location=us \
--project_id=myproject \
--filter=dataSourceIds:dcm_dt,adwords

API

使用 projects.locations.transferConfigs.list 方法并通过 parent 参数提供项目 ID。

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ListTransferConfigsRequest;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import java.io.IOException;

// Sample to get list of transfer config
public class ListTransferConfigs {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    listTransferConfigs(projectId);
  }

  public static void listTransferConfigs(String projectId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      ListTransferConfigsRequest request =
          ListTransferConfigsRequest.newBuilder().setParent(parent.toString()).build();
      dataTransferServiceClient
          .listTransferConfigs(request)
          .iterateAll()
          .forEach(config -> System.out.print("Success! Config ID :" + config.getName() + "\n"));
    } catch (ApiException ex) {
      System.out.println("Config list not found due to error." + ex.toString());
    }
  }
}

Python

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

from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

project_id = "my-project"
parent = transfer_client.common_project_path(project_id)

configs = transfer_client.list_transfer_configs(parent=parent)
print("Got the following configs:")
for config in configs:
    print(f"\tID: {config.name}, Schedule: {config.schedule}")

查看运行历史记录

在运行已安排好的传输时,系统会为每个传输配置保留运行历史记录,其中包括成功的传输运行和失败的传输运行。超过 90 天的传输运行会从运行历史记录中自动删除。

所需权限

要查看一项转移作业配置的运行历史记录,您需要具备 bigquery.transfers.get 权限。bigquery.userbigquery.admin 预定义 IAM 角色都具有 bigquery.transfers.get 权限。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

查看运行历史记录

查看转移作业配置的运行历史记录的方法如下:

控制台

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

    进入 BigQuery 页面

  2. 点击转移作业

  3. 转移作业页面上,点击列表中的相应转移作业。

  4. 您将转到所选转移作业的运行历史记录页面。

bq

要列出特定转移作业配置的转移作业运行,请输入 bq ls 命令并提供 --transfer_run 标志。您还可以提供 --project_id 标志以指定具体项目。如果 resource_name 不包含项目信息,则系统会使用 --project_id 值。如果未指定 --project_id,则系统会使用默认项目。--format 标志可用于控制输出格式。

要查看特定数量的转移作业运行,请提供 --max_results 标志。该命令使用 --page_token 标志返回您提供的页面标记,以查看后续 n 个配置。

要根据运行状态列出转移作业运行,请提供 --filter 标志。

bq ls \
--transfer_run \
--max_results=integer \
--transfer_location=location \
--project_id=project_id \
--filter=states:state, ... \
resource_name

其中:

  • integer 是要返回的结果数。
  • location 是转移作业配置的位置。位置是在您创建转移作业时指定的。
  • project_id 是项目 ID。
  • state, ... 是以下内容之一或是一个以英文逗号分隔的列表:
    • SUCCEEDED
    • FAILED
    • PENDING
    • RUNNING
    • CANCELLED
  • resource_name 是转移作业的资源名称(也称为转移作业配置)。如果您不知道转移作业的资源名称,您可以通过以下命令查找资源名称:bq ls --transfer_config --transfer_location=location

示例:

输入以下命令,以显示转移作业配置 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7 的 3 次最新运行。--format 标志用于控制输出。

bq ls \
--format=prettyjson \
--transfer_run \
--max_results=3 \
--transfer_location=us \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

该命令会返回下一页标记。复制页面标记并在 bq ls 命令中提供此标记,以查看接下来的 3 个结果。

bq ls \
--format=prettyjson \
--transfer_run \
--max_results=3 \
--page_token=AB1CdEfg_hIJKL \
--transfer_location=us \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

输入以下命令以显示转移作业配置 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7 的所有失败的运行。

bq ls \
--format=prettyjson \
--transfer_run \
--filter=states:FAILED \
--transfer_location=us \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

使用 projects.locations.transferConfigs.runs.list 方法并通过 parent 参数指定项目 ID。

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ListTransferRunsRequest;
import java.io.IOException;

// Sample to get run history from transfer config.
public class RunHistory {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    // i.e projects/{project_id}/transferConfigs/{config_id}` or
    // `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`
    runHistory(configId);
  }

  public static void runHistory(String configId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ListTransferRunsRequest request =
          ListTransferRunsRequest.newBuilder().setParent(configId).build();
      dataTransferServiceClient
          .listTransferRuns(request)
          .iterateAll()
          .forEach(run -> System.out.print("Success! Run ID :" + run.getName() + "\n"));
    } catch (ApiException ex) {
      System.out.println("Run history not found due to error." + ex.toString());
    }
  }
}

查看转移作业运行详情和日志消息

在传输运行出现在运行历史记录中时,您可以查看运行详情,包括日志消息、警告和错误、运行名称以及开始和结束时间。

所需权限

要查看转移作业运行详情,您需要具备 bigquery.transfers.get 权限。bigquery.userbigquery.admin 预定义 IAM 角色都具有 bigquery.transfers.get 权限。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

此外,如需通过 Google Cloud 控制台查看日志消息,您需要具有查看 Cloud Logging 数据的权限,Logs Viewer 角色 (roles/logging.viewer) 可为您提供对 Logging 所有功能的只读权限。如需详细了解 Cloud 日志数据相关的 IAM 权限和角色,请参阅 Cloud Logging 访问权限控制指南

查看转移作业运行详情

查看转移作业运行详情的方法如下:

控制台

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

    进入 BigQuery 页面

  2. 点击转移作业

  3. 转移作业页面上,点击列表中的相应转移作业。

  4. 您将转到所选转移作业的运行历史记录页面。

  5. 点击各次转移作业运行,相应的运行详情面板就会打开。

  6. 运行详情中,记下所有错误消息。在联系 Cloud Customer Care 时,您需要用到这些信息。运行详情还包括日志消息和警告。

    控制台中的“运行详情”

bq

要查看转移作业运行详情,请输入 bq show 命令并使用 --transfer_run 标志提供转移作业运行的名称。--format 标志可用于控制输出格式。

bq show \
--format=prettyjson \
--transfer_run run_name

其中:

  • run_name 是转移作业运行名称。您可以使用 bq ls 命令检索运行名称。

示例:

输入以下命令以显示转移作业运行 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7/runs/1a2b345c-0000-1234-5a67-89de1f12345g 的详情。

bq show \
--format=prettyjson \
--transfer_run \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7/runs/1a2b345c-0000-1234-5a67-89de1f12345g

要查看转移作业运行的转移作业日志消息,请输入带有 --transfer_log 标志的 bq ls 命令。您可以使用 --message_type 标志按类型过滤日志消息。

要查看特定数量的日志消息,请提供 --max_results 标志。该命令使用 --page_token 标志返回您提供的页面标记,以查看后续 n 条消息。

bq ls \
--transfer_log \
--max_results=integer \
--message_type=messageTypes:message_type \
run_name

其中:

  • integer 是要返回的日志消息数量。
  • message_type 是要查看的日志消息的类型(单个值或以英文逗号分隔的列表):
    • INFO
    • WARNING
    • ERROR
  • run_name 是转移作业运行名称。您可以使用 bq ls 命令检索运行名称。

示例:

输入以下命令以查看转移作业运行 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7/runs/1a2b345c-0000-1234-5a67-89de1f12345g 的前 2 条日志消息。

bq ls \
--transfer_log \
--max_results=2 \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7/runs/1a2b345c-0000-1234-5a67-89de1f12345g

该命令会返回下一页标记。复制页面标记并在 bq ls 命令中提供此标记,以查看接下来的 2 个结果。

bq ls \
--transfer_log \
--max_results=2 \
--page_token=AB1CdEfg_hIJKL \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7/runs/1a2b345c-0000-1234-5a67-89de1f12345g

输入以下命令以仅查看转移作业运行 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7/runs/1a2b345c-0000-1234-5a67-89de1f12345g 的错误消息。

bq ls \
--transfer_log \
--message_type=messageTypes:ERROR \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7/runs/1a2b345c-0000-1234-5a67-89de1f12345g

API

使用 projects.transferConfigs.runs.transferLogs.list 方法并通过 parent 参数提供转移作业运行的名称。

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.GetTransferRunRequest;
import com.google.cloud.bigquery.datatransfer.v1.TransferRun;
import java.io.IOException;

// Sample to get run details from transfer config.
public class RunDetails {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // runId examples:
    // `projects/{project_id}/transferConfigs/{config_id}/runs/{run_id}` or
    // `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}/runs/{run_id}`
    String runId = "MY_RUN_ID";
    runDetails(runId);
  }

  public static void runDetails(String runId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      GetTransferRunRequest request = GetTransferRunRequest.newBuilder().setName(runId).build();
      TransferRun run = dataTransferServiceClient.getTransferRun(request);
      System.out.print("Run details retrieved successfully :" + run.getName() + "\n");
    } catch (ApiException ex) {
      System.out.print("Run details not found." + ex.toString());
    }
  }
}

更新传输

添加传输后,您可以编辑传输。您可以修改在传输创建期间填充的任何字段(除外):

  • 目标数据集
  • 显示名
  • 为特定传输类型指定的任何参数
  • 运行通知设置

所需权限

要更新转移作业,您需要具备 bigquery.transfers.update 权限。预定义的 IAM 角色 bigquery.admin 包含 bigquery.transfers.update 权限。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

更新传输

更新转移作业的方法如下:

控制台

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

    进入 BigQuery 页面

  2. 点击转移作业

  3. 转移作业页面上,点击列表中的相应转移作业。

  4. 点击修改以更新转移作业配置。

bq

输入 bq update 命令,使用 --transfer_config 标志提供转移作业配置的资源名称,并指定 --display_name--params--refresh_window_days--schedule--target_dataset 标志:

bq update \
--display_name='NAME' \
--params='PARAMETERS' \
--refresh_window_days=INTEGER \
--schedule='SCHEDULE'
--target_dataset=DATASET_ID \
--transfer_config \
RESOURCE_NAME

请替换以下内容:

  • NAME:转移作业配置的显示名。
  • PARAMETERS:转移作业配置的参数(采用 JSON 格式)。例如:--params='{"param1":"param_value1"}'。您可以修改以下参数:
    • Campaign Manager:bucketnetwork_id
    • Google Ad Manager:bucketnetwork_code
    • Google Ads:customer_id
    • Google Merchant Center:merchant_id
    • Google Play:buckettable_suffix
    • 计划查询:destination_table_kms_keydestination_table_name_templatepartitioning_fieldpartitioning_typequerywrite_disposition
    • Search Ads 360:advertiser_idagency_idcustom_floodlight_variablesinclude_removed_entitiestable_filter
    • YouTube 频道:table_suffix
    • YouTube 内容所有者:content_owner_idtable_suffix
  • INTEGER:一个介于 0 到 30 之间的值。如需了解如何设置刷新时段,请参阅对应于您的转移作业类型的文档。
  • SCHEDULE:周期性安排,例如 --schedule="every 3 hours"。如需了解 schedule 语法,请参阅设置 schedule 的格式
  • DATASET_ID:转移作业配置的目标数据集。
  • RESOURCE_NAME:转移作业的资源名称(也称为转移作业配置)。如果您不知道转移作业的资源名称,您可以通过以下命令查找资源名称:bq ls --transfer_config --transfer_location=location

示例:

以下命令将更新 Google Ads 转移作业 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7 的显示名、目标数据集、刷新时段和参数:

bq update \
--display_name='My changed transfer' \
--params='{"customer_id":"123-123-5678"}' \
--refresh_window_days=3 \
--target_dataset=mydataset2 \
--transfer_config \
 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

以下命令将更新计划查询转移作业 projects/myproject/locations/us/transferConfigs/5678z567-5678-5z67-5yx9-56zy3c866vw9 的参数和时间表:

bq update \
--params='{"destination_table_name_template":"test", "write_disposition":"APPEND"}' \
--schedule="every 24 hours" \
--transfer_config \
projects/myproject/locations/us/transferConfigs/5678z567-5678-5z67-5yx9-56zy3c866vw9

API

使用 projects.transferConfigs.patch 方法并通过 transferConfig.name 参数提供转移作业的资源名称。如果您不知道转移作业的资源名称,您可以通过以下命令查找资源名称:bq ls --transfer_config --transfer_location=location。您还可以调用以下方法,并使用 parent 参数提供项目 ID 以列出所有转移作业:projects.locations.transferConfigs.list

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update transfer config.
public class UpdateTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setName(configId)
            .setDisplayName("UPDATED_DISPLAY_NAME")
            .build();
    FieldMask updateMask = FieldMaskUtil.fromString("display_name");
    updateTransferConfig(transferConfig, updateMask);
  }

  public static void updateTransferConfig(TransferConfig transferConfig, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .build();
      TransferConfig updateConfig = dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Transfer config updated successfully :" + updateConfig.getDisplayName());
    } catch (ApiException ex) {
      System.out.print("Transfer config was not updated." + ex.toString());
    }
  }
}

Python

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

from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
new_display_name = "My Transfer Config"

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)
transfer_config.display_name = new_display_name

transfer_config = transfer_client.update_transfer_config(
    {
        "transfer_config": transfer_config,
        "update_mask": field_mask_pb2.FieldMask(paths=["display_name"]),
    }
)

print(f"Updated config: '{transfer_config.name}'")
print(f"New display name: '{transfer_config.display_name}'")

设置回填和刷新运行

刷新

请注意,数据回填功能不适用于以下类型的传输。但是,您可以设置刷新运行。

补余广告

您可以随时手动启动数据回填。除了源限制之外,BigQuery Data Transfer Service 为每项回填请求提供最长 180 天的支持。该服务不支持多项同时回填请求。

如需了解可以回填的数据量,请参阅您的数据源对应的文档:

  • Amazon S3
  • Campaign Manager
  • Cloud Storage
  • 数据集副本
  • Google Ad Manager
  • Google Ads(以前称为 AdWords)
    • 为 Google Ads 设置数据回填后,系统会每天获取一次匹配表的快照,并将其存储在与最近运行日期对应的分区中。 如果安排了数据回填,则系统不会更新以下表的匹配表快照:
      • Ad
      • AdGroup
      • AgeRange
      • Audience
      • BidGoal
      • Budget
      • Campaign
      • Criteria
      • Customer
      • Gender
      • Keyword
      • LocationBasedCampaignCriterion
      • ParentalStatus
      • Placement
      • Video
  • Google Ads(预览版)
  • Google Merchant Center
  • Google Play
  • 计划查询
  • Search Ads 360
    • 为 Search Ads 360 设置数据回填后,系统会每天截取一次匹配表的快照,并将其存储在与最近运行日期对应的分区中。如果安排了数据回填,则系统不会更新以下表的匹配表快照:
      • Account
      • Ad
      • Advertiser
      • AdGroup
      • AdGroupTarget
      • BidStrategy
      • Campaign
      • CampaignTarget
      • FeedItem
      • FloodlightActivity
      • Keyword
      • NegativeAdGroupKeyword
      • NegativeAdGroupTarget
      • NegativeCampaignKeyword
      • NegativeCampaignTarget
      • ProductAdvertised
      • ProductGroup
      • ProductLeadAndCrossSellFloodlightStats
      • Video
      • Placement
      • Video
  • YouTube 频道
  • YouTube 内容所有者
  • TeraData
  • Amazon Redshift

请注意,数据回填功能不适用于 Cloud Storage 传输作业。但是,您可以设置 Cloud Storage 转移作业的刷新运行

所需权限

要安排回填,您需要具备 bigquery.transfers.update 权限。预定义的 IAM 角色 bigquery.admin 包含 bigquery.transfers.update 权限。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

安排回填

安排回填的方法如下:

控制台

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

    进入 BigQuery 页面

  2. 点击转移作业

  3. 转移作业页面上,点击列表中的相应转移作业。

  4. 点击更多菜单,然后选择安排回填

  5. 安排回填对话框中,选择开始日期结束日期

    设置刷新日期

bq

输入 bq mk 命令,提供 --transfer_run 标志并指定 --start_time--end_time

bq mk \
--transfer_run \
--start_time='start_time' \
--end_time='end_time' \
resource_name

其中:

  • start_timeend_time 是以 Z 结尾或包含有效时区偏移量的时间戳。例如:

    • 2017-08-19T12:11:35.00Z
    • 2017-05-25T00:00:00+00:00
  • resource_name 是转移作业的资源名称(也称为转移作业配置)。如果您不知道转移作业的资源名称,您可以通过以下命令查找资源名称:bq ls --transfer_config --transfer_location=location

示例:

输入以下命令,以安排转移作业配置 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7 的回填。

bq mk \
--transfer_run \
--start_time 2017-05-25T00:00:00Z \
--end_time 2017-05-25T00:00:00Z \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

使用 projects.locations.transferConfigs.startManualRuns 方法并通过 parent 参数提供转移作业配置资源。

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsRequest;
import com.google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsResponse;
import com.google.protobuf.Timestamp;
import java.io.IOException;
import org.threeten.bp.Clock;
import org.threeten.bp.Instant;
import org.threeten.bp.temporal.ChronoUnit;

// Sample to run schedule back fill for transfer config
public class ScheduleBackFill {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    Clock clock = Clock.systemDefaultZone();
    Instant instant = clock.instant();
    Timestamp startTime =
        Timestamp.newBuilder()
            .setSeconds(instant.minus(5, ChronoUnit.DAYS).getEpochSecond())
            .setNanos(instant.minus(5, ChronoUnit.DAYS).getNano())
            .build();
    Timestamp endTime =
        Timestamp.newBuilder()
            .setSeconds(instant.minus(2, ChronoUnit.DAYS).getEpochSecond())
            .setNanos(instant.minus(2, ChronoUnit.DAYS).getNano())
            .build();
    scheduleBackFill(configId, startTime, endTime);
  }

  public static void scheduleBackFill(String configId, Timestamp startTime, Timestamp endTime)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ScheduleTransferRunsRequest request =
          ScheduleTransferRunsRequest.newBuilder()
              .setParent(configId)
              .setStartTime(startTime)
              .setEndTime(endTime)
              .build();
      ScheduleTransferRunsResponse response = client.scheduleTransferRuns(request);
      System.out.println("Schedule backfill run successfully :" + response.getRunsCount());
    } catch (ApiException ex) {
      System.out.print("Schedule backfill was not run." + ex.toString());
    }
  }
}

Python

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

import datetime

from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
now = datetime.datetime.now(datetime.timezone.utc)
start_time = now - datetime.timedelta(days=5)
end_time = now - datetime.timedelta(days=2)

# Some data sources, such as scheduled_query only support daily run.
# Truncate start_time and end_time to midnight time (00:00AM UTC).
start_time = datetime.datetime(
    start_time.year, start_time.month, start_time.day, tzinfo=datetime.timezone.utc
)
end_time = datetime.datetime(
    end_time.year, end_time.month, end_time.day, tzinfo=datetime.timezone.utc
)

response = transfer_client.schedule_transfer_runs(
    parent=transfer_config_name,
    start_time=start_time,
    end_time=end_time,
)

print("Started transfer runs:")
for run in response.runs:
    print(f"backfill: {run.run_time} run: {run.name}")

更新凭据

传输使用创建该传输的用户的凭据。如果您需要更改附加到某项传输配置的用户,则可以更新传输的凭据。如果创建传输的用户不再与贵组织合作,这种做法非常有用。

所需权限

要更新凭据,您需要具备 bigquery.transfers.update 权限。预定义的 IAM 角色 bigquery.admin 包含 bigquery.transfers.update 权限。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

更新转移作业的凭据

更新转移作业凭据的方法如下:

控制台

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

    进入 BigQuery 页面

  2. 点击转移作业

  3. 转移作业页面上,点击列表中的相应转移作业。

  4. 点击更多菜单,然后选择刷新凭据 (Refresh credentials)。

  5. 登录您的 Google 帐号,点击允许以授予 BigQuery Data Transfer Service 权限,使其能够查看您的报告数据以及在 BigQuery 中访问和管理数据。

bq

输入 bq update 命令,使用 --transfer_config 标志提供转移作业配置的资源名称,并指定 --update_credentials 标志。

bq update \
--update_credentials=boolean \
--transfer_config \
resource_name

其中:

  • boolean 是一个布尔值,指示是否应为转移作业配置更新凭据。
  • resource_name 是转移作业的资源名称(也称为转移作业配置)。如果您不知道转移作业的资源名称,您可以通过以下命令查找资源名称:bq ls --transfer_config --transfer_location=location

示例:

输入以下命令,以更新 Google Ads 转移作业 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7 的凭据。

bq update \
--update_credentials=true \
--transfer_config \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

使用 projects.transferConfigs.patch 方法并提供 authorizationCodeupdateMask 参数。

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update credentials in transfer config.
public class UpdateCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    String serviceAccount = "MY_SERVICE_ACCOUNT";
    TransferConfig transferConfig = TransferConfig.newBuilder().setName(configId).build();
    FieldMask updateMask = FieldMaskUtil.fromString("service_account_name");
    updateCredentials(transferConfig, serviceAccount, updateMask);
  }

  public static void updateCredentials(
      TransferConfig transferConfig, String serviceAccount, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .setServiceAccountName(serviceAccount)
              .build();
      dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Credentials updated successfully");
    } catch (ApiException ex) {
      System.out.print("Credentials was not updated." + ex.toString());
    }
  }
}

Python

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

from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"
transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)

transfer_config = transfer_client.update_transfer_config(
    {
        "transfer_config": transfer_config,
        "update_mask": field_mask_pb2.FieldMask(paths=["service_account_name"]),
        "service_account_name": service_account_name,
    }
)

print("Updated config: '{}'".format(transfer_config.name))

停用传输

停用转移作业时,disabled 会添加到转移作业名称。停用转移作业时,系统不会安排新的转移作业运行,也不允许新的回填。任何正在进行的转移作业运行均会完成。

停用转移作业不会移除已转移到 BigQuery 的任何数据。除非删除数据集删除表,否则您需要为之前转移的数据支付标准 BigQuery 存储费用

所需权限

要停用转移作业,您需要具备 bigquery.transfers.update 权限。预定义的 IAM 角色 bigquery.admin 包含 bigquery.transfers.update 权限。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

停用转移作业

停用转移作业的方法如下:

控制台

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

    转到 BigQuery

  2. 点击转移作业

  3. 转移作业页面上,点击列表中要停用的转移作业。

  4. 点击停用。要重新启用转移作业,请点击启用

bq

CLI 不支持停用转移作业。

API

使用 projects.locations.transferConfigs.patch 方法并在 projects.locations.transferConfig 资源中将 disabled 设置为 true

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to disable transfer config.
public class DisableTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    TransferConfig transferConfig =
        TransferConfig.newBuilder().setName(configId).setDisabled(true).build();
    FieldMask updateMask = FieldMaskUtil.fromString("disabled");
    disableTransferConfig(transferConfig, updateMask);
  }

  public static void disableTransferConfig(TransferConfig transferConfig, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .build();
      TransferConfig updateConfig = dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Transfer config disabled successfully :" + updateConfig.getDisplayName());
    } catch (ApiException ex) {
      System.out.print("Transfer config was not disabled." + ex.toString());
    }
  }
}

重新启用转移作业:

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

/*
 * Copyright 2020 Google LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.example.bigquerydatatransfer;

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to disable transfer config.
public class DisableTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    TransferConfig transferConfig =
        TransferConfig.newBuilder().setName(configId).setDisabled(true).build();
    FieldMask updateMask = FieldMaskUtil.fromString("disabled");
    disableTransferConfig(transferConfig, updateMask);
  }

  public static void disableTransferConfig(TransferConfig transferConfig, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .build();
      TransferConfig updateConfig = dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Transfer config disabled successfully :" + updateConfig.getDisplayName());
    } catch (ApiException ex) {
      System.out.print("Transfer config was not disabled." + ex.toString());
    }
  }
}

删除传输

删除传输时,系统不会安排新的传输运行。任何正在进行的传输运行均会停止。

删除传输不会移除已传输至 BigQuery 的任何数据。除非删除数据集删除表,否则您需要为之前转移的数据支付标准 BigQuery 存储费用

所需权限

要删除转移作业,您需要具备 bigquery.transfers.update 权限。预定义的 IAM 角色 bigquery.admin 包含 bigquery.transfers.update 权限。

如需详细了解 BigQuery Data Transfer Service 中的 IAM 角色,请参阅访问权限控制

删除转移作业

删除转移作业的方法如下:

控制台

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

    转到 BigQuery

  2. 点击转移作业

  3. 转移作业页面上,点击列表中要删除的转移作业。

  4. 点击删除。为安全起见,您需要在框中输入“delete”一词以确认您的意图。

bq

输入 bq rm 命令并提供转移作业配置的资源名称。您可以使用 -f 标志在不经确认的情况下删除转移作业配置。

bq rm \
-f \
--transfer_config \
resource_name

其中:

例如,输入以下命令可删除转移作业配置 projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

bq rm \
--transfer_config \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

使用 projects.locations.transferConfigs.delete 方法并通过 name 参数提供要删除的资源。

Java

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

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.DeleteTransferConfigRequest;
import java.io.IOException;

// Sample to delete a transfer config
public class DeleteTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // i.e projects/{project_id}/transferConfigs/{config_id}` or
    // `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`
    String configId = "MY_CONFIG_ID";
    deleteTransferConfig(configId);
  }

  public static void deleteTransferConfig(String configId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      DeleteTransferConfigRequest request =
          DeleteTransferConfigRequest.newBuilder().setName(configId).build();
      dataTransferServiceClient.deleteTransferConfig(request);
      System.out.println("Transfer config deleted successfully");
    } catch (ApiException ex) {
      System.out.println("Transfer config was not deleted." + ex.toString());
    }
  }
}

Python

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

import google.api_core.exceptions
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
try:
    transfer_client.delete_transfer_config(name=transfer_config_name)
except google.api_core.exceptions.NotFound:
    print("Transfer config not found.")
else:
    print(f"Deleted transfer config: {transfer_config_name}")

日志记录和监控

BigQuery Data Transfer Service 会将日志和指标导出到 Cloud Logging 和 Cloud Monitoring,以便向您的转移作业提供监测功能。如需详细了解 BigQuery Data Transfer Service 日志记录和监控,请参阅审核日志Cloud LoggingCloud Monitoring