тип DECFLOAT

Применимо к:отмечен галочкой «да» Databricks SQL отмечен «да» Databricks Runtime 19 и выше

Представляет числа с плавающей запятой с 16 или 34 значительными цифрами и без фиксированной шкалы.

Important

DECFLOAT находится в бета-версии. Администратор рабочего пространства должен включить тип данных DECFLOAT в предварительном просмотре.

Syntax

DECFLOAT [ ( p ) ]
  • p: Максимальное количество значимых десятичных цифр. Поддерживаемые значения — 16 и 34. По умолчанию — 34.

DECFLOAT не принимает аргумент о масштабе. Каждое значение имеет свой показатель.

Limits

Property DECFLOAT(16) DECFLOAT(34)
Значимые цифры До 16 До 34
Наименьшее положительное ненулевой значение 1E-398 1E-6176
Наибольшее положительное конечное значение (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Те же ограничения применимы и к отрицательным числам. Оба типа также поддерживают бесконечность и NaN.

Literals

Используйте CAST со строкой или поддерживаемым числовым значением. Строки также могут содержать NaN, Inf, или Infinity.

Notes

DECFLOAT представляет собой десятичные значения, такие как 0.1 точно. Значения, превышающие точность, могут округлять без ошибки, включая с TRY_CAST. Накладывайте десятичный текст напрямую. Преобразование может FLOAT потерять точность DOUBLE или преобразование.

Выход строк сохраняет задерживающиеся нули, поэтому равные значения, такие как 1.5 и 1.50 , могут создавать разные строки (+15E-1 и +150E-2). Заклинания из DECFLOAT для DECIMAL округления половины вверх, независимо от DECFLOAT_ROUNDING_MODE.

  • Арифметика сохраняет точность, когда оба операнда имеют одинаковый тип DECFLOAT. Смешанные точности или операции с другими поддерживаемыми числовыми типами используют DECFLOAT(34).
  • SUM и AVG вернуться DECFLOAT(34). MIN и MAX сохранять точность ввода.
  • SQRT, ABS, и ROUND принимать DECFLOAT напрямую.

DECFLOAT_ROUNDING_MODEуправляет округлением для заклинаний в DECFLOAT, +, -, */, SUMSQRT, , и AVG. Значение по умолчанию — ROUND_HALF_EVEN. Другие поддерживаемые режимы — ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, и ROUND_DOWN. DIV удаляет дробную часть результата, независимо от DECFLOAT_ROUNDING_MODE. ROUND, BROUND, и TRUNCATE используют свои собственные правила округления.

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

В режиме округления по умолчанию переполнение даёт бесконечность, а деление на ноль — бесконечность или NaN. Режим ANSI не меняет этих результатов. Поддерживаемые TRY_* арифметические функции сохраняют бесконечность и NaN, а не возвращают NULL. NaN сравнивают равные и сортируют после положительной бесконечности. Положительный и отрицательный ноль равны. Используется ISNAN для обнаружения 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

  • Операции с оставшимися и побитовыми операциями не поддерживаются.
  • Функции, требующие DOUBLE входных данных, не принимают DECFLOAT напрямую. Преобразуйте значение в DOUBLE первую (это может привести к потере точности).
  • DECFLOAT несовместим с векторами удаления. При создании таблицы Delta с столбцами DECFLOAT установите TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Для существующих таблиц отключите функцию таблицы с вектором удаления перед добавлением столбцов DECFLOAT.
  • Таблицы дельта, содержащие DECFLOAT, не могут иметь включённые чтения Iceberg .
  • Запись значений DECFLOAT напрямую в файлы Parquet не поддерживается.
  • Столбцы DECFLOAT не имеют статистики min/max для пропуска данных. Они не могут быть столбцами разделов, ключами кластеризации, столбцами порядка Z или индексными столбцами фильтра Bloom.
  • Изменение столбца между DECFLOAT(16) и DECFLOAT(34) с ALTER COLUMN не поддерживается.