如何处理雪花中非常大的数字?

Nir*_*r99 3 sql snowflake-cloud-data-platform

我有一个Python程序,它可以遍历数据库(不是我的)中的表,并且对于类型编号中的每一列,它执行一些数学运算,例如stdev。但是,有一些列的数字非常大,当我尝试执行时:

select STDDEV(big_col) from table1;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

Number out of representable range: type FIXED[SB16](38,0){not null}, value 3.67864e+38
Run Code Online (Sandbox Code Playgroud)

知道我该如何处理这个吗?在这种情况下,我可以忽略这个值,但我不希望我的查询失败。

谢谢,尼尔。

Vis*_*hal 6

正如@dnoeth在评论部分中提到的,将标准差转换为DOUBLE应该可以解决问题:STDDEV(CAST(big_col as DOUBLE))

OP询问如何得到的标准差似乎明显小于e+38 这是格式可以容纳的最大位数NUMBER),那么为什么我们需要将这个数字转换为DOUBLE

其原因在于标准差公式:

资料来源:维基百科

此过程的第一步是从该列中的每个单独值中减去该列的平均值。然后对所有这些值进行平方。现在,这个平方确定了格式在进一步算术运算之前需要能够处理的值的88 上限,例如除以记录数 ( ),并取平方根将其减少到最终答案。从此过程中获得的标准差的最终值可能明显小于需要首先计算的平方和。NUMBERN