【问题标题】:compare data in 2 SQL tables比较 2 个 SQL 表中的数据
【发布时间】:2009-06-15 09:03:09
【问题描述】:

作为数据回归和质量保证练习的一部分,我需要寻找两个表之间的差异,理想情况下,它们应该几乎相同。我查看了大量商业产品,但似乎找不到满足我们所有要求的产品:

  • 必须能够非常高效地比较 LARGE 表(1000 万行,200 列)

  • 必须跨不同的数据库服务器和不同的数据库供应商工作(Oracle 与 DB2)

  • 必须能够比较具有不同结构的表,忽略两个表之间不共享的列

  • 必须使用用户提供的多列主键——不能依赖于 DB 中定义的键

  • 必须在 linux/solaris 上运行。将作为在企业环境中执行的完全自动化流程的一部分运行。

  • 必须能够无头运行(无 GUI)

  • 必须生成可识别行差异(仅一侧的行)和值差异的格式化报告

  • 客户愿意为正确的解决方案支付企业级价格。换句话说,价格没有对象。

有人见过这样的吗?

【问题讨论】:

    标签: sql database


    【解决方案1】:

    不是最好的解决方案,但出于灵活性考虑,我们将其实现为一组 perl 脚本,用于提取数据然后进行文件比较。

    大多数商业数据库都具有出色的批量复制实用程序(bcp、sqlload 等),Perl 在字符串比较和处理大文件方面速度很快。

    【讨论】:

    • 我们最初尝试过这个。我们有两个问题。一个是如果一侧有一排在另一侧缺失。通用 diff 算法将在此时中断,防止 diff 超出第一行不匹配的点。第二个问题是它非常耗时。有时,我们已经知道存在差异,因为行数不匹配。我们只需要一份快速报告来解释最初的几个差异,以便我们在继续之前解决该问题。
    • 另外,我们真的希望有更开箱即用的东西。对于我们想要执行的不同差异实例(不同的表、不同的忽略列等),bcp + perl 选项不是通用的。每次我们想改变它的工作方式时,我们都必须修改 perl scipts。理想的解决方案不涉及任何编程,只需要某种配置文件。
    • @unknown: ??不知道您所说的“此时将中断”是什么意思。其余的,这是一个定制以满足您的需求的问题。如果您想先检查行数,请执行此操作。如果您想在第一个 X 差异后停止,请执行此操作。这是一个 SMOP。
    • @unknown: perl 脚本可以读取配置文件:)
    • 开箱即用地思考“方式”,像 Informatica 这样的 ETL 工具会有所帮助吗?这两个表可以配置为源,并且可以在转换中实现差异逻辑。这将需要更少的编码,并且可以处理异构表。
    【解决方案2】:

    我会根据您定义的标准对数据库行进行哈希处理,然后使用它。如果比较细节是相当静态的,您可能希望将散列保留为表本身的新列或单独的专用表。然后,适当的索引将允许您执行任何您希望的比较。

    【讨论】:

      【解决方案3】:

      不知道有没有关系,看看 "Diffing" objects from a relational database

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 2011-11-22
        • 1970-01-01
        相关资源
        最近更新 更多