尝试更新时 Teradata 中不再有假脱机 space
No more spool space in Teradata while trying Update
我正在尝试更新一个 table 有很多行 388.000。
这是查询:
update DL_RG_ANALYTICS.SH_historico
from
(
SELECT
CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM
(SELECT * FROM DL_RG_ANALYTICS.SH_historico A
LEFT JOIN
(SELECT ANO||MES AS ANO_MES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1) B
ON A.ANOMES = B.ANO_MES
) M) N
SET DIAS_AL_CIERRE = DIAS_AL_CIERRE_1;
感谢任何帮助。
我要做的第一件事是仅将 SELECT *
替换为您需要的列。您还可以删除 M
派生的 table 以使其更易于阅读:
UPDATE DL_RG_ANALYTICS.SH_historico
FROM (
SELECT CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM DL_RG_ANALYTICS.SH_historico A
LEFT JOIN (
SELECT ANO || MES AS ANO_MES, MAX(DIA) AS MAX_DIA
FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1
) B ON A.ANOMES = B.ANO_MES
) N
SET DIAS_AL_CIERRE = DIAS_AL_CIERRE_1;
SH_CALENDARIO
table 上定义了哪些索引?如果有 (ANO, MES
) 的复合索引,那么您应该将 LEFT JOIN
子查询重写为 GROUP BY
这两列,因为您无论如何都将它们连接在一起。通常,您希望在索引上执行连接、GROUP BY
和 OLAP
函数,这样行重新分配会更少,它们会 运行 更有效。
此外,此查询正在使用相同的值更新 table 中的所有行。这是故意的,还是您想在 WHERE
子句中包含额外的列?
我正在尝试更新一个 table 有很多行 388.000。
这是查询:
update DL_RG_ANALYTICS.SH_historico
from
(
SELECT
CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM
(SELECT * FROM DL_RG_ANALYTICS.SH_historico A
LEFT JOIN
(SELECT ANO||MES AS ANO_MES, MAX(DIA) AS MAX_DIA FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1) B
ON A.ANOMES = B.ANO_MES
) M) N
SET DIAS_AL_CIERRE = DIAS_AL_CIERRE_1;
感谢任何帮助。
我要做的第一件事是仅将 SELECT *
替换为您需要的列。您还可以删除 M
派生的 table 以使其更易于阅读:
UPDATE DL_RG_ANALYTICS.SH_historico
FROM (
SELECT CAST((MAX_DIA - DIA_PAGO) AS INTEGER) AS DIAS_AL_CIERRE_1
FROM DL_RG_ANALYTICS.SH_historico A
LEFT JOIN (
SELECT ANO || MES AS ANO_MES, MAX(DIA) AS MAX_DIA
FROM DL_RG_ANALYTICS.SH_CALENDARIO
GROUP BY 1
) B ON A.ANOMES = B.ANO_MES
) N
SET DIAS_AL_CIERRE = DIAS_AL_CIERRE_1;
SH_CALENDARIO
table 上定义了哪些索引?如果有 (ANO, MES
) 的复合索引,那么您应该将 LEFT JOIN
子查询重写为 GROUP BY
这两列,因为您无论如何都将它们连接在一起。通常,您希望在索引上执行连接、GROUP BY
和 OLAP
函数,这样行重新分配会更少,它们会 运行 更有效。
此外,此查询正在使用相同的值更新 table 中的所有行。这是故意的,还是您想在 WHERE
子句中包含额外的列?