Лучшие практики при переносе данных из одной схемы базы данных в другую?

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

Много раз существовала база данных, в которой хранились данные, которые были довольно грубыми. Я имею в виду, что он хранится с большим количеством нефильтрованных символов. Я обнаружил, что сам пишу собственные php-скрипты для фильтрации этой информации и создания хорошего чистого CSV-файла UTF-8, который затем повторно импортирую в свою новую базу данных.

Я хотел бы знать, есть ли лучшие способы справиться с этим?


etl
person Zeropx    schedule 19.11.2009    source источник


Ответы (3)


Вы можете рассмотреть Logstash.

logstash — это инструмент для управления событиями и журналами. Вы можете использовать его для сбора журналов, их анализа и сохранения для последующего использования (например, для поиска).

Logstash работает с каждым отдельным событием/журналом, как канал: input | фильтр | выход. Logstash имеет множество входных плагинов для приема различных источников/форматов, и вы можете использовать фильтр для анализа ваших исходных данных, а затем вывода в несколько выходов/форматов, которые вам нужны.

person fansia    schedule 04.09.2014

Я бы предложил использовать инструмент ETL или, по крайней мере, следовать практике ETL при перемещении данных. Учитывая, что вы уже занимаетесь очисткой, вы можете пройти весь путь ECCD — извлечь, очистить, согласовать, доставить. Если вы выполняете очистку самостоятельно, рассмотрите возможность сохранения промежуточных файлов csv для целей отладки и аудита.

1. Extract (as is, junk included) to file_1
2. Clean file_1 --> file_2
3. Conform file_2 --> file_3
4. Deliver file_3 --> DB tables

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

Инструменты ETL, такие как Microsoft SSIS, Oracle Data Integrator, Pentaho Data Integrator, подключаются к различным источникам данных и предлагают множество задач по преобразованию и профилированию.

person Damir Sudarevic    schedule 25.11.2009

Никто не ответил на этот вопрос, но однажды мне нужно было быстро перенести базу данных, и в итоге я использовал sqlautocode, который представляет собой инструмент для автоматического создания модели (на языке Python) из существующей базы данных. Модель использует отличный sqlalchemy библиотека форм. Он даже генерирует пример кода для начала... (см. ниже)

Удивительно, но он работал из коробки. У вас нет полной миграции, но есть простой способ программного доступа ко всем вашим таблицам (на python).

Я не делал этого в этом проекте, но вы, конечно, могли бы автоматически сгенерировать свой слой orm для целевой БД, а затем написать скрипт, который переносит нужные строки в нужную структуру.

Как только вы переведете содержимое своей БД в python, вы сможете иметь дело с u'unicode', даже если это потребует некоторых попыток, в зависимости от фактической грубости...

Пример кода:

# some example usage
if __name__ == '__main__':
db = create_engine(u'mysql://username:password@localhost/dbname')
metadata.bind = db

# fetch first 10 items from address_book
s = customers.select().limit(10)
rs = s.execute()
for row in rs:
    print row
person miku    schedule 19.11.2009