1

很多时候,当我在一个项目上工作时,我发现自己在查看数据库方案并且不得不导出数据以使用新方案。

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

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

4

3 回答 3

3

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

于 2009-11-25T17:45:57.640 回答
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
于 2009-11-19T13:51:46.957 回答
0

你可以考虑Logstash

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

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

于 2014-09-04T10:11:32.640 回答