在Pentaho Kettle中,假设有人希望在两个相同的表A和B之间复制数据。如果有一个自动递增的列,则有一种方法可以在将数据从A复制到B时保留该列的值?自动递增列数据库的行为是特定的还是Kettle找到了一个通用的解决方案?
答案 0 :(得分:1)
如果你有两个表,它们的列相同,并且两个表中都有一个自动递增列,然后用数据填充其中一个表,你将增加表1中的数字。 ,为了将这些行插入镜像表,您必须按照它们插入的顺序从第一个表中提取它们,以便它们可以按相同的顺序插入到镜像表中。然后,只有这样,自动递增数字才会生效。也就是说,这将被视为脆弱的设计。
替代方法是使表与列数据类型相同,但镜像表中没有自动递增列。只需将镜像表中的该列设为整数,不需要任何自动增量功能。
答案 1 :(得分:1)
(试图总是以相同的顺序插入数据将是一个坏主意。正如蒂姆所说,它肯定会很脆弱。但实际上,它会比这更糟糕。首先,你不能做批量插入。你。需要单独提交每一行。另外,你通常不能确定下一个使用的值是下一个整数。是DBMS负责选择下一个值。有很多情况下插入的下一个值不是下一个更高的整数。)
但一个重要的细节是DBMS以不同方式处理自动递增字段。在许多情况下,自动递增字段的行为是,如果插入的值为NULL,则提供一个值,但如果提供了一个值,则接受显式值。在其他情况下,数据库将拒绝将值插入自动递增字段的尝试。
因此,如果您面对前一种情况,那么将表A和表B保持完全相同并不是一个问题。您的ETL作业将在表B中插入值,并且将忽略PK列的自动递增性质。