2010-11-23 53 views
0

在Pentaho Kettle中,假設您想在兩個相同的表A和B之間複製數據。如果存在自動遞增的列,那麼有一種方法可以在保存該列的值時將數據從A複製到B?自動遞增列數據庫的行爲是特定的還是已經找到了一個通用的解決方案?在Pentaho Kettle中保留自動遞增的列

回答

1

如果您有兩個表(關於其列的定義相同),並且兩個表中都有一個自動遞增列,然後用數據填充其中一個表,則您將增加表1中的數字。現在,爲了將這些行插入到鏡像表中,必須按照與插入的順序相同的順序從第一個表中提取它們,以便它們可以按照相同的順序插入到鏡像表中。然後,只有這樣,自動遞增的號碼纔會嗡嗡作響。這就是說,這將被認爲是脆弱的設計。

另一種方法是使表與列數據類型相同,但鏡像表中沒有自動遞增列。只需在鏡像表中將該列設置爲一個整數,而不具有任何自動增量功能。

1

蒂姆的回答是合理的。我通常會這樣做:使表B與表A相同,除了使表B的PK不是自動遞增列。 (試圖總是以相同的順序插入數據將是一個不好的主意,正如Tim提到的那樣,它肯定會很脆弱,但實際上,這會比這更糟糕,首先,你不能做批量插入。您需要分別提交每一行,而且通常不能確定下一個使用的值是下一個整數,這是DBMS挑選下一個值的責任,有很多情況下插入的下一個值不會下一個更大的整數)。

但是一個重要的細節是DBMS處理自動遞增字段的不同。在許多情況下,如果插入的值爲NULL,則自動遞增字段的行爲是提供值,但如果提供了值,則接受顯式值。在其他情況下,數據庫將拒絕嘗試將值插入自動遞增字段。

所以如果你面對的是前一種情況,那麼把表A和表B完全相同是沒有問題的。您的ETL作業將在表B中插入值,並且PK列的自動遞增特性將被忽略。