我们在 DB2 数据库中有一个包含大约 700 个表的模式 - 要求是将数据从这些表迁移到新模式中的表(在同一个数据库中),两个模式中的表具有几乎相同的名称。
由于以下两个因素,要求有点棘手:
- 新表中的字段/列较少。
- 旧表具有所有 VARCHAR 字段,而新表具有特定的数据类型(DATE、DECIMAL、CLOB 等)
我们正在寻找在加载和卸载流之间转换数据以及在表之间映射列的解决方案。
谢谢!
我们在 DB2 数据库中有一个包含大约 700 个表的模式 - 要求是将数据从这些表迁移到新模式中的表(在同一个数据库中),两个模式中的表具有几乎相同的名称。
由于以下两个因素,要求有点棘手:
我们正在寻找在加载和卸载流之间转换数据以及在表之间映射列的解决方案。
谢谢!
这是一项非常艰巨的任务,因为源和目标相差很大。一个工具很难理解新表中缺少的列,即使它们是空的或空值。转换也很困难,因为需要分析源列的数据,然后检查所有这些值是否对应一个类型(但之前需要测试很多类型),然后执行匹配。
可能,如果源表和目标表中的列名相同,则任务可能会更容易。您只需匹配名称,然后注入数据。
在分析了这种情况后,我得出结论,元数据在这种情况下并不是很有用,因为表的属性在迁移中会发生很大的变化。大多数情况下,迁移是基于元数据的,但是因为您几乎要更改所有这些,所以目录数据库几乎没用。此外,许多工具的知识基于元数据,而不是数据本身。
您取自 varchar,这是最通用的数据类型,您可以在其中放置任何其他类型的值,并且您希望通过根据数据分配适当的数据类型来优化存储,但是,也应该这样做以确保关系完整性; 我的意思是,关系中作为主键的列的数据类型应该与其他表中的外键匹配,而不仅仅是数据类型,还有精度。最后一个是一个额外的问题,我希望你在那里有关系完整性。
我不知道您正在寻找的智能工具。但是,我建议您进行手动操作。首先,尝试检测列名称中的策略,我的意思是,如果一列称为地址,您将知道在所有表中是 64 的 varchar,在所有表中称为价格的列可能是双精度列。只需对列名进行字典分析,您就可以标准化模型。但是,您必须检查具有该名称的所有列中的值是否在该列精度中“输入”。最后一部分是一个非常耗时的过程,因为您必须从所有表中读取值,并查找每个日期类型的最长值。