查询正在teradata中进行假脱机

时间:2016-03-03 06:17:11

标签: teradata

我正在执行下面的查询,但是一个查询给了我结果,其他正在给我[错误2646] [SQLState HY000]在USER中没有更多的假脱机空间。

 SELECT DISTINCT PARTITION
    FROM  DB.TABLE 
     ORDER BY PARTITION  ASC;

Error:-[Error 2646] [SQLState HY000] No more spool space in USER.

但是当我执行它时,它会给我结果: -

 select * from (
 SELECT DISTINCT PARTITION
    FROM  DB."TABLE") x
    ORDER BY X.PARTITION ASC;

1 个答案:

答案 0 :(得分:3)

Teradata的优化程序通常会检查是否可以使用DISTINCT重写GROUP BY(反之亦然)。

在第一个查询中,由于ORDER BY(当然这是愚蠢的),因此选择 distinct 处理(再分配后跟 sort )。

使用DISTINCT的派生表将不会被忽略,即优化器将实现它。如果没有DISTINCT,它会应用聚合重写,它会将AMP本地聚合作为第一步,从而大大减少假脱机的使用。

如果您将COUNT(*)添加到#1,它将不会假脱机并返回有用的信息:)

另一方面,如果我想知道有数据的分区,我会查询dbc.Stats ......