-6

是否有任何工具或方法或其他东西可以帮助我分析过程。该过程包含大约 15 个步骤,每个作业步骤由一个 SQL 脚本表示。我正在与 Teradata 合作。

这是我的问题 - 我的同事更改了其中一个 SQL 脚本。此更改导致添加了一些新行。问题是 - 在最终报告中的流程结束时看不到添加的行。

由于这个过程中有很多表,连接,过滤(15个sql脚本)我无法掌握所有过程并找到答案为什么最终报告中缺少这些行?

因此,您是否有任何软件、方法或一些建议,关于我应该怎么做才能找到“为什么缺少行”的问题的答案。

4

2 回答 2

3

我建议在您的脚本中引入一系列易失性表,您可以使用这些表来帮助调试每个运行的 SQL 语句以确认正在发生的更改。易失性表是在用户假脱机空间内创建的,因此您无需向您的 DBA 团队询问永久空间或其他数据库中的额外权限来创建这些表。

一旦有了易失性表,您就可以开始查询易失性表并在电子表格中比较结果,以跟踪从一个步骤或脚本到下一个步骤或脚本发生的变化。特别注意数据类型、NULL 与 NOT NULL 以及 JOIN 条件。数据类型之间的细微差别可能足以导致某些东西无法满足相等条件并因此丢弃记录。

编辑: 您是否查看过 EXPLAIN 计划以查看优化器是否将写入的内容作为 OUTER JOIN 并将其转换为 INNER JOIN?如果您的逻辑中有任何 OUTER JOIN,则必须小心您在参与 OUTER JOIN 的表上的资格。如果您将条件放在 WHERE 子句中,优化器可能会将您的联接重写为 INNER JOIN。这可能会导致行从 JOIN 的 LEFT 或 RIGHT 侧脱落,具体取决于您编写的 JOIN。

Teradata 有一个 Visual Explain 工具,我发现它用处不大。我发现 Oracle 和 SQL Server 可以生成的内容使用起来更加直观,因为它们内置在查询工具中。Visual Explain 要求您加载 QCD 数据库,然后将工具指向它。充其量对我来说很麻烦。我发现追踪 EXPLAIN 计划更容易。你的旅费可能会改变。

于 2012-07-27T13:23:17.147 回答
2

首先,你怎么知道行丢失了?这是一个严重的问题。如果您不了解流程,您如何对预期的输出有信心?如果你从那一点开始探索,并理解为什么你确信这些行丢失了,那应该会让你倒退到理解。

没有一种神奇的工具可以简单地对过于复杂而难以理解的 SQL 进行逆向工程。

由于您的同事在更改之前和之后都有行为,因此我将对更改前后的所有中间表进行快照。

然后简单地比较行来看看有什么不同。

大概在中间表中的某个点,它们将开始或停止在前后之间的偏差。该脚本显然是第一个罪魁祸首。

重复直到输出符合要求。

于 2012-07-27T15:21:42.340 回答