【问题标题】:Teradata redistributing without a volatile table没有易失性表的 Teradata 重新分配
【发布时间】:2016-02-15 06:47:12
【问题描述】:

我陷入了无法改进即兴报告的情况,因为 IBM cognos 不支持任何类型的 DDL,包括在 Teradata 中创建易失性表。 报告查询聚合并在列表中包含大约 5000 个值。我知道如何使用 UDF 和派生表修复 inlist 部分,但我想做一些类似于 Volatile 表的事情,我可以根据我的选择重新分配,而无需实际创建一个。 所以我想告诉优化器的是“请加入这 3 个表并通过这个键组合重新分配它们”,然后加入查询的其余部分。 我想知道创建一个连接这些“目标表”然后加入 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 在其线轴上倾斜的分析,我希望这发生在 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____

所以我想要的是两件事

  • 表连接顺序第一个 A C D E 被连接
  • 因此创建的 Dt 应具有基于其余维度的 PI 这样我就可以确保star join

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,我会试试的
    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2013-11-29
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多