Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
<message>.
<alternative> Gerekirse bu hatayı atlamak için <config> "false" olarak ayarlayın.
Parametreler
- ileti: Taşmaya neden olan ifadenin açıklaması.
- alternatif
: Hatadan nasıl kaçınılması konusunda öneride bulunın. - yapılandırma: ANSI modunu değiştirmek için yapılandırma ayarı.
Açıklama
Azure Databricks, işlemin gerçekleştirildiği veri türü aralığının üst sınırını aşan bir matematiksel işlem gerçekleştirdiğinde aritmetik taşma oluşur.
Çoğu durumda matematik, bir işlecin işlenenlerinin en az ortak türünde veya işlevin bağımsız değişkenlerinin en az ortak türünde gerçekleştirilir.
TINYINT türünde iki sayı eklemek, -128 ile +127arasında sınırlı olan tür aralığını hızla aşabilir.
TIMESTAMP ve INTERVAL gibi diğer türlerin de geniş ama sonlu bir aralığı vardır.
Bir tür etki alanının tanımı içinveri türünün
Azaltma
Bu hatanın hafifletilmesi sebebine bağlıdır.
Matematik veya giriş bağımsız değişkenlerinden herhangi biri yanlış mı?
Kullanılan işlevleri veya giriş verilerini uygun şekilde düzeltin.
Ara sonuçları istenen aralıkta tutmak için işlemleri yeniden sıralamayı da düşünebilirsiniz.
Veri türü en geniş tür değil mi?
Türü genişletmek için bağımsız değişkenlerden birini işlemi tamamlamaya yeterli bir türe dönüştürmek.
uygun bir
DOUBLEileDECIMAL(38, s)veyasseçmek yuvarlama maliyetinde çok fazla aralık sağlar.Taşma durumlarını tolere edebilir ve bunları
NULLile değiştirebilir misiniz?alternative'de önerilen işlevi kullanmak için ifadeyi değiştirin. Örneğin, sumyerine try_sum kullanmak.İfadeyi değiştiremiyorsunuz ve hata döndürmek yerine sarılmış sonuçlar almayı mı tercih edersiniz?
Son çare olarak,
ansiConfigfalseolarak ayarlayarak ANSI modunu devre dışı bırakın.
Örnekler
-- An overflow of a small numeric
> SELECT 100Y * 100Y;
[ARITHMETIC_OVERFLOW] 100S * 100S caused overflow.
If necessary set ansi_mode to "false" (except for ANSI interval type) to bypass this error.
-- Use a wider numeric to perform the operation by casting one of the operands
> SELECT 100Y * cast(100Y AS INTEGER);
10000
-- An overflow of a complex expression which can be rewritten
> SELECT 100Y * 10Y / 5;
[ARITHMETIC_OVERFLOW] 100S * 10S caused overflow.
If necessary set spark.sql.ansi.enabled to "false" (except for ANSI interval type) to bypass this error.
-- Rewrite the expression
> SELECT 100Y / 5 * 10Y;
200.0
-- An occasional overfklow that should be tolerated
> SELECT arg1 * arg2 FROM VALUES(100Y, 100Y), (20Y, 5Y) AS t(arg1, arg2);
[ARITHMETIC_OVERFLOW] 100S * 100S caused overflow.
If necessary set ansi_mode to "false" (except for ANSI interval type) to bypass this error.
-- Allowing overflows to be treated as NULL
> SELECT try_multiply(arg1, arg2) FROM VALUES(100Y, 100Y), (20Y, 5Y) AS t(arg1, arg2);
NULL
100
-- In Databricks SQL temporarily disable ANSI mode to tolerate incorrect overflow.
> SET ANSI_MODE = false;
> SELECT arg1 * arg2 FROM VALUES(100Y, 100Y), (20Y, 5Y) AS t(arg1, arg2);
16
100
> SET ANSI_MODE = true;
-- In Databricks Runtime temporarily disable ANSI mode to tolerate incorrect overflow.
> SET spark.sql.ansi.enabled = false;
> SELECT arg1 * arg2 FROM VALUES(100Y, 100Y), (20Y, 5Y) AS t(arg1, arg2);
16
100
> SET spark.sql.ansi.enabled = true;