2016-03-03 91 views
0

我正在执行查询,但有一个查询正在给我resultand other给我[错误2646] [SQLState HY000] USER中没有更多的后台空间。查询在teradata中正在跳出

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; 

回答

3

Teradata的优化器通常会检查,如果一个DISTINCT可以用GROUP BY(反之亦然)被改写。

在你第一次查询,那么选择不同处理(这是重新分配之后是排序)由于ORDER BY(当然这是愚蠢的)。

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

如果添加COUNT(*)#1也不会阀芯并返回有用的信息:)

在另一方面,如果我想了解与数据分区我想查询dbc.Stats ...

+0

@dnoeth ...非常感谢您的宝贵信息。实际上,第一个查询是由TDCH(用于hadoop的Teradata连接器)创建的,因此我运行了第二个查询来检查它是否有效。我的表格很大,MVC压缩了一个240 GB的数据。由于查询是由TDCH内部生成和执行的,因此我无法查询统计信息。然而,我明白,在第二种情况下,首先不同的分区将被搜索,然后顺序完成,所以它避免重新分配数据,对吗? –

+0

@anwaar_hell:是的,在删除重复项之前,DISTINCT重新分配所有行,而GROUP BY在重新分配之前删除重复项。 – dnoeth