从 Teradata 迁移数据

结合使用 BigQuery Data Transfer Service 和特殊迁移代理,您可以将数据从 Teradata 本地数据仓库实例复制到 BigQuery。本文档介绍了使用 BigQuery Data Transfer Service 从 Teradata 迁移数据的分步过程。

开始前须知

为了确保成功迁移 Teradata 数据仓库,必须满足下列前提条件。

Google Cloud 要求

  1. 选择或创建 Google Cloud 项目以存储迁移数据。

    • 在 Google Cloud Console 中,转到项目选择器页面。

      转到“项目选择器”

    • 选择或创建 Google Cloud 项目。

  2. 启用这些 Google Cloud API。

    控制台

    在 Cloud Console 中,点击以下两个页面上的启用按钮。

    新项目中会自动启用 BigQuery。对于现有项目,您可能需要启用 BigQuery API。

    示例:

    启用 API。

    绿色对勾标记表示您已启用了 API。

    已启用 API。

    gcloud

    您可以选择使用 Google Cloud CLI 启用 API。

    您可以在 Cloud Shell 中发出 gcloud 命令,也可以下载 gcloud CLI 并将其安装在本地机器上,如下所示:

    • 必须安装 Java 8 才能运行 gcloud CLI。使用此链接进行下载。
    • 必须安装初始化 Google Cloud CLI。

    输入以下 gcloud 命令:

    gcloud services enable bigquerydatatransfer.googleapis.com
    gcloud services enable storage-component.googleapis.com
    gcloud services enable pubsub.googleapis.com
    

    新项目中会自动启用 BigQuery。对于现有项目,还要启用 BigQuery API。

    gcloud services enable bigquery.googleapis.com
    
  3. 确保创建转移作业的正文对正在创建转移作业的项目具备以下角色/权限:

    权限/角色 原因
    roles/logging.viewer 为了让客户能够查看 BigQuery Data Transfer Service 和 Migration Agent 发布的日志。
    bigquery.dataset.create 让客户能够为迁移数据创建目标 BigQuery 数据集。
    bigquery.jobs.create 为了让 Data Transfer Service(代表客户)创建 BigQuery 加载作业,以便加载迁移代理提取的 Google Cloud Storage 中存储的 CSV/Avro 文件。
    bigquery.jobs.get 对于 Data Transfer Service(代表客户),检查加载作业的状态。
    bigquery.jobs.listAll 让客户能够列出提交到 BigQuery 的所有加载作业。
    bigquery.transfers.get 为了让客户和 Data Transfer Service 能够获取转移作业配置和转移作业运行。
    bigquery.transfers.update 为了让客户和 Data Transfer Service 能够更新转移作业配置和转移作业运行。
    storage.buckets.create 让客户能够创建 Google Cloud Storage 存储分区,数据文件将在迁移过程中进行暂存。
    storage.buckets.get 让客户能够查看 Google Cloud Storage 暂存存储分区和数据文件。
    storage.buckets.list 让客户能够列出用于迁移的 Google Cloud Storage 存储分区。

  4. 创建 BigQuery 数据集来存储数据。您不需要创建任何表。

  5. 创建 Identity and Access Management (IAM) 服务帐号。如需了解如何创建服务帐号,请参阅创建和管理服务帐号

  6. 向服务帐号授予运行转移作业的项目的以下权限。 请参阅向服务帐号授予角色

    权限/角色 原因
    bigquery.transfers.get 供迁移代理获取转移作业配置的详细信息。
    storage.objects.create 允许迁移代理将 Teradata 数据文件存储在 Google Cloud Storage 中以供暂存。
    storage.objects.get 让迁移代理能够提取 Google Cloud Storage 中存储的自定义架构文件。
    storage.objects.list 让迁移代理能够验证 Google Cloud Storage 中的权限。

  7. 创建 Cloud Storage 存储分区以便暂存数据。您稍后将在迁移过程中使用此存储分区名称。

本地要求

  1. 本地机器要求
    • 迁移代理使用与 Teradata 实例和 Google Cloud API 的 JDBC 连接。确保网络访问不被防火墙阻止。
    • 确保已安装 Java Runtime Environment 8 或更高版本。
    • 确保您拥有暂存空间要求中所建议的最小大小的存储空间。
  2. Teradata 连接详细信息
    • 对系统表和要迁移的表具有读取访问权限的用户的用户名和密码。
    • 用于连接到 Teradata 实例的主机名和端口号。
  3. 从 Teradata 下载所需的 JDBC 驱动程序:
  4. 下载您的 Google Cloud 凭据。

VPC Service Controls 要求

将 BigQuery Data Transfer Service 管理的 Google Cloud 项目(项目编号:990232121269)添加到 VPC Service Controls 边界中的出站规则

在本地运行的代理与 BigQuery Data Transfer Service 之间的通信渠道通过为每个转移主题发布 Pub/Sub 消息来实现。BigQuery Data Transfer Service 需要向代理发送命令以提取数据,并且代理需要将消息发布回 BigQuery Data Transfer Service 以更新状态并返回数据提取响应。

转移模式和选项

由于每次迁移都有各自特定的要求,您可以通过以下方式自定义迁移代理。设置从 Teradata 到 BigQuery 的数据转移作业时,有以下三项重要选择:

提取方法

BigQuery Data Transfer Service 支持两种不同的提取方法,使用这两种方法都可将数据从 Teradata 转移到 BigQuery:

  1. 搭配使用 JDBC 驱动程序和 FastExport 连接进行提取。在此模式下,系统会将一个表提取到本地文件系统上指定位置的 AVRO 文件集合。提取的文件随后将上传到指定的 Cloud Storage 存储分区。成功转移后,系统会从本地文件系统中删除这些文件。
    • 本地文件系统中的空间量存在严格的强制限制,且在上传提取的文件到从本地文件系统删除这些文件期间,都将暂停提取作业。
    • 如果本地存储空间存在严格的限制或 TPT 不可用,请使用此提取方法。
    • 搭配使用 JDBC 驱动程序和 FastExport 是默认的提取方法。
  2. 使用 Teradata Parallel Transporter (TPT) tbuild 实用程序进行提取。在此模式下,代理会尝试使用按分区分布的行来计算提取批次。对于每个批次,系统都会发出并执行一个 TPT 提取脚本,从而生成一组以竖线分隔的文件。每次批量提取后,文件都会上传到指定的 Cloud Storage 存储分区并从本地文件系统中删除。由于此方法对本地文件系统中的空间量没有强制施加限制,因此请确保本地文件系统的空间足以提取 Teradata 表中的最大分区。
    • 我们建议您使用 TPT 进行提取并自定义架构以指示分区列。因为此方式的数据提取速度最快。

请参阅逐步设置设置说明的迁移代理的配置部分,详细了解如何指定提取方法。

自定义架构文件

架构文件是描述数据库对象的 JSON 文件。架构包含一组数据库,每个数据库包含一组表,每个表包含一组数据列。每一列都具有一个类型字段 - BigQuery 中的一列分配一个类型。

在架构文件中,每个对象都有一个 name 字段,该字段是在 BigQuery 中分配给它的名称。每个对象还具有 originalName 字段,即 Teradata 数据库中匹配对象的名称。

在从 Teradata 到 BigQuery 的数据转移期间,BigQuery Data Transfer Service 提供自动架构检测和数据转换。您还可以选择指定自定义架构文件。在某些情况下,我们强烈建议您自定义架构。示例:

  • 自定义架构文件尤其适用于包含表的额外信息(例如分区)。如果没有指定架构文件,此类信息可能会在迁移过程中丢失。
  • 您可以选择提供自定义架构文件,以便在数据转移期间进行字段转换(例如任何对象的名称字段或任何列的 usageType 数组)。
  • 如需了解详情,请参阅 Teradata 迁移详情和选项

按需转移或增量转移

将数据从 Teradata 数据库实例迁移到 BigQuery 时,BigQuery Data Transfer Service 同时支持一次性快照数据传输(按需转移)和定期定期更新(包括新增行和增量行)(增量转移)。您可以在设置转移作业时,在时间表选项中指定按需转移或增量转移。

  • 按需转移数据
    • 如果您的表非常大并且您可以使用 TPT 提取数据以提高性能,我们建议您对 Teradata 表进行分区以便允许按分区进行提取。如需了解详情,请参阅 Teradata 迁移详情和选项
    • 如果您的表很小或者您无法使用 TPT,请按照基本说明操作。架构自定义不是必需的。
  • 增量转移数据
    • 如果您希望定期从 Teradata 向 BigQuery 迁移更改,可以使用增量模式。系统会定期重复将来自 Teradata 的新记录和更改记录附加到 BigQuery 表中。
    • 此方法要求您自定义架构以为 COMMIT_TIMESTAMP 列添加注释。
    • 设置增量转移时,需要满足某些条件。如需了解详情,请参阅增量转移

设置 Teradata 迁移

本部分介绍如何逐步设置从 Teradata 到 BigQuery 的数据迁移。具体步骤包括:

  • 下载迁移代理。
  • 设置 BigQuery Data Transfer Service 转移作业。
  • 初始化迁移代理。
  • 运行迁移代理。

下载迁移代理

使用此链接将迁移代理下载到可以连接到数据仓库的机器。

安装迁移代理后,您需要设置 BigQuery Data Transfer Service 转移,初始化迁移代理,然后运行该代理以开始数据迁移。

设置转移作业

使用 BigQuery Data Transfer Service 创建转移作业。

控制台

  1. 在 Cloud Console 中,转到 BigQuery 页面。

    转到 BigQuery 页面

  2. 点击转移作业

  3. 点击创建转移作业

  4. 来源类型下:

    • 选择迁移:Teradata
    • 对于转移作业配置名称,请输入转移作业的显示名,例如 My Migration。显示名可以是任何容易辨识的值,让您以后在需要修改转移作业时时能够轻松识别。
    • (可选)对于时间表选项,您可以保留默认值每天(基于创建时间)或选择其他时间。
    • 目标设置部分,选择相应的数据集。

      新的 Teradata 迁移一般信息。

  5. 数据源详细信息下,继续设置 Teradata 转移作业的特定详细信息。

    • 对于数据库类型,选择 Teradata
    • 对于 Cloud Storage 存储分区,请浏览 Cloud Storage 存储分区的名称以暂存迁移数据。请勿输入前缀 gs:// - 请仅输入存储分区名称。
    • 对于数据库名称,请输入 Teradata 中源数据库的名称。
    • 对于表名模式,请输入与源数据库中的表名匹配的模式。您可以使用正则表达式指定模式。此模式应遵循 Java 正则表达式语法。
    • 对于服务帐号电子邮件地址,输入附加到您创建的 IAM 服务帐号的电子邮件地址。
    • (可选)对于架构文件路径,请输入 JSON 架构文件的路径和文件名。如果未输入任何架构文件,BigQuery 将使用正在转移的源数据自动检测表架构。您可以创建自己的架构文件,如以下屏幕截图示例所示,也可以使用迁移代理来帮助您创建架构文件。如需了解如何创建架构文件,请参阅初始化迁移代理部分。

      新的 Teradata 迁移

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

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

        Pub/Sub 主题

  6. 点击保存

  7. Cloud Console 会显示所有转移作业设置详细信息,包括此转移作业的资源名称。请记下此资源名称,因为稍后在运行迁移代理时需要输入该名称。

    转移确认

bq

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

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

地点:

  • project ID 是您的项目 ID。如果未提供 --project_id 来指定具体项目,则系统会使用默认项目。
  • dataset 是您要为转移作业配置指定的数据集 (--target_dataset)。
  • name 是转移作业配置的显示名 (--display_name)。转移作业的显示名可以是任何容易辨识的值,让您以后在需要修改转移作业时能够轻松识别。
  • parameters 包含所创建转移作业配置的参数 (--params),采用 JSON 格式,例如:--params='{"param":"param_value"}'
    • 对于 Teradata 迁移,以下参数是必需的:bucketdatabase_typeagent_service_accountdatabase_nametable_name_patterns
      • bucket 是将在迁移过程中充当暂存区域的 Cloud Storage 存储分区。
      • database_type 是 Teradata。
      • agent_service_account 是与您创建的服务帐号关联的电子邮件地址。
      • database_name 是 Teradata 中源数据库的名称。
      • table_name_patterns 是用于匹配源数据库中表名的模式。您可以使用正则表达式指定模式。此模式应遵循 Java 正则表达式语法。
  • data_source 是数据源 (--data_source):on_premises

例如,以下命令使用 Cloud Storage 存储分区 mybucket 和目标数据集 mydataset 创建名为 My Transfer 的 Teradata 转移作业。转移作业将从 Teradata 数据仓库 mydatabase 迁移所有表,可选架构文件为 myschemafile.json

bq mk \
--transfer_config \
--project_id=123456789876 \
--target_dataset=MyDataset \
--display_name='My Migration' \
--params='{"bucket": "mybucket", "database_type": "Teradata",
"database_name":"mydatabase", "table_name_patterns": ".*",
"agent_service_account":"myemail@mydomain.com", "schema_file_path":
"gs://mybucket/myschemafile.json"}' \
--data_source=on_premises

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

[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 teradata transfer config.
public class CreateTeradataTransfer {

  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 databaseType = "Teradata";
    String bucket = "cloud-sample-data";
    String databaseName = "MY_DATABASE_NAME";
    String tableNamePatterns = "*";
    String serviceAccount = "MY_SERVICE_ACCOUNT";
    String schemaFilePath = "/your-schema-path";
    Map<String, Value> params = new HashMap<>();
    params.put("database_type", Value.newBuilder().setStringValue(databaseType).build());
    params.put("bucket", Value.newBuilder().setStringValue(bucket).build());
    params.put("database_name", Value.newBuilder().setStringValue(databaseName).build());
    params.put("table_name_patterns", Value.newBuilder().setStringValue(tableNamePatterns).build());
    params.put("agent_service_account", Value.newBuilder().setStringValue(serviceAccount).build());
    params.put("schema_file_path", Value.newBuilder().setStringValue(schemaFilePath).build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Teradata Config Name")
            .setDataSourceId("on_premises")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    createTeradataTransfer(projectId, transferConfig);
  }

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

迁移代理

您可以选择直接通过迁移代理在初始化迁移代理部分中创建转移作业。

如需从迁移代理创建转移作业,首先需要向您创建的服务帐号授予 IAM 角色 serviceAccessTokenCreator

您可以通过以下两种方式之一授予 IAM 角色:

  • 在 Cloud Console 中,授予以下 IAM 角色:Service Account Token Creator。请参阅向服务帐号授予角色

  • 您可以在 Cloud Shell 或 Google Cloud CLI 中发出以下 gcloud 命令:

gcloud projects add-iam-policy-binding user_project_id \
--member='serviceAccount:service-user_project_number@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com' \
--role='roles/iam.serviceAccountTokenCreator'

向服务帐号授予 serviceAccessTokenCreator 权限后,您可以继续下载迁移代理,然后在初始化步骤中设置转移作业。

初始化迁移代理

首次启动数据迁移时,请初始化迁移代理。每次设置迁移转移作业时(无论是否为定期作业),都只需要进行一次初始化。

此会话不会启动迁移;仅用于初始配置。

  1. 打开一个新会话。在命令行上,发出命令以运行 jar 文件,并带有一些特定的标志,形式如下:

    java -cp \
    OS-specific-separated-paths-to-jars (JDBC and agent) \
    com.google.cloud.bigquery.dms.Agent \
    --initialize
    

    Unix、Linux、Mac OS

    java -cp \
    /usr/local/migration/Teradata/JDBC/terajdbc4.jar:/usr/local/migration/mirroring-agent.jar \
    com.google.cloud.bigquery.dms.Agent \
    --initialize
    

    Windows

    将所有文件复制到 C:\migration 文件夹中(或调整命令中的路径),然后运行以下命令:

    java -cp C:\migration\tdgssconfig.jar;C:\migration\terajdbc4.jar;C:\migration\mirroring-agent.jar com.google.cloud.bigquery.dms.Agent --initialize
    
  2. 出现提示时,输入以下参数:

    • 是否要将 Teradata Parallel Transporter (TPT) 模板保存到磁盘。如果计划使用 TPT 提取方法,则可以使用适合 Teradata 实例的参数修改保存的模板。
    • 源数据库的 URI。如果需要,请添加端口号。
    • 用于迁移的本地暂存空间的路径。确保您拥有暂存空间要求中所建议的最小大小的存储空间。
    • 是否使用 Teradata Parallel Transporter (TPT) 作为提取方法。
    • (可选)数据库凭据文件的路径。
  3. 当系统提示您输入 BigQuery Data Transfer Service 资源名称时:

    您可以输入在 Cloud Console 中配置的转移作业的资源名称,此时也可以通过迁移代理本身创建转移作业。(可选)您可以使用迁移代理初始化命令来创建架构文件。如需了解此选项,请参阅下面的迁移代理标签页。

    控制台

    设置转移作业部分的“控制台”标签页中输入您之前设置的转移作业的资源名称

    迁移代理

    • 输入 Google Cloud 项目 ID。
    • 输入 Teradata 中源数据库的名称。
    • 输入与源数据库中的表名匹配的模式。您可以使用正则表达式指定模式。此模式应遵循 Java 正则表达式语法。
    • 可选:输入本地 JSON 架构文件的路径(建议用于周期性转移)。此架构文件将上传到您的 Cloud Storage 存储分区。
      • 选择创建新架构文件。在这种情况下,系统会提示您输入 Teradata 用户名和密码,代理将生成一个采用转换后架构的 JSON 文件。系统将按照以下格式在本地文件夹中创建文件:<localpath>/schema/DO_NOT_REMOVE_td2bq_table_schemas_<string>.json。上传到 Cloud Storage 存储分区后,路径和文件名将遵循此模式:gs://mybucket/myproject_id/schema/DO_NOT_REMOVE_td2bq_table_schemas_<string>.json
      • 修改架构文件以标记分区、聚类、主键和更改跟踪列,并验证您是否希望将此架构用于转移作业配置。如需获取提示,请参阅自定义架构文件部分。
    • 输入 BigQuery 中目标数据集的名称。
    • 输入 Cloud Storage 存储分区的名称,迁移数据将在加载到 BigQuery 之前暂存在该存储分区中。
    • 输入转移作业配置的名称。
  4. 输入所有请求的参数后,迁移代理将创建一个配置文件,并将其放入参数中所提供的本地路径中。如需详细了解配置文件,请参阅下一部分。

迁移代理的配置文件

在初始化步骤中创建的配置文件将类似于以下示例:


{
  "agent-id": "81f452cd-c931-426c-a0de-c62f726f6a6f",
  "transfer-configuration": {
    "project-id": "123456789876",
    "location": "us",
    "id": "61d7ab69-0000-2f6c-9b6c-14c14ef21038"
  },
  "source-type": "teradata",
  "console-log": false,
  "silent": false,
  "teradata-config": {
    "connection": {
      "host": "localhost"
    },
    "local-processing-space": "extracted",
    "database-credentials-file-path": "",
    "max-local-storage": "200GB",
    "gcs-upload-chunk-size": "32MB",
    "use-tpt": true,
    "max-sessions": 0,
    "spool-mode": "NoSpool",
    "max-parallel-upload": 4,
    "max-parallel-extract-threads": 1,
    "session-charset": "UTF8",
    "max-unload-file-size": "2GB"
  }
}
   

迁移代理配置文件的所有选项

  • transfer-configuration:有关 BigQuery Data Transfer Service 中此转移作业配置的信息。
  • teradata-config:特定于此 Teradata 提取的信息:

    • connection:主机名和端口的相关信息
    • local-processing-space:代理将表数据提取到的提取文件夹,后面会再将其上传到 Cloud Storage。
    • database-credentials-file-path:(可选)包含自动连接到 Teradata 数据库的凭据的文件路径。该文件应包含两行,例如:
      username=abc
      password=123
      
      使用凭据文件时,请注意控制对本地文件系统上存储该文件的文件夹的访问权限,因为它不会被加密。如果未提供路径,则启动代理时系统将提示您输入用户名和密码。
    • max-local-storage:在指定暂存目录中用于提取的本地存储空间上限。默认值为 200GB。支持的格式是:numberKB|MB|GB|TB

      在所有提取模式下,文件在上传到 Cloud Storage 后都会从本地暂存目录中删除。

      所需的实际暂存空间量取决于提取方法:

      • 在默认提取方法(带 FastExport 的 JDBC 驱动程序)中,系统会写入小块数据并将其不断上传到您指定的 Cloud Storage 存储分区。当达到指定的 max_local_storage 限制时,提取会暂停。
      • 在采用 Teradata Parallel Transporter (TPT) 提取且没有分区列时,将提取整个表,而不考虑 max_local_storage 设置。
      • 在采用 Teradata Parallel Transporter (TPT) 提取且具有分区列时,代理将提取分区集。暂存存储空间要求不超过 max_local_storage 或表的最大分区(提取为 CSV 格式)的大小的较大者。
    • use-tpt:指示迁移代理使用 Teradata Parallel Transporter (TPT) 作为提取方法。

      对于每个表,迁移代理都会生成 TPT 脚本、启动 tbuild 进程并等待完成。tbuild 进程完成后,代理会列出提取的文件并将其上传到 Cloud Storage,然后删除 TPT 脚本。

      如需使用 TPT 提取方法,请执行以下操作:

      • tbuild 实用程序应该已安装完毕,可供迁移代理使用并启动 tbuild 进程。
      • 本地提取文件夹应具有足够的空间可提取 CSV 格式的最大表的分区。由于格式设置问题,CSV 文件将大于 Teradata 中原始表的大小。
    • max-sessions:指定导出作业(FastExport 或 TPT)使用的会话数上限。如果设置为 0,则 Teradata 数据库将会决定每个导出作业的会话数上限。

    • gcs-upload-chunk-size:大文件以块的形式上传到 Cloud Storage。此参数与 max-parallel-upload 结合使用,用于控制同时将数据上传到 Cloud Storage 的方式。例如,如果 gcs-upload-chunk-size 为 64 MB,max-parallel-upload 为 10 MB,那么从理论上讲,迁移代理可以同时上传 640 MB (64 MB * 10) 的数据。如果数据块无法上传,则必须重试整个数据块。数据块大小必须很小。

    • max-parallel-uploads:此值确定迁移代理用于将文件上传到 Cloud Storage 的最大线程数。一般经验法则是:根据运行代理的机器中的核心数量选择该值。因此,如果您有 n 个核心,则最佳线程数应为 n。如果核心是超线程,则最佳数量应为 (2 * n)。在调整 max-parallel-uploads 时,您还必须考虑其他设置,例如网络带宽。调整此参数可以提高上传到 Cloud Storage 的性能。

    • spool-mode:在大多数情况下,NoSpool 模式是最佳选项。 NoSpool 是代理配置中的默认值。如果您遇到任何 NoSpool 缺点,则可以更改此参数。

    • max-unload-file-size:决定提取的文件大小上限。不强制 TPT 提取使用此参数。

    • max-parallel-extract-threads:此配置仅在 FastConnect 模式下使用。它用于确定用于从 Teradata 提取数据的并行线程数。调整此参数可以提高提取性能。

    • tpt-template-path:使用此配置提供自定义 TPT 提取脚本作为输入。您可以使用此参数将转换应用于迁移数据。

    • schema-mapping-rule-path:(可选)包含架构映射以替换默认映射规则的配置文件的路径

      示例:从 Teradata 类型 TIMESTAMP 到 BigQuery 类型 DATETIME 的映射:

      {
      "rules": [
        {
          "database": {
              "name": "database.*",
              "tables": [
                 {
                   "name": "table.*"
                 }
              ]
          },
          "match": {
            "type": "COLUMN_TYPE",
            "value": "TIMESTAMP"
          },
          "action": {
            "type": "MAPPING",
            "value": "DATETIME"
          }
        }
      ]
      }
      

      属性:

      • database(可选)name 是要包含的数据库的正则表达式。默认情况下,包含所有数据库。
      • tables:(可选)包含表数组。name 是要包含的表的正则表达式。默认情况下,所有表都包含在内。
      • match:(必需)
        • type 支持的值:COLUMN_TYPE
        • value 支持的值:TIMESTAMPDATETIME
      • action:(必需)
        • type 支持的值:MAPPING
        • value 支持的值:TIMESTAMPDATETIME

运行迁移代理

初始化迁移代理并创建配置文件后,请使用以下步骤来运行代理并开始迁移:

  1. 使用 JDBC 驱动程序的类路径和上一个初始化步骤中创建的配置文件的路径开始运行代理。

    java -cp \
    OS-specific-separated-paths-to-jars (JDBC and agent) \
    com.google.cloud.bigquery.dms.Agent \
    --configuration-file=path to configuration file
    

    Unix、Linux、Mac OS

    java -cp \
    /usr/local/migration/Teradata/JDBC/tdgssconfig.jar:/usr/local/migration/Teradata/JDBC/terajdbc4.jar:mirroring-agent.jar \
    com.google.cloud.bigquery.dms.Agent \
    --configuration-file=config.json
    

    Windows

    将所有文件复制到 C:\migration 文件夹中(或调整命令中的路径),然后运行以下命令:

    java -cp C:\migration\tdgssconfig.jar;C:\migration\terajdbc4.jar;C:\migration\mirroring-agent.jar com.google.cloud.bigquery.dms.Agent --configuration-file=config.json
    

    如果您已准备好继续迁移,请按 Enter 键,代理会在初始化期间提供的类路径有效时继续运行。

  2. 出现提示时,输入用于数据库连接的用户名和密码。如果用户名和密码有效,则数据迁移便会开始。

    可选:在开始迁移的命令中,您还可以使用标志将凭据文件传递给代理,而不是每次都输入用户名和密码。如需了解详情,请参阅代理配置文件中的可选参数 database-credentials-file-path。使用凭据文件时,请采取适当的步骤来控制对本地文件系统上存储该文件的文件夹的访问,因为它不会被加密。

  3. 保持此会话的打开状态,直到迁移完成。如果您创建了定期迁移转移作业,请无限期保持此会话的打开状态。如果此会话中断,则当前和将来的转移作业运行将失败。

  4. 定期监控代理是否正在运行。如果转移作业运行正在进行,并且代理在 24 小时内没有响应,则转移作业运行将会失败。

  5. 如果在进行或安排转移作业时迁移代理终止,则 Cloud Console 会显示错误状态并提示您重启代理。如需重新启动迁移代理,请从本部分开始运行迁移代理,并使用命令来运行迁移代理。您无需重复执行初始化命令。转移作业将从表未完成的位置恢复运行。

跟踪迁移进度

您可以在 Cloud Console 中查看迁移状态。您还可以设置 Pub/Sub 或电子邮件通知。请参阅 BigQuery Data Transfer Service 通知

BigQuery Data Transfer Service 会根据在创建转移作业配置时指定的时间表来安排和启动转移作业运行。当转移作业运行处于有效状态时,请务必确保迁移代理正在运行。如果代理在 24 小时内没有更新,则转移作业运行将失败。

Cloud Console 中的迁移状态示例:

迁移状态

升级迁移代理

如果有新版本的迁移代理,则需要手动更新迁移代理。如需接收有关 BigQuery Data Transfer Service 的通知,请订阅版本说明

后续步骤