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
中文 (简体)

在 Teradata Database 各版本之间复制联接索引和哈希索引具有一定限制:

要将联接索引或哈希索引从源数据库复制到目标数据库,请在定义联接索引或哈希索引时指定 index 元素的 selection="included" 属性,如下例所示:

<indices>
	<index selection= "included">
		<name>Orders_HI</name>
		<index_database>west1000</index_database>
		<map>sparsemap4amps1</map> 
		<colocate>sparsecol2</colocate>
		<index_type>HASH_INDEX</index_type>
	</index>
</indices>

下表介绍了联接索引和哈希索引的参数及可能的值。

参数 说明
colocate 共同定位名称,仅用于稀疏映射。
index_database 联接索引或哈希索引所在的数据库的名称。
index_type 索引类型。
有效值为:
  • HASH_INDEX
  • JOIN_INDEX
map 对象映射名称。
name 联接索引或哈希索引名称。
selection 该元素指定是否复制联接索引或哈希索引。
有效值为:
  • included - 复制联接索引或哈希索引
  • unselected - 将联接索引或哈希索引排除在复制范围之外
只有使用 Teradata Database 16.10 或更高版本的目标系统支持 MAPS 功能参数 mapcolocate

如果正在复制联接或哈希索引以及关联的表, 并且关联的表正在重命名或重新定位, 则会在目标上的重命名或重新定位的表上创建联接或哈希索引。

以下代码示例创建一个压缩多表联接索引 Cust_Ord_JI。

CREATE JOIN INDEX west1000.Cust_Ord_JI ,NO FALLBACK ,CHECKSUM = DEFAULT AS
SELECT (west1000.C.c_custid ,west1000.C.c_lname ),(west1000.O.o_orderid ,
west1000.O.o_orderstatus ,west1000.O.o_orderdate ) FROM
west1000.Customer C INNER JOIN west1000.Orders O ON west1000.C.c_custid = west1000.O.o_custid )
PRIMARY INDEX ( c_custid );

以下代码示例创建一个非压缩多表联接索引 Cust_Ord_J2。

CREATE JOIN INDEX west1000.Cust_Ord_JI2 ,NO FALLBACK ,CHECKSUM = DEFAULT AS
SELECT west1000.C.c_custid ,west1000.C.c_lname,west1000.O.o_orderid ,
west1000.O.o_orderstatus ,west1000.O.o_orderdate FROM
west1000.Customer C INNER JOIN west1000.Orders O ON west1000.C.c_custid = west1000.O.o_custid )
PRIMARY INDEX ( c_custid );

以下代码示例创建一个聚合联接索引 Monthly_Sales_JI。

CREATE JOIN INDEX west1000.Monthly_Sales_JI ,NO FALLBACK ,CHECKSUM = DEFAULT AS
SELECT COUNT( * ) (FLOAT, NAMED CountStar ),west1000.Daily_Sales.item_id (NAMED Item ),
EXTRACT(YEAR FROM (west1000.Daily_Sales.sales_date ))(NAMED Yr ),
EXTRACT(MONTH FROM (west1000.Daily_Sales.sales_date ))(NAMED Mon ),
SUM(west1000.Daily_Sales.sales )(FLOAT, NAMED Sum_of_Sales )
FROM west1000.Daily_Sales GROUP BY west1000.Daily_Sales.item_id (NAMED Item ),
EXTRACT(YEAR FROM (west1000.Daily_Sales.sales_date ))(NAMED Yr ), 
EXTRACT(MONTH FROM (west1000.Daily_Sales.sales_date ))(NAMED Mon ) 
PRIMARY INDEX ( Item );

以下代码示例创建一个哈希索引 Orders_HI。

CREATE HASH INDEX west1000.Orders_HI ,NO FALLBACK ,CHECKSUM = DEFAULT
(o_custid ,o_totalprice ,o_orderdate )
ON west1000.Orders ;
复制联接索引和哈希索引时,请考虑以下因素:
  • 如果要复制的对象在目标数据库中不存在,则会在目标数据库中创建该对象。如果对象在目标数据库中存在,则除非 overwrite_existing_objects 属性被设置为 false,否则将覆盖该对象。这种情况下,将生成创建时错误。
  • 复制表时,如果目标系统中存在该表并具有关联的联接索引或哈希索引,将覆盖目标表,并在新复制的表上重新创建联接索引或哈希索引。

不能在 Teradata 与 Hadoop 系统之间复制联接接索引和哈希索引。