ANSI兼容小数精度和等级

学习如何使ANSI兼容错误消息当不正确的值用于小数精度和等级。

写的saritha.shivakumar

去年发表在:2022年10月29日

问题

你想给一个或更多的价值小数使用相同值的精度和规模。返回一个null值的期望值。

这个示例代码:

% sql SELECT铸造(5.345小数(20、20))

返回:

图像显示将返回空值。

导致

小数类型(AWS|Azure|GCP)被声明为小数(精度、规模),精度和等级是可选的。

精密代表数字的总数在变量的值。这包括整数部分和小数部分。

代表的数量规模变量的值的小数位数。简而言之,这是数量的数字的小数点向右。

例如,123.45有一个数量精度五个(总共有五位数)和一个规模两个(只有两个数字小数点右边)。

当精度和等级是相等的,这意味着值小于1,因为所有数字用于数的小数部分。例如,小数(20、20)定义了一个价值20数字和20个数字的小数点向右。所有20位用来表示数量的小数部分,没有数字用于整数。

如果精度值溢出数据类型声明中定义的精度,将返回空值而不是分数的十进制值。

解决方案

spark.sql.ansi.enabled真正的在集群的火花配置(AWS|Azure|GCP)。

这使火花SQL ANSI合规。

有关更多信息,审查ANSI合规文档。

删除

信息

你也可以设置这个值在笔记本使用spark.conf.set (“spark.sql.ansi。启用”、“真正的”)在Python细胞如果你没有编辑集群的能力火花配置

一旦启用了ANSI合规,通过不正确的精度和等级值返回一个错误指示正确的值。

例如,此示例代码:

% sql SELECT铸造(5.345小数(20、20))

返回这个错误信息:

在SQL语句错误:SparkArithmeticException (CANNOT_CHANGE_DECIMAL_PRECISION):小数(扩大,5.345,4,3)不能被表示成小数(20、20)。


然而,此示例代码:

选择演员(5.345小数(4,3))

返回预期的结果:

图像显示预期的返回值。


这篇文章有用吗?