查询正在teradata中输出假脱机
我正在执行下面的查询,但一个查询给了我结果,另一个查询给了我[Error 2646][SQLState HY000]用户中没有更多的假脱机空间查询正在teradata中输出假脱机,teradata,Teradata,我正在执行下面的查询,但一个查询给了我结果,另一个查询给了我[Error 2646][SQLState HY000]用户中没有更多的假脱机空间 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
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;
Teradata的优化器通常检查
不同的是否可以使用分组方式重写(反之亦然)
在您的第一个查询中,它选择了独特的处理(即重新分配,然后进行排序),因为排序是由
(当然这是愚蠢的)
使用DISTINCT
的派生表将不会被折叠,即优化器将具体化它。如果没有独特的
,它将应用聚合重写,这将执行AMP本地聚合作为第一步,从而大大减少假脱机的使用
如果将COUNT(*)
添加到#1,它将不会输出并返回有用的信息:)
另一方面,如果我想知道有数据的分区,我会查询dbc.Stats
..不同的
是否可以使用分组方式
重写(反之亦然)
在您的第一个查询中,它选择了独特的处理(即重新分配,然后进行排序),因为排序是由
(当然这是愚蠢的)
使用DISTINCT
的派生表将不会被折叠,即优化器将具体化它。如果没有独特的
,它将应用聚合重写,这将执行AMP本地聚合作为第一步,从而大大减少假脱机的使用
如果将COUNT(*)
添加到#1,它将不会输出并返回有用的信息:)
另一方面,如果我想知道有数据的分区,我会查询
dbc.Stats
..@dnoeth…非常感谢您提供的宝贵信息。实际上,第一个查询是由TDCH(Teradata connector for hadoop)创建的,所以我运行了第二个查询来检查它是否有效。我的表很大,是用MVC压缩的,有240 GB的数据。我无法查询统计数据,因为查询是由TDCH内部生成和执行的。但我的理解是,在第二种情况下,第一个不同的分区将被搜索,然后按done排序,这样就避免了数据的重新分布,对不对??@anwaar_hell:Yep,DISTINCT在删除重复项之前会重新分发所有行,而GROUP BY在重新分发之前会删除重复项。@dnoeth…非常感谢您提供的宝贵信息。实际上,第一个查询是由TDCH(Teradata connector for hadoop)创建的,所以我运行了第二个查询来检查它是否有效。我的表很大,是用MVC压缩的,有240 GB的数据。我无法查询统计数据,因为查询是由TDCH内部生成和执行的。然而,我的理解是,在第二种情况下,第一个不同的分区将被搜索,然后按done排序,这样就避免了数据的重新分发,对不对???@anwaar_hell:Yep,distinct在消除重复之前重新分发所有行,而GROUP by在重新分发之前移除重复项。