【问题标题】:SQL for validating/reconciling data across two tables, when each is a copy of the other用于跨两个表验证/协调数据的 SQL,当每个表都是另一个表的副本时
【发布时间】:2015-11-03 23:50:26
【问题描述】:

我希望跨 2 个表验证数据,其中 TableA(在用户源数据库 - DB2 中)是 TableB(在数据仓库 - DB2/Netezza 中)的副本。

由于复制数据的过程不稳定并且每天运行而不是实时运行,因此目标数据库中存在差异,我需要找出并找到。此外,不希望在服务器上增加很大的负载,这可能会破坏组织的正常运营。

我目前正在做以下事情:

a) SUM checks on all numeric fields 
b) MAX / MIN checks
c) Row Count checks (COUNT(*))
d) Checking the Data Types on both the DB's to be equal
e) Checking the DISTINCT count of the PRIMARY fields
f) Check MAX of Date on which the row was copied over (we put a new column to specify when that row was copied over)

除了上述之外,还有没有其他更简单的方法可以在单个 SQL 查询中完成,并且不会占用数据库服务器上的太多资源?

另外,有没有人知道一种方法来匹配 DB2-DB2 和 DB2-Netezza 表中的行与行,就像使用 SAS 表一样?

注意:

a) Netezza does not have the concept of UNIQUE or PRIMARY, so Referential Integrity and UNIQUE checking is not valid.
b) All the tables have > 100M rows, so running a simple RowCount on each table can sometimes take upto 30-45 mins

【问题讨论】:

    标签: database validation db2 netezza database-reconciliation


    【解决方案1】:

    我想知道您的数据中是否有一两个字段可以让您将其识别为增量数据或差异数据,如果没有,那么您可能需要查看该数据模型。另外,我肯定会首先关注基础设施,并使数据复制过程稳定可靠。

    另一方面,很难想象为什么要在其他地方的数据仓库中实现数据副本,该数据应该被查询用于分析目的,使用数据仓库报告工具,而且通常至少一天大。所以那里没有实时的。

    您正在查找的查询可能存在,但在您描述的具有 >100M 行和 45 分钟 RowCounts 的系统中,也许,只是也许需要永远和一天。

    底线是,恕我直言,您可能看错了方向。

    【讨论】:

    • 问题是,我们从不同的数据库(Oracle、Sybase、DB2、MS SQL、MySQL)获取数据,进入数据仓库。我希望确保传入的数据(我们使用不同的脚本/工具来获取数据)与前一天上传到基本源表的数据相同。如果没有,我希望找到丢失的数据的增量。对于如此大的数据集,对 2 个表执行 MINUS 并不总是可行的。
    • 另外,我希望了解,如果我上面描述的方法(SUM、MIN、MAX、HASH of record 等)是检查数据差异的好方法,还是有一些更简单的方法有什么方法吗?其中,我实际上可以逐行比较每条记录,而不是对我们拥有的数据进行汇总。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    相关资源
    最近更新 更多