支持 COLMAP
COLMAP 支持以下方案:
-
仅将源列的子集复制到目标表中。
-
由于兼容性问题(例如不支持的字符或超过允许的最大长度),请选择与源表中可用的列名称不同的列名称。注:只有
CREATE TABLE提供了COLMAP支持。ALTER TABLE案例不支持COLMAP。
仅复制特定列是一个非常常见的用例,您可以在其中显式指定需要在目标中映射的列。
例如,假定源表具有 COL1、COL2、…、COL10 列,并且您只想在目标表中创建 COL1 和 COL5 列,则可以在 Replicat 参数文件中添加类似于以下内容的参数:
MAP SRC.TABLE, TARGET TGT.TABLE, COLMAP(COL1 = COL1, COL5 = COL5);
请看以下示例:
MAP SRC.TABLE, TARGET TGT.TABLE, COLMAP (USEDEFAULTS, EMPNAME = COL10);
在此示例中,源表中的 COL10 字段使用 COLMAP 映射到目标表中的 EMPNAME,而所有其他列保留其原始名称。
MAP SRC.REGION, TARGET TGT.EMPLOYEE, COLMAP (USEDEFAULTS, A001 = Å001);
请注意,在此示例中,COLMAP 用于将列 A001 的名称更改为Å001,该列包含一个特定的(不受支持的)字符。
使用 COLMAP 重命名列时的一个重要注意事项是对未来方案更改的潜在影响。如果将具有相同名称的新列(例如 EMPNAME)添加到源表中,将导致复制进程失败,因为它会尝试在目标上创建重复列。
虽然存在解决方法(例如创建其他映射),但可能会导致维护复杂性。因此,建议在使用 COLMAP 重命名列时务必谨慎。考虑添加具有适当名称的新列,以避免潜在的冲突并确保无缝复制。
下面是解决此冲突的可能解决方法,但是,强烈建议不要依赖此类解决方案,而是建议通过在所有数据库中选择唯一和兼容的列名来完全避免该方案。
MAP SRC.TABLE, TARGET TGT.TABLE, COLMAP (USEDEFAULTS, EMPNAME = COL10, EMPNAME_NEW = EMPNAME);