16.20 - 关于复制视图数据 - Teradata Data Mover

Teradata® Data Mover 用户指南

Product
Teradata Data Mover
Release Number
16.20
Published
2021 年 11 月
Content Type
用户指南
Publication ID
B035-4101-107K-CHS
Language
中文 (简体)
在以下情形下,Data Mover 可复制视图数据:
  • 在 Teradata 系统和 Teradata 表之间将基础数据从一个视图复制到另一个视图。
  • 在 Teradata 和 Hadoop 之间将数据从一个视图复制到一个表。
从视图复制数据时, 请将 copyData="true" 属性与 view 元素一起指定。

copyData 属性为可选项,缺省值为 falsecopyData 设置为 true 时,可以后跟可选的 view_data_table 元素。

如果未指定 view_data_table,Data Mover 会将视图数据复制到目标视图。必须指定 view selection = ”included” 元素以避免创建作业时出现异常。例如:
<views>
	<view selection="included" copyData="true">
		<name>deptsals</name>
		<database>MyDb</database>
	</view>
</views>
在上面的示例中,会使用 "SELECT *from MyDb.deptSals" 选择视图 deptSals 中的数据,然后将这部分数据加载到目标系统中的视图 "MyDb"."deptSals"。如果目标系统中不存在 MyDB.deptSals 视图,将使用源视图定义创建该视图。如果目标系统中存在 MyDB.deptSals 视图,将使用源视图定义覆盖该视图。
如果指定了 view_data_table,则 target_table 用于指示要将基础视图数据复制到的表,target_database 用于指示目标表所在的数据库。如果目标系统中尚不存在该表,则 Data Mover 将创建该表。如果目标系统中已存在该表,则会将视图数据加载到该表中。例如:
<views>
	<view selection="included" copyData="true">
		<name>deptsals</name>
		<database>MyDb</database>
		<view_data_table>
			<target_table>TargetTable</target_table>
			<target_database>TargetDb</target_database>
		</view_data_table>
	</view>
</views>

在上面的示例中,将使用 "SELECT * from MyDb.deptSals" 选择视图 deptSals 中的数据并将其加载到表 "TargetDb"."TargetTable" 中。如果目标系统中不存在 "TargetDb"."TargetTable",则 Data Mover 将创建目标表。

Data Mover 创建目标表时,表具有以下特点:
  • 是一个多重集表
  • 具有与视图相同的列名和列类型
  • 是一个无日志记录的非回退表
  • 不包含二级索引
除此之外,如果要进行数据复制的视图中包含一个“主索引”列,则将选择该列作为目标表的主索引。如果视图中不包含“主索引”列,则将选择该视图中的第一列作为主索引。
将视图数据复制到目标视图时,适用以下规则:
  • 源视图引用的表不得超过一个。如果视图具有多个引用表,将发生运行时异常。
  • 所有 compare_ddl 元素均将被忽略,因为 Data Mover 将使用源视图定义创建目标视图定义。
  • 源视图引用的表必须存在于目标系统中,否则必须随作业一起移动。
将视图数据复制到目标视图时,会首先将源视图数据复制到目标暂存表,并使用源视图定义覆盖目标视图(如果存在目标视图的话)。然后,再将源视图数据从暂存表复制到目标视图。如果视图中不包含目标引用表的所有列,目标引用表有可能包含空值。因此,请谨慎使用此功能。
将视图数据复制到目标表或目标视图时,在使用加载实用程序方面适用以下规则:
  • 如果未使用源暂存表,请勿将 ARC 或 DSA 用作加载实用程序。
  • 复制视图数据时,如果指定 ARC 或 DSA(不使用源暂存表)或 TPTAPI_LOAD 作为 force_utility 的值,将导致创建时间错误。
  • 除非将 force_utility 指定为 TPTAPI_STREAM、JDBC、DSA 或使用源暂存表的 ARC,否则将使用 TPTAPI_UPDATE 运算符复制视图数据。
  • 将视图数据复制到 Hadoop 时,必须使用 T2H 并指定外部服务器。
  • 与其他表一起复制视图数据时,将使用 TPTAPI_UPDATE 运算符复制视图数据,但可以使用 TPTAPI_LOAD 运算符复制其他数据表。当未指定 force_utility 值且未使用源暂存表时,或者指定 force_utility 值为 TPTAPI 时,就会发生这种情况。