2016-03-03 121 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