我收到此错误“错误:Teradata 行未交付(trget):计算期间发生数字溢出”

问题描述 投票:0回答:2

在 proc sql (SAS) 中执行 teradata 查询时,出现此错误

错误:Teradata 行未交付(trget):发生数字溢出 计算过程中。

我正在使用 SAS EG 9.3。 我尝试增加线轴空间,并尝试使用

mode=teradat

查询量很大,有很多 sum、max 和 count 函数。 谁能告诉我如何解决这个问题?

sas teradata
2个回答
0
投票

这绝对不是

MAX
MIN
,也可能不是
COUNT
导致该错误,因为这会在 Teradata 模式下返回
INTEGER
,在 ANSI 模式下返回
DECIMAL(15)

整数相乘或求和可能会导致溢出。

如果系统的 MaxDecimal 设置不同于 38,则对于 DECIMAL 也是如此。运行

SELECT TYPE(10000000000. * 10000000000.);
并检查它返回的值是否小于
DECIMAL(22,0)

要修复此错误,您必须将第一个操作数转换为更高精度的 DECIMAL(或 TD14 中更好的

NUMBER(*)
),但当您将数据返回到 SAS 时,您可能只需使用 FLOAT,因为这是 SAS 中的本机数字类型:

CAST(colA AS FLOAT) * colB

SUM(CAST(colA AS FLOAT))

0
投票

如果您有太多观察值 COUNT 可能会导致溢出。使用 CAST(COUNT(*) 作为 FLOAT)。

© www.soinside.com 2019 - 2024. All rights reserved.