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

StackOverflow https://stackoverflow.com/questions/4175566

  •  09-10-2019
  •  | 
  •  

Вопрос

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

Я совершенно новых для использования интеграции данных Pentaho (aka keptle), и любые указатели будут оценены.

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

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

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

Если вы можете опубликовать XML из файлов KJB и KTR (задания / преобразования), которые были бы супер. Может даже охотиться на каждый комментарий / ответ, который вы каждали где угодно, и голосуете их ... :-) ... Действительно, это действительно важно для меня найти ответ на это.

Спасибо!


ПРИМЕР ДАННЫХ: Чтобы лучше уточнить пример, давайте предположим, что я пытаюсь загрузить файл, содержащий имя сотрудника, офисы, которые они заняли в прошлом, и история титула работы, разделенная вкладкой.

Файл:

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

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

То 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

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

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. (а) Используйте данные образца, создайте CSV, изменяя <TAB> до запятой разграниченной.
  2. (b) Установите MySQL и создайте образец базы данных с помощью образца DDL MySQL
  3. (c) Установите чайник (это Java на основе и будет работать на все, что работает Java)
  4. (d) скачать файл KTR

Dataflow за шагом: (Мои заметки)

  1. Откройте файл KTR в чайнике и дважды щелкнул «ввод файла CSV» и перейдите к создатому файлу CSV. Разделитель уже должен быть установлен на запятую. Затем нажмите «Хорошо».
  2. Дважды щелкните «Вставьте сотрудников» и выберите разъем DB, затем следуйте этим направлениям на Создание нового подключения к базе данных
Это было полезно?

Решение

Я собрал образец Преобразование (щелкните правой кнопкой мыши и выберите «Сохранить ссылку) основываясь на том, что вы предоставили. Единственный шаг, на котором я чувствую себя немного неопределенным, это последние входы таблицы. Я в основном пишу данные присоединения к столу и позволить ему не удавать, если определенные отношения уже существуют.

примечание:

Это решение на самом деле не соответствует действительности «Все подходы должны включать некоторые из валидации, а стратегия отката должна предотвратить неудачу вставки или не поддерживать ссылочную целостность». Критерии, хотя это, вероятно, не потерпят неудачу. Если вы действительно хотите настроить что-то сложное, что мы можем, но это, безусловно, должно выходить с этими преобразованиями.

alt text

Dataflow за шагом

1. Начнем с чтения в вашем файле. В моем случае я преобразовал его в CSV, но вкладка тоже встроена.alt text

2. Теперь мы собираемся вставить имена сотрудников в таблицу сотрудников, используя combination lookup/update. Отказ После вставки мы добавим Workeee_id в наш DataStream как id и удалить EmployeeName из потока данных.

alt text

3. Здесь мы просто используем шаг выбора значений для переименования id поле для сотруднизу_id.alt text

4. Вставьте заголовки заданий, как мы выполнили сотрудников и добавив идентификатор заголовка в наш DataStream также удалять JobLevelHistory от DataStream.

alt text

5. Простое переименование идентификатора заголовка в title_id (см. Шаг 3)alt text

6. Вставьте офисы, получите идентификатор, удалите офигуристорию из потока.

alt text

7. Простое переименование идентификатора офиса в Office_id (см. Шаг 3)

alt text

8. Скопируйте данные с последнего шага на два потока со значениями employee_id,office_id и employee_id,title_id соответственно.

alt text alt text

9. Используйте вставку таблицы, чтобы вставить данные присоединения. Я получил его выбрал, чтобы игнорировать ошибки вставки, так как могут быть дубликаты, а ограничения PK сделают несколько строк.

Выходные таблицы

alt text

alt text

alt text

alt text

alt text

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top