没有 volatile table 的 Teradata 重新分配
Teradata redistributing without a volatile table
我陷入了无法改进即兴报告的境地,因为 IBM cognos 不支持任何类型的 DDL,包括在 Teradata 中创建 Volatile table。
报告查询聚合和包含大约 5000 个值的列表。我知道如何使用 UDF 和派生的 table 修复 inlist 部分,但我想做一些相当于 Volatile table 的事情,我可以根据自己的选择重新分配,而无需实际创建。
所以我想告诉优化器的是 "Pl join these 3 tables and redistribute them by this Key combination" 然后加入查询的其余部分。
我想知道是否创建派生的 table 加入这些 "targeted tables" 然后加入 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 ____
过滤条件
我的做法
根据 tables C D E 在他们的线轴上倾斜的分析,我希望这发生在 1st A join C join D Join 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____
所以我想要的是两件事
- table序列加入第一个A C D E加入
- 这样创建的Dt应该有一个基于其余维度的PI
这样我就可以确保加入星号
如果在派生 table 中放置 DISTINCT 或 GROUP BY,优化器无法将派生 table 折叠到派生 table 之外的连接中。它将强制优化器首先在 spool 中实现派生的 table。派生的table会根据join条件重新分配给外层查询
您将需要测试将 GROUP BY 或 DISTINCT 放在派生 table 上的影响,因为它消除了优化器可能以其他方式做出的某些决策,因为它的成本更高。
我陷入了无法改进即兴报告的境地,因为 IBM cognos 不支持任何类型的 DDL,包括在 Teradata 中创建 Volatile table。 报告查询聚合和包含大约 5000 个值的列表。我知道如何使用 UDF 和派生的 table 修复 inlist 部分,但我想做一些相当于 Volatile table 的事情,我可以根据自己的选择重新分配,而无需实际创建。 所以我想告诉优化器的是 "Pl join these 3 tables and redistribute them by this Key combination" 然后加入查询的其余部分。 我想知道是否创建派生的 table 加入这些 "targeted tables" 然后加入 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 ____
过滤条件
我的做法 根据 tables C D E 在他们的线轴上倾斜的分析,我希望这发生在 1st A join C join D Join 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____
所以我想要的是两件事
- table序列加入第一个A C D E加入
- 这样创建的Dt应该有一个基于其余维度的PI 这样我就可以确保加入星号
如果在派生 table 中放置 DISTINCT 或 GROUP BY,优化器无法将派生 table 折叠到派生 table 之外的连接中。它将强制优化器首先在 spool 中实现派生的 table。派生的table会根据join条件重新分配给外层查询
您将需要测试将 GROUP BY 或 DISTINCT 放在派生 table 上的影响,因为它消除了优化器可能以其他方式做出的某些决策,因为它的成本更高。