在数据库各版本之间复制联接索引和哈希索引具有一定限制:
要将联接索引或哈希索引从源数据库复制到目标数据库,请在定义联接索引或哈希索引时指定 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 | 索引类型。 有效值为:
|
map | 对象映射名称。 |
name | 联接索引或哈希索引名称。 |
selection | 该元素指定是否复制联接索引或哈希索引。 有效值为:
|
只有使用 Teradata Database 16.10 或更高版本的目标系统支持 MAPS 功能参数 map 和 colocate。
如果正在复制联接或哈希索引以及关联的表, 并且关联的表正在重命名或重新定位, 则会在目标上的重命名或重新定位的表上创建联接或哈希索引。
以下代码示例创建一个压缩多表联接索引 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,否则将覆盖该对象。这种情况下,将生成创建时错误。
- 复制表时,如果目标系统中存在该表并具有关联的联接索引或哈希索引,将覆盖目标表,并在新复制的表上重新创建联接索引或哈希索引。