本文概述了如何使用管道中的复制操作从 Teradata 复制数据并将数据复制到 Teradata。
支持的配置
有关复制活动下每个选项卡的配置,请分别转到以下部分。
概况
对于 “常规 ”选项卡配置,请转到 “常规”。
来源
小窍门
若要通过数据分区高效地从 Teradata 加载数据,请参阅Teradata 并行复制部分了解更多信息。
在复制活动的“源”选项卡中,Teradata 支持以下属性。
需要以下属性:
连接:从连接列表中选择 Teradata 连接。 如果不存在连接,请创建新的 Teradata 连接。
使用查询:选择 表 或 查询。
在 “高级”下,可以指定以下字段:
分区选项:指定用于从 Teradata 加载数据的数据分区选项。 允许值为: None (默认值)、 DynamicRange 和 Hash。 启用分区选项(即不包括
None)时,从 Teradata 并发加载数据的并行度由复制活动设置选项卡中的 复制并行度 控制。无:选择此设置以不使用分区。
动态范围:使用启用了并行的查询时,需要范围分区参数(
?DfDynamicRangePartitionCondition)。 示例查询:SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition。哈希:使用启用了并行的查询时,需要哈希分区参数 (
?AdfHashPartitionCondition) 。 示例查询:select * from <TableName> where ?AdfHashPartitionCondition。
其他列:添加更多数据列以存储源文件的相对路径或静态值。 后者支持表达式。
目的地
复制活动的 “目标 ”选项卡下的 Teradata 支持以下属性。
需要以下属性:
连接:从连接列表中选择 Teradata 连接。 如果不存在连接,请创建新的 Teradata 连接。
表:指定要写入数据的 Teradata 中的表的名称。 从下拉列表中选择表,或 手动选择 Enter 以输入架构和表名称。
在 “高级”下,可以指定以下字段:
- 其他 Teradata 格式选项:指定在 COPY 语句中用于加载数据的其他格式选项。 示例:DATE_FORMAT、TIME_FORMAT、TIMESTAMP_FORMAT。 有关详细信息,请参阅 Teradata DATE 格式。 此属性仅适用于从 DelimitedText 格式源到 Teradata 的直接复制。
直接复制到 Teradata
如果源数据存储和格式符合本节中所述的条件,则可以使用复制活动直接从源复制到 Teradata。 该服务将检查设置,如果不符合以下条件,复制活动运行将会失败:
源连接是 Azure Blob 存储 和 Azure Data Lake Storage Gen2,使用帐户密钥和共享访问签名进行身份验证。
源数据格式为 Parquet 和 DelimitedText,配置如下:
对于 Parquet 格式,压缩编解码器为 None 或 Snappy。
对于 DelimitedText 格式:
-
rowDelimiter为 \n。 -
compression可以是 无压缩 或 gzip。 如果选择 gzip 压缩,该文件必须以扩展名 .gz结尾。 -
encodingName保留为默认值或设置为 UTF-8。 -
quoteChar为 双引号"或 空字符串。 -
escapeChar为 双引号"或 空字符串。 -
nullValue为 Null 或 空字符串。
-
在“复制”活动源中:
- 使用 Azure Data Lake Storage Gen2 时仅允许使用静态路径。
- 使用 Azure Blob 存储时仅允许静态路径和
prefix。
复制到 Teradata 时,静态路径将用作前缀。
分阶段复制到 Teradata
如果您的源数据存储或格式与 Teradata COPY 命令不原生兼容(如上一节所述),请通过使用临时的 Azure Blob 存储实例来启用内置的暂存复制。 分阶段复制功能还能提供更高的处理吞吐量。 服务会自动转换数据以满足 Teradata 的数据格式要求。 然后,它会调用 COPY 命令将数据加载到 Teradata 中。 最后,它会从 Blob 存储中清理临时数据。
若要使用此功能,请创建一个将 Azure 存储帐户称为临时暂存的 Azure Blob 存储连接 。 然后,在复制活动中指定 enableStaging 和 stagingSettings 属性。
注释
过渡 Azure Blob 存储连接需要使用 Teradata COPY 命令所需的 帐户密钥 或 共享访问签名 身份验证。
映射
对于“映射”选项卡配置,请转到在“映射”选项卡下配置映射。
设置
对于“设置”选项卡配置,请转到“设置”选项卡下的“配置其他设置”。
从 Teradata 进行并行复制
Teradata 连接器提供内置的数据分区,用于从 Teradata 并行复制数据。 可以在复制活动的“源”表中找到数据分区选项。
启用分区复制后,服务将对 Teradata 源运行并行查询,以便按分区加载数据。 并行度由复制活动设置选项卡中 的复制并行度 控制。例如,如果将 复制并行度 设置为 4,服务会根据指定的分区选项和设置同时生成并运行四个查询,并且每个查询从 Teradata 检索一部分数据。
建议同时启用并行复制和数据分区,尤其是从 Teradata 加载大量数据时。 下面是针对不同方案的建议配置。 将数据复制到基于文件的数据存储中时,建议以多个文件的形式写入文件夹(仅指定文件夹名称),在这种情况下,性能优于写入单个文件。
| 情景 | 建议的设置 |
|---|---|
| 从大型表进行完整加载。 |
分区选项:哈希。 在执行期间,服务会自动检测主索引列,对其应用哈希,然后按分区复制数据。 |
| 使用自定义查询加载大量数据。 |
分区选项:哈希。 查询: SELECT * FROM <TABLENAME> WHERE ?AdfHashPartitionCondition AND <your_additional_where_clause>.分区列:指定用于应用哈希分区的列。 如果未指定,服务会自动检测 Teradata 数据中指定的表的 PK 列。 在执行期间,服务会将 ?AdfHashPartitionCondition 替换为哈希分区逻辑,并将其发送到 Teradata。 |
| 通过使用自定义查询来加载大量数据,并使用具有均匀分布值的整数列进行范围分区。 |
分区选项:动态范围分区。 查询: SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>.分区列:指定用于对数据进行分区的列。 可以针对整数数据类型的列进行分区。 分区上限 和 分区下限:指定是否要根据分区列进行筛选,以便仅在下限和上限之间检索数据。 在执行期间,服务会将 ?AdfRangePartitionColumnName、?AdfRangePartitionUpbound 和 ?AdfRangePartitionLowbound 替换为每个分区的实际列名称和值范围,并将其发送到 Teradata。 例如,如果为分区列“ID”设置了下限 1、上限 80,并将并行复制设置为 4,则服务会按 4 个分区检索数据。 它们的 ID 分别介于 [1,20]、[21、40]、[41、60] 和 [61, 80]之间。 |
示例:使用哈希分区进行查询
"source": {
"type": "TeradataSource",
"query": "SELECT * FROM <TABLENAME> WHERE ?AdfHashPartitionCondition AND <your_additional_where_clause>",
"partitionOption": "Hash",
"partitionSettings": {
"partitionColumnName": "<hash_partition_column_name>"
}
}
示例:使用动态范围分区进行查询
"source": {
"type": "TeradataSource",
"query": "SELECT * FROM <TABLENAME> WHERE ?AdfRangePartitionColumnName <= ?AdfRangePartitionUpbound AND ?AdfRangePartitionColumnName >= ?AdfRangePartitionLowbound AND <your_additional_where_clause>",
"partitionOption": "DynamicRange",
"partitionSettings": {
"partitionColumnName": "<dynamic_range_partition_column_name>",
"partitionUpperBound": "<upper_value_of_partition_column>",
"partitionLowerBound": "<lower_value_of_partition_column>"
}
}
表摘要
下表包含有关 Teradata 中的复制活动的详细信息。
源信息
| 名称 | DESCRIPTION | 价值 | 必选 | JSON 脚本属性 |
|---|---|---|---|---|
| 连接 | 与源数据存储的连接。 | < 你的 Teradata 连接 > | 是的 | 连接 |
| 使用查询 | 从 Teradata 读取数据的方式。 应用“表”以从指定表中读取数据,或应用“查询”以使用查询读取数据。 | • 表 • 查询 |
否 | / |
| 对于“表” | ||||
| 架构名称 | 架构的名称。 | < 你的架构名称 > | 否 | 架构 |
| 表名称 | 表格名称 | < 你的表名称 > | 否 | 表 |
| 对于“查询” | ||||
| 查询 | 使用自定义 SQL 查询读取数据。 | < SQL 查询 > | 否 | 查询 |
| 分区选项 | 用于从 Teradata 加载数据的数据分区选项。 | • 无 • 动态范围 • 哈希 |
否 | / |
| 对于“动态范围” | ||||
| 分区列名称 | 以整数或日期/日期时间类型(int、smallint、bigint、date、smalldatetime、datetime、datetime2,或datetimeoffset)指定由范围分区用于并行复制的源列的名称。如果未指定,则会自动检测表的索引或主键,并将其用作分区列。 |
< 你的分区列名称 > | 否 | partitionColumnName |
| 分区上限 | 指定分区范围拆分的分区列的最大值。 此值用于确定分区步幅,不用于筛选表中的行。 对表或查询结果中的所有行进行分区和复制。 | < 分区上限 > | 否 | partitionUpperBound |
| 分区下限 | 指定分区范围拆分的分区列的最小值。 此值用于确定分区步幅,不用于筛选表中的行。 对表或查询结果中的所有行进行分区和复制。 | < 你的分区下限 > | 否 | partitionLowerBound |
| 对于“哈希” | ||||
| 分区列名称 | 以整数或日期/日期时间类型(int、smallint、bigint、date、smalldatetime、datetime、datetime2,或datetimeoffset)指定由范围分区用于并行复制的源列的名称。如果未指定,则会自动检测表的索引或主键,并将其用作分区列。 |
< 你的分区列名称 > | 否 | partitionColumnName |
| 其他列 | 添加其他数据列以存储源文件的相对路径或静态值。 后者支持表达式。 | •名字 •价值 |
否 | additionalColumns: •名字 •价值 |
目的地信息
| 名称 | DESCRIPTION | 价值 | 必选 | JSON 脚本属性 |
|---|---|---|---|---|
| 连接 | 与目标数据存储的连接。 | < 你的 Teradata 连接 > | 是的 | 连接 |
| 桌子 | 要写入数据的目标数据表。 | < 你的表名称 > | 是的 | / |
| 架构名称 | 架构的名称。 | < 你的架构名称 > | 否 | 架构 |
| 表名称 | 表格名称 | < 你的表名称 > | 否 | 表 |
| 其他 Teradata 格式选项 | 指定在 COPY 语句中用于加载数据的其他格式选项。 示例:DATE_FORMAT、TIME_FORMAT、TIMESTAMP_FORMAT。 有关详细信息,请参阅 Teradata DATE 格式。 此属性仅适用于从 DelimitedText 格式源到 Teradata 的直接复制。 | • DATE_FORMAT • TIME_FORMAT • TIMESTAMP_FORMAT |
否 | additionalFormatOptions: • DATE_FORMAT • TIME_FORMAT • TIMESTAMP_FORMAT |