2009-11-19 2 views
0

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

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

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

ответ

0

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

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

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

0

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

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

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

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

Пример кода:

# some example usage 
if __name__ == '__main__': 
db = create_engine(u'mysql://username:[email protected]/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 
0

Я бы предложил использовать инструмент 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 - подключаются к различным источникам данных и предлагают множество задач преобразования и профилирования.

 Смежные вопросы

  • Нет связанных вопросов^_^