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))

返回預期的結果:

圖像顯示預期的返回值。


這篇文章有用嗎?