Typ: DECFLOAT

Dotyczy do:zaznaczyć tak, Databricks SQL oznaczony tak, Databricks Runtime 19 i wyższe

Reprezentuje liczby zmiennoprzecinkowe w bazie 10 z 16 lub 34 cyframi znaczącymi i bez stałej skali.

Important

DECFLOAT jest w wersji beta. Administrator przestrzeni roboczej musi włączyć typ danych DECFLOAT w podglądach.

Składnia

DECFLOAT [ ( p ) ]
  • p: Maksymalna liczba cyfr dziesiętnych znaczących. Wartościami wspieranymi są 16 i 34. Domyślnie to 34.

DECFLOAT nie akceptuje argumentu o skali. Każda wartość ma swój własny wykładnik.

Limits

Property DECFLOAT(16) DECFLOAT(34)
Cyfry znaczące Do 16 Do 34
Najmniejsza dodatnia, niezerowa wartość 1E-398 1E-6176
Największa dodatnia wartość skończona (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Te same limity dotyczą liczb ujemnych. Oba typy obsługują także nieskończoność i NaN.

Literals

Użycie CAST z łańcuchem lub wartością liczbową wspieraną. Ciągi mogą również zawierać NaN, Inf, lub Infinity.

Notes

DECFLOAT reprezentuje wartości dziesiętne, takie jak 0.1 dokładnie . Wartości przekraczające precyzję mogą zaokrąglać bez błędu, w tym z .TRY_CAST Rzucaj bezpośrednio tekst dziesiętny. Przekonwertowanie może FLOATDOUBLE stracić precyzję.

Wyjście ciągu zachowuje końcowe zera, więc równe wartości, takie jak 1.5 i 1.50 , mogą generować różne ciągi (+15E-1 i +150E-2). Rzuca z DECFLOAT do DECIMAL zaokrąglania do połowy w górę, niezależnie od DECFLOAT_ROUNDING_MODE.

  • Arytmetyka zachowuje precyzję, gdy oba operandy mają ten sam typ DECFLOAT. Mieszane precyzje lub operacje z innymi obsługiwanymi typami liczbowymi wykorzystują DECFLOAT(34).
  • SUM i AVG wróć DECFLOAT(34). MIN oraz MAX zachować precyzję wejściową.
  • SQRT, , ABSoraz bezpośrednio zaakceptować ROUND DECFLOAT.

DECFLOAT_ROUNDING_MODEkontroluje zaokrąglenie rzutów do DECFLOAT, +, -, *, /, SQRT, , SUM, oraz .AVG Wartość domyślna to ROUND_HALF_EVEN. Inne obsługiwane tryby to ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, oraz ROUND_DOWN. DIVusuwa część ułamkową wyniku, niezależnie od .DECFLOAT_ROUNDING_MODE ROUND, BROUND, oraz stosują TRUNCATE własne reguły zaokrągleń.

> SET DECFLOAT_ROUNDING_MODE = ROUND_FLOOR;
> SELECT CURRENT_DECFLOAT_ROUNDING_MODE();
  ROUND_FLOOR

W domyślnym trybie zaokrąglenia przepełnienie generuje nieskończoność, a dzielenie przez zero daje nieskończoność lub NaN. Tryb ANSI nie zmienia tych wyników. Wspierane TRY_* funkcje arytmetyczne zachowują nieskończoność i NaN zamiast zwracać NULL. NaN porównują równie i sortują według dodatniej nieskończoności. Dodatnia i minus zero równują się. Użyj ISNAN do wykrywania NaN.

Examples

> SELECT CAST('1.5' AS DECFLOAT(34)) + CAST('2.5' AS DECFLOAT(34)) AS total;
  +40E-1

> SELECT CAST(CAST('1.23E+100' AS DECFLOAT(34)) AS STRING);
  +123E+98

> SELECT typeof(CAST('1' AS DECFLOAT(16)) + 1);
  decfloat(34)

Limitations

  • Operacje resztowe i bitowe nie są obsługiwane.
  • Funkcje wymagające DOUBLE wejść nie akceptują bezpośrednio DECFLOAT. Przelicz wartość na DOUBLE pierwszą (może to prowadzić do utraty precyzji).
  • DECFLOAT nie jest kompatybilny z wektorami usuwania. Tworząc tabelę Delty z kolumnami DECFLOAT, ustaw TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). W przypadku istniejących tabel zrezygnuj z funkcji tabeli wektorów usuwania przed dodaniem kolumn DECFLOAT.
  • Tabele delta zawierające DECFLOAT nie mogą mieć włączonego odczytu Iceberg.
  • Zapisywanie wartości DECFLOAT bezpośrednio do plików Parquet jest nieobsługiwane.
  • Kolumny DECFLOAT nie mają statystyk min/max dla pomijania danych. Nie mogą być kolumnami partycji, kluczami klastrowania, kolumnami rzędu Z ani kolumnami indeksu filtrów Bloom.
  • Zmiana kolumny między DECFLOAT(16) a DECFLOAT(34) z jest ALTER COLUMN nieobsługiwana.