将数据从一种数据库方案迁移到另一种数据库时的最佳做法

时间:2009-11-19 12:59:45

标签: etl

通常,当我处理项目时,我发现自己正在查看数据库方案,并且必须导出数据才能使用新方案。

很多时候,有一个数据库存储的数据相当粗糙。我的意思是它存储了大量未经过滤的字符。我发现我自己编写自定义的PHP脚本来过滤这些信息并创建一个漂亮的干净的UTF-8 CSV文件,然后我重新导入我的新数据库。

我想知道是否有更好的方法来解决这个问题?

3 个答案:

答案 0 :(得分:1)

没有人回答这个,但我曾经需要快速迁移数据库并最终使用sqlautocode,这是一个从现有数据库自动生成(python orm)模型的工具 - 该模型使用伟大的sqlalchemy orm图书馆。它甚至会生成一些示例代码,以便开始......(见下文)

令人惊讶的是,它开箱即用。您没有完整的迁移,但可以通过编程方式访问所有表(在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

答案 1 :(得分:1)

我建议使用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 - 连接到各种数据源,并提供大量转换和分析任务。

答案 2 :(得分:0)

您可以考虑Logstash

  

logstash是用于管理事件和日志的工具。您可以使用它来收集日志,解析它们并存储它们以供以后使用(例如,用于搜索)

Logstash像管道一样操作每个事件/日志:输入|过滤器|输出。 Logstash有许多输入插件可以接受不同的源/格式,您可以使用过滤器来解析源数据,然后输出到您需要的多种输出/格式。