我正在执行下面的查询,但是一个查询给了我结果,其他正在给我[错误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;
答案 0 :(得分:3)
Teradata的优化程序通常会检查是否可以使用DISTINCT
重写GROUP BY
(反之亦然)。
在第一个查询中,由于ORDER BY
(当然这是愚蠢的),因此选择 distinct 处理(再分配后跟 sort )。
使用DISTINCT
的派生表将不会被忽略,即优化器将实现它。如果没有DISTINCT
,它会应用聚合重写,它会将AMP本地聚合作为第一步,从而大大减少假脱机的使用。
如果您将COUNT(*)
添加到#1,它将不会假脱机并返回有用的信息:)
另一方面,如果我想知道有数据的分区,我会查询dbc.Stats
......