数据库 (Teradata) 中不再有假脱机 space
No more spool space in Database (Teradata)
我是 SQL 的初学者,我对 Teradata 的一个查询有疑问。当我 运行 它时,我得到这个错误:
"No more spool space in Database".
根据我在 Internet 上的研究,问题可能出在我的查询不够优化这一事实,除了我看不出我还能如何简化它。
你能帮帮我吗?
查询错误来源:
INSERT INTO DESTINATION_TABLE
(YEAR,
QUARTER,
LABEL,
NUMBER,
TIMESTAMP)
VALUES
((SELECT YEAR FROM DATE TABLE),
(SELECT QUARTER DATE TABLE),
'ANY LABEL',
(SELECT COUNT(*)
FROM DATE_TABLE AS TMP
FULL OUTER JOIN TABLE_1 AS T1 ON TMP.PRG_DT = T1.INN_DT
FULL OUTER JOIN TABLE_2 AS T2 ON TMP.PRG_DT = T2.INN_DT
INNER JOIN TABLE_3 AS T3 ON TMP.PRG_DT = T3.INN_DT),
CURRENT_TIMESTAMP);
查询应该做什么:
Year processed = year of DATE_TABLE
Quarter processed = quarter of DATE_TABLE
Label = ‘ANY LABEL’
Number = sum of the number of occurrences of TABLE_1 + number of occurrences of TABLE_2 + number of occurrences of TABLE_3 having for INN_DT the PRG_DT of DATE_TABLE
Timestamp = Current timestamp
您不希望 full join
用于第三个组件!
相反,您似乎想要使用 INSERT . . . SELECT
:
的逻辑
INSERT INTO DESTINATION_TABLE (YEAR, QUARTER, LABEL, NUMBER, TIMESTAMP)
SELECT YEAR, QUARTER, 'ANY LABEL',
( (SELECT COUNT(*)
FROM table1 t1
WHERE dt.PRG_DT = t1.INN_DT
) +
(SELECT COUNT(*)
FROM table2 t2
WHERE dt.PRG_DT = t2.INN_DT
)
),
CURRENT_TIMESTAMP
FROM DATE_TABLE dt;
我是 SQL 的初学者,我对 Teradata 的一个查询有疑问。当我 运行 它时,我得到这个错误:
"No more spool space in Database".
根据我在 Internet 上的研究,问题可能出在我的查询不够优化这一事实,除了我看不出我还能如何简化它。 你能帮帮我吗?
查询错误来源:
INSERT INTO DESTINATION_TABLE
(YEAR,
QUARTER,
LABEL,
NUMBER,
TIMESTAMP)
VALUES
((SELECT YEAR FROM DATE TABLE),
(SELECT QUARTER DATE TABLE),
'ANY LABEL',
(SELECT COUNT(*)
FROM DATE_TABLE AS TMP
FULL OUTER JOIN TABLE_1 AS T1 ON TMP.PRG_DT = T1.INN_DT
FULL OUTER JOIN TABLE_2 AS T2 ON TMP.PRG_DT = T2.INN_DT
INNER JOIN TABLE_3 AS T3 ON TMP.PRG_DT = T3.INN_DT),
CURRENT_TIMESTAMP);
查询应该做什么:
Year processed = year of DATE_TABLE
Quarter processed = quarter of DATE_TABLE
Label = ‘ANY LABEL’
Number = sum of the number of occurrences of TABLE_1 + number of occurrences of TABLE_2 + number of occurrences of TABLE_3 having for INN_DT the PRG_DT of DATE_TABLE
Timestamp = Current timestamp
您不希望 full join
用于第三个组件!
相反,您似乎想要使用 INSERT . . . SELECT
:
INSERT INTO DESTINATION_TABLE (YEAR, QUARTER, LABEL, NUMBER, TIMESTAMP)
SELECT YEAR, QUARTER, 'ANY LABEL',
( (SELECT COUNT(*)
FROM table1 t1
WHERE dt.PRG_DT = t1.INN_DT
) +
(SELECT COUNT(*)
FROM table2 t2
WHERE dt.PRG_DT = t2.INN_DT
)
),
CURRENT_TIMESTAMP
FROM DATE_TABLE dt;