In Pentaho Kettle sagen wir, dass man Daten zwischen zwei identischen Tabellen, A und B, kopieren möchte. Wenn es eine Spalte gibt, die automatisch inkrementiert wird, gibt es eine Möglichkeit, den Wert dieser Spalte beizubehalten Kopieren der Daten von A nach B? Ist das Verhalten der automatisch inkrementierten Spalten-Datenbank spezifisch oder hat Kettle eine allgemeine Lösung dafür gefunden?Speichern von automatisch inkrementierten Spalten in Pentaho Kettle
Antwort
Wenn Sie zwei Tabellen haben, die in Bezug auf ihre Spalten identisch definiert sind und in beiden Tabellen eine automatisch inkrementierende Spalte vorhanden ist und Sie dann eine der Tabellen mit Daten füllen, erhöhen Sie die Zahl in Tabelle 1. Um diese Zeilen in die Spiegeltabelle einzufügen, müssten Sie sie nun aus der ersten Tabelle in derselben Reihenfolge extrahieren, in der sie eingefügt wurden, sodass sie in der gleichen Reihenfolge in die Spiegeltabelle eingefügt werden können. Dann, und nur dann, würden die automatisch inkrementierenden Zahlen stimmen. Dies würde jedoch als fragiles Design angesehen werden.
Die Alternative wäre, die Tabellen in Bezug auf Spaltendatentypen identisch zu machen, aber keine automatisch inkrementierende Spalte in der Spiegeltabelle zu haben. Machen Sie einfach diese Spalte in der Spiegeltabelle zu einer Ganzzahl, ohne Auto-Inkrement-Fähigkeit.
Tims Antwort ist vernünftig. Normalerweise würde ich dasselbe tun: Tabelle B wird mit Tabelle A identisch gemacht, außer dass die PK von Tabelle B keine automatisch inkrementierende Spalte ist.
(Der Versuch, die Daten immer in der gleichen Reihenfolge einzufügen, wäre eine schlechte Idee. Es wäre sicherlich fragil, wie Tim erwähnte. Aber wirklich, es wäre schlimmer als das. Erstens konnte man keine Masseneinsätze machen. Sie müssen jede Zeile einzeln festschreiben, und Sie können normalerweise nicht sicher sein, dass der nächste Wert die nächste Ganzzahl ist .. Es liegt in der Verantwortung des DBMS, den nächsten Wert auszuwählen Es gibt viele Situationen, in denen der nächste Wert nicht eingefügt wird die nächst höhere Ganzzahl.)
Ein wichtiges Detail ist jedoch, dass DBMSs automatisch inkrementierende Felder unterschiedlich behandeln. In vielen Fällen besteht das Verhalten des automatisch inkrementierenden Feldes darin, einen Wert bereitzustellen, wenn der eingefügte Wert NULL ist, aber einen expliziten Wert zu akzeptieren, wenn einer angegeben wird. In anderen Fällen wird die Datenbank Versuche ablehnen, einen Wert in ein automatisch inkrementierendes Feld einzufügen.
Wenn Sie also mit dem ersten Fall konfrontiert sind, dann ist es wirklich kein Problem, Tabelle A und Tabelle B vollständig identisch zu lassen. Ihr ETL-Job fügt Werte in Tabelle B ein und die automatisch inkrementierende Art der PK-Spalte wird einfach ignoriert.