将数据从电子表格迁移到RDBMS的策略是什么?

时间:2010-03-07 10:26:35

标签: database rdbms spreadsheet

这与我的其他问题when to move from a spreadsheet to RDBMS

相关联

决定从excel书中转移到RDBMS,这是我打算做的。

现有数据在工作簿中的两张纸上松散结构。第一张包含主要记录。第二张表允许附加数据。

我的目标DBMS是mysql,但我愿意接受建议。

  1. 定义RDBMS架构
  2. 定义Web服务以与数据库连接,因此可以同时用于UI和迁移。
  3. 定义迁移脚本
    • 从电子表格中读取每组附属行
    • 应用验证/约束
    • 使用网络服务
    • 写入RDBMS
  4. 在电子表格中定义宏/函数/模块以尽可能强制执行验证。这将允许在新的系统出现时使用现有系统。与此同时,(我希望)它最终会在迁移过程中减少迁移失败。
  5. 你会采取什么策略?

4 个答案:

答案 0 :(得分:1)

显然,您需要创建目标数据库和必要的表结构。 我会跳过Web服务并编写一个groovy脚本来读取.xls(使用POI库),验证并将数据保存在数据库中。

在我看来,任何涉及的内容(Web服务,GUI ......)都是不合理的:这些类型的任务非常适合脚本,因为它们简洁且极其灵活,而性能,代码库可扩展性和这不是一个问题。一旦有了可行的方法,您就可以将脚本调整到任何未来的文档中,并在几分钟或几小时内遇到不同的数据异常。

这都是假设您的数据不完整,需要过滤和/或清理。

或者,如果数据和验证规则不是太复杂,使用Kettle之类的可视化数据传输工具可能会获得良好的结果:您只需将.xls定义为源,即数据库表作为表,如果需要,一些验证/过滤规则并触发加载过程。相当无痛。

答案 1 :(得分:1)

这个问题有两个方面。

数据迁移

您的第一步将是“定义RDBMS架构”,但您将在多大程度上使用它?电子表格是众所周知的非标准化,因此有很多重复。你在另一个问题中说“数据结构松散,没有明确的限制。”如果您想将 转换为严格定义的模式(至少3NF),那么您将不得不进行一些清理。 SQL是数据操作的最佳工具。

我建议您构建两个临时表,每个工作表一个。尽可能松散地定义列(基本上是大字符串),以便加载电子表格的数据。将数据加载到临时表后,您可以运行查询来评估数据质量:

  • 有多少重复的主键?
  • 有多少种不同的数据格式?
  • 什么是查找代码?
  • 第二个工作表中的所有行都在第一个工作表中有父记录吗?
  • 代码格式,数据类型等的一致性如何?
  • 等等。

这些调查将为您编写用于填充实际架构的SQL提供良好的基础。

或者可能是数据如此绝望,以至于你决定坚持使用这两个表。我认为这是不太可能的结果(大多数应用程序都有一些底层结构,我们只需深入挖掘)。

数据加载

最好的办法是将电子表格导出为CSV格式。 Excel有一个向导来执行此操作。使用它(而不是Save As...)。如果电子表格中包含任何自由文本,则您将拥有包含逗号的句子,因此请确保选择一个非常安全的分隔符,例如^^~

大多数RDBMS工具都可以从CSV文件导入数据。 Postgresql和Mysql是非政府组织的明显选择(我认为成本是一个考虑因素),但SQL Server和Oracle都是免费的(如果受限制的)Express版本。 SQL Server显然与Excel具有最佳集成。 Oracle有一个称为外部表的漂亮功能,它允许我们定义一个表,其中数据保存在CSV文件中,无需登台表。

另一件需要考虑的事情是Google App Engine。这使用Big Table而不是RDBMS,但这可能更适合于松散结构化的数据。我建议这是因为您提到Google Docs作为替代解决方案。 GAE是一个有吸引力的选择,因为它是免费的(或多或少,如果使用超过一些非常慷慨的门槛,他们开始收费),它将解决与其他非政府组织的应用程序共享问题。显然,您的组织可能对Google托管其数据有一些疑虑。这取决于他们在哪个领域运作,以及信息的敏感性。

答案 2 :(得分:1)

如果您想使用自己的工具,请查看SeekWell,该工具可让您从Google表格中写入数据库。定义架构后,将表格选择到工作表中,然后编辑或插入记录,并将其标记为适当的操作(例如,更新,插入等)。设置更新时间表,您就完成了。进一步了解here。免责声明-我是联合创始人。

希望有帮助!

答案 3 :(得分:0)

可能做的工作超出了你的需要。 Excel电子表格可以保存为CVS或XML文件,许多RDBMS客​​户端支持将这些文件直接导入表格。

这可以允许您跳过编写Web服务包装和迁移脚本。在任何导入过程中,仍会正确执行您的数据库约束。但是,如果您的RDBMS数据模型或模式与Excel电子表格有很大不同,那么一些翻译当然必须通过脚本或XSLT进行。