Teradata在没有易变性表的情况下重新分发

时间:2015-11-13 16:04:42

标签: sql teradata data-warehouse sql-tuning derived-table

我陷入困境,因为IBM Cognos不支持任何类型的DDL,包括Teradata中的易失性表创建,因此无法改进即兴报告。 报告查询聚合以及包含大约5000个值的列表。我知道如何使用UDF和派生表来修复inlist部分,但是我想做一些与Volatile表相同的东西,我可以根据自己的选择重新分配,而不是实际创建一个。 所以我想告诉优化器是" Pl加入这3个表并通过这个Key组合重新分配它们#34;然后加入查询的其余部分。 我想知道是否创建一个派生表来加入这些"目标表"然后加入DT将有助于创造这种效果

sel A.1, A.2, Sum ( C.1) , Sum ( D.1) , case when A.5 in ( In-list) then "string" else "string2" end , sum (...) more columns ...etc 
from 
A Join B on ____ join C on ______ Join D ____ 

过滤条件

我的方法 根据分析表C D E在他们的线轴上倾斜我喜欢这样发生第一个A加入C加入D加入E.它将通过A的PI ......重新分配C D E重新分配,然后是其余的连接

 sel < condition as before>
    from 
     ( sel < column list> from A Join C Join D join E --with respective Join conditions ) dt Join F on ___ Join G on____

所以我想要的是两件事

  • 表连接的顺序第一个A C D E已连接
  • 因此创建的Dt应该具有基于其余维度的PI 这样我就可以确定明星加入

1 个答案:

答案 0 :(得分:2)

如果在派生表中放置DISTINCT或GROUP BY,优化器将无法将派生表折叠到派生表外部的联接中。它将强制优化器首先在spool中实现派生表。派生表将根据外部查询的连接条件重新分发。

您将需要测试将GROUP BY或DISTINCT放在派生表上的影响,因为它消除了优化器可能采取的某些决策,否则会将其计算为更高效。