Mit Pentaho Kettle, wie lade ich mehrere Tabellen aus einer einzigen Tabelle, während die referenzielle Integrität?

Benötigen Sie zum laden von Daten aus einer einzigen Datei mit mehr als 100.000 Datensätze in mehrere Tabellen auf der MySQL-Aufrechterhaltung der Beziehungen definiert in der Datei/Tabellen; Bedeutung der Beziehungen bereits übereinstimmen. Die Lösung sollte auf die neueste version von MySQL, und muss die Verwendung der InnoDB-engine; MyISAM unterstützt keine Fremdschlüssel.

Ich bin komplett neu mit Pentaho Data Integration (aka Kessel) und alle Hinweise wären sehr willkommen.

Könnte ich hinzufügen, ist es erforderlich, dass der foreign key-Einschränkungen werden NICHT deaktiviert. Da es mein Verständnis, dass wenn es etwas falsch mit der Datenbank ist die Referentielle Integrität wird MySQL keine Prüfung auf Referentielle Integrität, wenn die foreign key constraints wieder aktiviert sind. QUELLE: 5.1.4. Server-Systemvariablen -- foreign_key_checks

Alle Ansätze sollten auch einige aus der Validierung und eine rollback-Strategie sollte eine insert-fail, oder nicht, um die referenzielle Integrität zu erhalten.

Wieder, ganz neu hier und Tue mein bestes, um so viele Informationen wie möglich, wenn Sie Fragen haben, oder bitte um Aufklärung -- lasst es mich einfach wissen.

Wenn Sie in der Lage sind zu posten das XML von der kjb-und ktr-Dateien (jobs/Transformationen), das wäre SUPER. Vielleicht sogar jagen jeden Kommentar/Antwort, Sie haben alle irgendwo gemacht und bis Sie Stimmen... 🙂 ...wirklich, es ist mir wirklich wichtig, eine Antwort zu finden.

Dank!


Beispieldaten: besser erarbeiten an einem Beispiel, nehmen wir an ich bin versucht, eine Datei zu laden mit Mitarbeiter-Namen, die Büros, die Sie besetzt haben in der Vergangenheit und Ihre Job-Titel Geschichte durch einen Tabulator getrennt.

Datei:

EmployeeName<tab>OfficeHistory<tab>JobLevelHistory
John Smith<tab>501<tab>Engineer
John Smith<tab>601<tab>Senior Engineer
John Smith<tab>701<tab>Manager
Alex Button<tab>601<tab>Senior Assistant
Alex Button<tab>454<tab>Manager

HINWEIS: Die einzelne Tabelle Datenbank ist vollständig normalisiert (so viel wie eine einzelne Tabelle kann) -- und zum Beispiel im Fall von "John Smith" gibt es nur einen John Smith; D. H. es sind keine Duplikate, das würde zu Konflikten führen, in die referenzielle Integrität.

Den MyOffice Datenbank-schema hat die folgende Tabellen:

Employee (nId, name)
Office (nId, number)
JobTitle (nId, titleName)
Employee2Office (nEmpID, nOfficeId)
Employee2JobTitle (nEmpId, nJobTitleID)

So, in diesem Fall. die Tabellen sollten so Aussehen:

Employee
1 John Smith
2 Alex Button

Office
1 501
2 601
3 701
4 454

JobTitle
1 Engineer
2 Senior Engineer
3 Manager
4 Senior Assistant

Employee2Office
1 1
1 2
1 3
2 2
2 4

Employee2JobTitle
1 1
1 2
1 3
2 4
2 3

Hier ist die MySQL-DDL zum erstellen der Datenbank und Tabellen:

create database MyOffice2;

use MyOffice2;

CREATE TABLE Employee (
      id MEDIUMINT NOT NULL AUTO_INCREMENT,
      name CHAR(50) NOT NULL,
      PRIMARY KEY (id)
    ) ENGINE=InnoDB;

CREATE TABLE Office (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  office_number INT NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB;

CREATE TABLE JobTitle (
  id MEDIUMINT NOT NULL AUTO_INCREMENT,
  title CHAR(30) NOT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB;

CREATE TABLE Employee2JobTitle (
  employee_id MEDIUMINT NOT NULL,
  job_title_id MEDIUMINT NOT NULL,
  FOREIGN KEY (employee_id) REFERENCES Employee(id),
  FOREIGN KEY (job_title_id) REFERENCES JobTitle(id),
  PRIMARY KEY (employee_id, job_title_id)
) ENGINE=InnoDB;

CREATE TABLE Employee2Office (
  employee_id MEDIUMINT NOT NULL,
  office_id MEDIUMINT NOT NULL,
  FOREIGN KEY (employee_id) REFERENCES Employee(id),
  FOREIGN KEY (office_id) REFERENCES Office(id),
  PRIMARY KEY (employee_id, office_id)
) ENGINE=InnoDB;



Meine Notizen in Reaktion auf die Ausgewählte Antwort:

PREP:

  1. (a) Verwenden Sie die Beispiel-Daten, erstellen Sie eine CSV-durch die änderung <TAB> zu ein Komma getrennt.
  2. (b) Installieren Sie MySQL und erstellen Beispiel-Datenbank mit dem MySQL-DDL-Probe
  3. (c) Installieren Sie den Wasserkocher (es ist Java basiert und läuft auf alles, was läuft Java)
  4. (d) KTR Download-Datei

Datenfluss von Schritt: (Meine Notizen)

  1. Öffnen Sie die KTR-Datei im Wasserkocher, und ein Doppelklick auf die CSV-Datei input" und navigieren Sie zu der CSV-Datei, die Sie erstellt haben. Das Trennzeichen sollte bereits eingerichtet sein, um das Komma. Klicken Sie dann auf OK.
  2. Doppel-klicken Sie auf "Einfügen " Mitarbeiter" und wählen Sie DB-Anschluss befolgen Sie diese Anweisungen, Erstellen Sie eine Neue Datenbank-Verbindung

InformationsquelleAutor der Frage blunders | 2010-11-14

Schreibe einen Kommentar