Teradata 迁移详情和选项

本文档介绍了在使用 BigQuery Data Transfer Service 将数据从 Teradata 迁移到 BigQuery 时需了解的更多详情、选项和 Beta 版功能。

自定义架构文件

使用架构文件进行转换

在迁移过程中,您可以指定自定义架构文件以更改任何对象的 name 字段,并将 usageType 数组添加到任意列。此文件尤其适用于包含表的额外信息(例如分区)。如果没有指定架构文件,此类信息可能会在迁移过程中丢失。

支持以下使用类型:

  • PARTIFTIONING:每个表中只能有一列带有此 usageType 注释。列的类型字段应为 DATETIMESTAMP。 此列将用于分区表定义,用于包含表对象。
  • CLUNTERING:一个表中的多个列可以带有此 usageType 注释。对于 BigQuery 中的聚簇,列类型应遵循约束条件。如果为同一表指定了 PARTITIONING 字段,BigQuery 将使用这些列创建聚簇表。只有类型为 INT64STRINGDATETIMESTAMPBOOLNUMERIC 的列才能使用此 usageType 进行标记。
  • COMMIT_TIMESTAMP:每个表中只能有一列带有此 usageType 注释。使用此 UsageType 为更新时间戳列添加注释。此列将用于提取自上次转移作业运行后创建/更新的行。它应该具有 TIMESTAMPDATE 类型。

自定义架构文件示例


{
  "databases": [
    {
      "name": "db",
      "originalName": "db",
      "tables": [
        {
          "name": "test",
          "originalName": "test",
          "columns": [
            {
              "name": "foo",
              "originalName": "foo",
              "type": "INT64",
              "usageType": ["CLUSTERING"]
            },
            {
              "name": "bar",
              "originalName": "bar",
              "type": "DATE",
              "usageType": ["PARTITIONING"]
            },
            {
              "name": "change",
              "originalName": "change",
              "type": "TIMESTAMP",
              "usageType": ["COMMIT_TIMESTAMP"]
            }
          ]
        }
      ]
    }
  ]
}

如需详细了解表在转移作业中的分区或聚簇方式,请参阅增量转移部分。

Teradata 与 BigQuery 数据类型之间的映射

Teradata 类型 BigQuery 类型 类型差异
INTEGER INTEGER
SMALLINT INTEGER
BYTEINT INTEGER
BIGINT INTEGER
DECIMAL NUMERIC BigQuery NUMERIC 类型支持 38 位精度和 9 位标度的十进制值。
浮点数 NUMERIC BigQuery NUMERIC 类型支持 38 位精度和 9 位标度的十进制值。
NUMERIC NUMERIC BigQuery NUMERIC 类型支持 38 位精度和 9 位标度的十进制值。
NUMBER NUMERIC BigQuery NUMERIC 类型支持 38 位精度和 9 位标度的十进制值。
REAL FLOAT64
CHAR STRING
CHARACTER STRING
VARCHAR STRING
CLOB STRING
JSON STRING
BLOB BYTES
BYTE BYTES
VARBYTE BYTES
DATE DATE
TIME TIME BigQuery TIME 采用世界协调时间 (UTC)。BigQuery Data Transfer Service 将以 UTC 格式提取各自的值。
TIMETZ TIME BigQuery TIME 采用世界协调时间 (UTC)。BigQuery Data Transfer Service 将以 UTC 格式提取各自的值。
时间戳 时间戳 BigQuery TIMESTAMP 采用世界协调时间 (UTC)。BigQuery Data Transfer Service 将以 UTC 格式提取各自的值。

TIMESTAMP 精度限制为微秒。
TIMESTAMPTZ 时间戳 BigQuery TIMESTAMP 采用世界协调时间 (UTC)。BigQuery Data Transfer Service 将以 UTC 格式提取各自的值。

TIMESTAMP 精度限制为微秒。
ARRAY STRING
MULTIDIMENSIONALARRAY STRING
HOUR INTEGER
MINUTE INTEGER
SECOND INTEGER
DAY INTEGER
MONTH INTEGER
YEAR INTEGER
PERIODDATE STRING
PERIODTIMESTAMPTZ STRING
PERIODTIMESTAMP STRING
PERIODTIME STRING
PERIODTIMETZ STRING
USERDEFINED STRING
XML STRING
ANYTYPE STRING

增量转移

BigQuery Data Transfer Service 支持定期转移新的行和更新的行(“增量转移”)。您可以在设置转移作业时,于时间表选项中指定按需转移(一次性)或增量转移。

Teradata 中的源表必须具有 TIMESTAMP 数据类型的更改跟踪列。

在增量转移中,首次转移始终在 BigQuery 中创建表快照。所有后续转移作业将捕获、转移新数据和更改的数据,并将其附加到 BigQuery 中的现有表。这意味着,对于已更改的行,BigQuery 表格可能包含具有旧值和新值的重复行。

对于每次转移作业运行,系统都会保存转移作业运行的时间戳。对于每次后续转移作业运行,代理会收到上次转移作业运行的时间戳 (T1) 和当前转移作业运行开始的时间戳 (T2)。

对于初始运行后的每次转移,迁移代理将使用以下每个表逻辑提取数据:

  • 如果架构文件中的表对象没有 usageType 为 COMMIT_TIMESTAMP 的列,则跳过该表。
  • 如果表中有 usageType 为 COMMIT_TIMESTAMP 的列,系统会提取时间戳介于 T1 和 T2 之间的所有行并将其附加到 BigQuery 中的现有表。

增量转移中的 DDL/DML 操作

Teradata 操作 类型 Teradata 到 BigQuery 的支持
CREATE DDL 如果表名与给定模式匹配,则会在 BigQuery 中创建表的新完整快照。
DROP DDL 不支持
ALTER(重命名) DDL 如果表名称与给定模式匹配,则在 BigQuery 中为重命名的表创建新的完整快照。上一个快照不会从 BigQuery 中删除。用户不会收到重命名表的通知。
INSERT DML 新的行会添加到匹配的 BigQuery 表格中。
UPDATE DML 行数保持不变。将行添加到匹配的 BigQuery 表格中,如 INSERT。先前转移中的行不会更新或删除。
MERGE DML 不受支持。请改为查看 INSERT、UPDATE 和 DELETE。
删除 DML 不支持

后续步骤