Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么缺少行?_Sql_Database_Teradata - Fatal编程技术网

Sql 为什么缺少行?

Sql 为什么缺少行?,sql,database,teradata,Sql,Database,Teradata,是否有任何工具、方法或其他东西可以帮助我分析流程。 该过程包含大约15个步骤,每个作业步骤用一个SQL脚本表示。我正在使用Teradata 这是我的问题-我的同事更改了一个SQL脚本。此更改导致添加了一些新行。问题是-添加的行在最终报告的流程结束时看不到 由于在这个过程中有很多表、连接和过滤(15个sql脚本),我无法掌握所有过程并找到最终报告中为什么缺少这些行的答案 因此,对于“为什么缺少行”这一问题,您是否有任何软件、方法或建议?我建议在您的脚本中引入一系列可变表您可以使用它来帮助调试运行以

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

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

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


因此,对于“为什么缺少行”这一问题,您是否有任何软件、方法或建议?我建议在您的脚本中引入一系列可变表您可以使用它来帮助调试运行以确认正在发生的更改的每个SQL语句。Volatile表是在用户spool空间中创建的,因此您无需向DBA团队请求perm空间或其他数据库中的其他特权来创建这些表

一旦有了volatile表,您就可以开始查询volatile表并在电子表格中比较结果,以便跟踪从一个步骤或脚本到下一个步骤或脚本所发生的更改。请特别注意数据类型、NULL与notnull以及连接条件。数据类型之间的细微差异可能足以导致某些内容无法满足相等条件,从而导致记录丢失

编辑: 您是否查看过解释计划以查看优化器是否将写入的内容作为外部联接并将其转换为内部联接?如果您的逻辑中有任何外部联接,那么您必须小心如何在参与外部联接的表上进行限定。如果您将条件放在WHERE子句中,优化器可能会将您的联接作为内部联接重新写入。这可能会导致行脱离联接的左侧或右侧,具体取决于您编写的联接


Teradata有一个可视化的解释工具,我发现它没有多大用处。我发现Oracle和SQL Server可以生成更直观的查询工具,因为它们内置在查询工具中。VisualExplain要求您加载QCD数据库,然后将工具指向它。充其量对我来说很麻烦。我发现追踪解释计划更容易。您的里程数可能会有所不同。

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

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

因为您的同事在更改前后都有一个行为,所以我会拍摄更改前后所有中间表的快照

然后简单地比较这些行,看看有什么不同

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


重复操作,直到输出符合要求。

我建议查看SQL查询。我们可以看看代码吗,这样我们就可以检查
为什么缺少行了
?也许你描述得不太好,但当我读到这个问题时,我得到的是:“代码中有错误。但我不想费心去看代码或调试代码来试图找出答案。我还应该做什么?“如果您的同事修改了某些内容,但未达到预期的行为,您的同事可能需要继续修改它,直到达到所需的行为。如果您无法查看查询以了解它们是如何失败的,那么您需要聘请一位了解SQL的顾问。-1这是完全无法回答的,因为所提供的信息-Rob的英勇努力,尽管Rob,谢谢你的回答。问题是——我或多或少尝试过这样分析。但问题是——在发生变化后,它会在2-3个步骤中失去控制。我的同事建议我识别新添加的行,然后选择一行,然后逐步查找筛选行的位置。我已经确定了被过滤掉的行,但是当我尝试我同事建议的方法时,我被卡住了,因为事情变得太复杂了——一部分行被提取,然后进行连接,然后被转移到另一个表中,……因此,我想——是否有一些软件(希望是Teradata的)这可以帮助我可视化整个过程,这样我就可以看到哪些步骤会影响关键行。或者,由于我与Teradata合作了一个月,您的专家在这种情况下会做什么?只是分析简单的老SQL脚本?我心想,一定有某种工具可以简化这种分析。。。对吗?@Rob:你真的见过这种行为吗?(“优化器将写入外部连接并将其转换为内部连接”)这将是一个bug。另一部分:“如果您将条件放在WHERE子句中,优化器可能会将您的连接重新写入内部连接。”这不是“可能”,而是这样做的。如果WHERE条件包括外部表,则这种情况下的结果总是与内部联接一样。@Cade是的,您可能是对的。尽管如此,这一措辞仍具有误导性。