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

Teradata® Data Mover 用户指南

Product
Teradata Data Mover
Release Number
17.11
Published
2021 年 10 月
Language
中文 (简体)
Last Update
2021-11-08
dita:mapPath
zh-CN/cai1626458602965.ditamap
dita:ditavalPath
zh-CN/mpm1591127278842.ditaval
dita:id
B035-4101
Product Category
Analytical Ecosystem

在 Teradata 系统和 Teradata 表之间将基础数据从一个视图复制到另一个视图时,Data Mover 可以复制视图数据。从某个视图复制数据时,请指定 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 将使用源视图定义创建目标视图定义。
  • 源视图引用的表必须存在于目标系统中,否则必须随作业一起移动。
将视图数据复制到目标视图时,会首先将源视图数据复制到目标暂存表,并使用源视图定义覆盖目标视图(如果存在目标视图的话)。然后,再将源视图数据从暂存表复制到目标视图。如果视图中不包含目标引用表的所有列,目标引用表有可能包含空值。因此,请谨慎使用此功能。
将视图数据复制到目标表或目标视图时,在使用加载实用程序方面适用以下规则:
  • 如果未使用源暂存表,请勿将 DSA 用作加载实用程序。
  • 复制视图数据时,如果指定 DSA(不使用源暂存表)或 TPTAPI_LOAD 作为 force_utility 的值,将导致创建时间错误。
  • 除非将 force_utility 指定为 TPTAPI_STREAM、JDBC 或使用源暂存表的 DSA,否则将使用 TPTAPI_UPDATE 运算符复制视图数据。
  • 与其他表一起复制视图数据时,将使用 TPTAPI_UPDATE 运算符复制视图数据,但可以使用 TPTAPI_LOAD 运算符复制其他数据表。当未指定 force_utility 值且未使用源暂存表时,或者指定 force_utility 值为 TPTAPI 时,就会发生这种情况。