Используя Pentaho Kettle, как мне загрузить несколько таблиц из одной таблицы с сохранением ссылочной целостности?

Необходимо загрузить данные из одного файла с более чем 100 000 записей в несколько таблиц в MySQL, поддерживая отношения, определенные в файле / таблицах; это означает, что отношения уже совпадают. Решение должно работать с последней версией MySQL и должно использовать движок InnoDB; MyISAM не поддерживает внешние ключи.

Я совершенно не знаком с использованием Pentaho Data Integration (он же Kettle), и любые указатели будут приветствоваться.

Я могу добавить, что это требование, чтобы ограничения внешнего ключа НЕ были отключены. Поскольку я понимаю, что если что-то не так с ссылочной целостностью базы данных, MySQL не будет проверять ссылочную целостность, когда ограничения внешнего ключа снова включены. ИСТОЧНИК: 5.1.4. Системные переменные сервера - foreign_key_checks

Все подходы должны включать некоторые из проверок и стратегию отката в случае сбоя вставки или невозможности поддерживать ссылочную целостность.

Опять же, совершенно в новинку и стараюсь изо всех сил чтобы предоставить как можно больше информации, если у вас есть какие-либо вопросы или просьбы о разъяснениях - просто дайте мне знать.

Если вы можете опубликовать XML из файлов kjb и ktr (задания / преобразования), это будет СУПЕР. Могу даже выследить каждый ваш комментарий / ответ и проголосовать за него ... :-) ... правда, мне очень важно найти ответ на этот вопрос.

Спасибо!


ОБРАЗЕЦ ДАННЫЕ: Чтобы уточнить пример, допустим, я пытаюсь загрузить файл, содержащий имя сотрудника, офисы, которые они занимали в прошлом, и историю их должностей, разделенных табуляцией.

Файл:

EmployeeNameOfficeHistoryJobLevelHistory
John Smith501Engineer
John Smith601Senior Engineer
John Smith701Manager
Alex Button601Senior Assistant
Alex Button454Manager

] ПРИМЕЧАНИЕ: База данных с одной таблицей полностью нормализована (насколько может быть одна таблица) - и, например, в случае «Джон Смит» есть только один Джон Смит; это означает, что нет дубликатов, которые могли бы привести к конфликту ссылочной целостности.

В схеме базы данных MyOffice есть следующие таблицы:

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

Итак, в этом случае. таблицы должны выглядеть так:

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

Вот MySQL DDL для создания базы данных и таблиц:

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;



Мои заметки в ответ на выбранный ответ:

PREP:

  1. (a) Используйте образцы данных, создайте CSV заменив на разделитель-запятую.
  2. (b) Установите MySQL и создайте образец базы данных, используя образец MySQL DDL
  3. (c) Установите Kettle (он основан на Java и будет работать на всем, что работает на Java)
  4. (d) Загрузить файл KTR

Пошаговый поток данных: (Мои заметки)

  1. Откройте файл KTR в Kettle, дважды щелкните «Входной файл CSV» и перейдите к CSV файл, который вы создали. В качестве разделителя уже должна быть установлена ​​запятая. Затем нажмите ОК.
  2. Дважды щелкните «Вставить сотрудников» и выберите соединитель БД, затем следуйте этим инструкциям на Создание нового подключения к базе данных

21
задан blunders 14 November 2010 в 22:12
поделиться