Как мне заполнить рациональную многотабличную базу данных MySQL из существующей базы данных с одной таблицей?

В основном у меня есть много огромных файлов с разделителями, которые, как я знаю, я могу импортировать в виде таблицы, но мне нужно сопоставить эти данные с существующей рациональной базой данных MySQL с несколькими таблицами. Не должно быть никакого конфликта с типами данных, но я супер новичок в этом, поэтому, пожалуйста, укажите все, на что я должен обратить внимание. Ясно, что я не собираюсь запускать это в производство, пока не узнаю, что это работает.

Не на 100 % уверен, что stackoverflow — это подходящее место, чтобы задать вопрос о базе данных, но я не смог найти другого более подходящего Stack Exchange.

Опубликован этот вопрос в SuperUser ищем графический интерфейс для этого, но я готов к кодированию, так как он выполняет свою работу. Как такового целевого языка нет, просто требуется, чтобы база данных была MySQL.

Кроме того, нашел этот Q/A stackoverflow, который касается MS-SQL SSIS (которую я не планирую использовать из-за стоимости, но содержание и проблемы, с которыми приходится сталкиваться, имеют ту же природу, как кажется.) -- Загрузка нескольких таблиц с использованием служб SSIS, сохраняющих отношения внешнего ключа


person blunders    schedule 09.11.2010    source источник


Ответы (1)


Я предлагаю использовать инструмент ETL (извлечение, перевод, загрузка) из пакета Pentaho Business Intelligence. У него немного кривой обучения, но он будет делать именно то, что вы ищете. Их инструмент ETL называется Kettle, и он становится чрезвычайно мощным, как только вы его освоите.

Существует две версии Pentaho: корпоративная версия с бесплатной пробной версией и бесплатная версия для сообщества. Версия для сообщества более чем функциональна, но вы можете попробовать и корпоративную версию.

Вот несколько ссылок

Сайт Pentaho Community Edition

Сайт чайника

Корпоративный сайт Pentaho

Обновление: вывод нескольких таблиц

Одним из ключевых шагов в вашем преобразовании будет комбинированный поиск-обновление. Этот шаг проверяет данную таблицу, чтобы увидеть, существует ли запись из вашего потока данных, и вставляет новую запись, если это не так. Независимо от того, новая это запись или старая, она добавит ключевое поле из этой записи в ваш поток данных. По мере продвижения вы будете использовать эти ключи в качестве внешних ключей при импорте данных в связанные таблицы.

person rwilliams    schedule 09.11.2010
comment
@r-dub: Спасибо. Можно ли автоматизировать процесс ETL Pentaho (Kettle), то есть я создаю рабочий процесс преобразования данных, а затем либо запускаю его как службу, либо запускаю каждые XX минут? Кроме того, в поисках способа сделать это я до сих пор не видел способа заставить Kettle обрабатывать сопоставление таблицы с существующей базой данных с несколькими таблицами; это означает, что он обрабатывает пары отношений между таблицами и связанную нормализацию данных между указанными таблицами. Я просмотрел документацию и оглавление соответствующей книги и не могу найти ничего о том, как сделать это с помощью Kettle; ссылка в следующем комментарии. - person blunders; 09.11.2010
comment
Документы Kettle: wiki.pentaho.com/display/EAI/ КНИГА о чайнике: packtpub.com/toc/ - person blunders; 09.11.2010
comment
Вы можете запускать задачи с помощью чего-то вроде cron или планировщика задач. Также, когда дело доходит до нескольких столов, у вас не должно быть никаких проблем. Когда вы добавляете строки в таблицу «верхнего уровня», вы будете добавлять их первичные ключи к вашему набору данных, который затем используется для внешних ключей при заполнении дочерних таблиц. - person rwilliams; 09.11.2010
comment
@r-dub: +2, плюс выбрано в качестве ответа... Круто, спасибо - просто хотел убедиться, выбрав вас в качестве ответа, спасибо за быстрый ответ! - person blunders; 09.11.2010
comment
@rwilliams aka r-dub: Итак, потратил 12-16 часов, пытаясь заставить Kettle выполнить предложенный вами подход, но еще даже не заставил его работать. Опубликовал этот вопрос с примерами данных и схемой MySQL DDL. stackoverflow.com/questions/4175566/ Если у вас есть какие-либо дополнительные предложения, это было бы огромной помощью. - person blunders; 14.11.2010
comment
Я посмотрю на это и постараюсь дать вам образец преобразования - person rwilliams; 14.11.2010
comment
@rwilliams aka r-dub: +1 Отлично, спасибо! До сих пор я получил его только для чтения из одной таблицы (в данном случае excel) и записи в одну таблицу в MySQL с добавлением количества строк. Взломал это вместе, используя образцы кода с этой страницы: type-exit.org/adventures-with-open-source-bi/2010/07/ Здесь есть подробная документация по шагу Combo-L/U: тип -exit.org/adventures-with-open-source-bi/2010/07/, если я заставлю это работать, я смогу использовать везде, чтобы помочь мне преобразовать плоские БД в РСУБД. - person blunders; 14.11.2010
comment
@ALL: Всем, кто читает это, r-dub отправил рабочий ответ здесь: stackoverflow.com/questions/4175566 / - person blunders; 15.11.2010