Pull to refresh

Comments 7

Как я понял, плоскую таблицу загрузили в таблицу БД без связи с другими таблицами БД.

А как загружать то же самое, если некоторые поля должны лечь в другие таблицы БД, а в данной таблице должны появиться соответствующие id из тех таблиц, связанных с этой?

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

Признаться, я тоже догадывался об этой необходимости. Вопрос в том, как это лучше сделать. Заглядывая сюда, я ожидал увидеть именно такой пример.

Где лучше посмотреть пример грамотного решения?

Вы про загрузку нескольких .csv-файлов в новую БД? А никак не лягут, если это потом не прописать кодом. Попробую следующей статьей показать на примере. Если Вы именно это имели ввиду.

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

То-есть, возможно, надо при загрузке сразу список уникальных названий филиала загрузить в другую таблицу, а при загрузке основной csv видимо делать поиск в таблице «филиалы» по значению, а помещать в основную таблицу номер соответствующего индекса из «филиалы».

Или наоборот, грузить main как есть, а потом делать что-то вроде создания новой таблицы по select filials from main group by filials, создания там индекса и создания в main новой колонки filial_id со связью, а колонку main.filials удаляем. Я так делал, но правильно ли это?

Или ещё как… Сделать функцию добавления новой строки, разбирающую строку исходной csv и раскладывающую нужные поля по уже созданным пустым таблицам и формирующую финальный insert для main уже с правильными значениями filial_id… медленно, но верно…тогда эта функция будет полезна в дальнейшем для пополнения или обновления.

Можете попробовать через Pentaho Data Integration или Apache NiFi

Вероятно вам стоит сделать в другой бд буферную таблицу, потом на основе нее сделать что-то вроде

insert .... from select ...

Если это повторяющийся процесс, то посмотрите в сторону различных etl решений, например, nifi , apache airflow

Если вы хотите выгрузить таблицу + связи, то вероятно вам потребуется выгрузка через pg_dump

Sign up to leave a comment.

Articles