DECFLOAT tipo

Aplica a:con marca de verificación sí Databricks SQL marcado sí Databricks Runtime 19 y superiores

Representa números de coma flotante en base 10 con 16 o 34 dígitos significativos y sin escala fija.

Importante

DECFLOAT está en beta. Un administrador de espacio de trabajo debe habilitar el tipo de dato DECFLOAT en Previews.

Syntax

DECFLOAT [ ( p ) ]
  • p: El número máximo de dígitos decimales significativos. Los valores soportados son 16 y 34. El valor predeterminado es 34.

DECFLOAT no acepta un argumento de escala. Cada valor tiene su propio exponente.

Limits

Propiedad DECFLOAT(16) DECFLOAT(34)
Dígitos significativos Hasta 16 Hasta 34
Valor positivo no nulo más pequeño 1E-398 1E-6176
Mayor valor positivo finito (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Los mismos límites se aplican a los números negativos. Ambos tipos también soportan infinito y NaN.

Literals

Úsalo CAST con una cadena o valor numérico soportado. Las cadenas también pueden contener NaN, Inf, o Infinity.

Notes

DECFLOAT representa valores decimales como 0.1 exactamente. Los valores que superan la precisión pueden redondear sin error, incluyendo con TRY_CAST. Lanza texto decimal directamente. Convertir a través FLOAT o DOUBLE puede perder precisión.

La salida de cadenas preserva los ceros posteriores, por lo que valores iguales como 1.5 y 1.50 pueden producir cadenas diferentes (+15E-1 y +150E-2). Lanza desde DECFLOAT para DECIMAL redondear la mitad hacia arriba, independientemente de DECFLOAT_ROUNDING_MODE.

  • La aritmética preserva la precisión cuando ambos operandos tienen el mismo tipo DECFLOAT. Precisiones u operaciones mixtas con otros tipos numéricos soportados utilizan DECFLOAT(34).
  • SUM y AVG regresar DECFLOAT(34). MIN y MAX preservar la precisión de entrada.
  • SQRT, ABS, y ROUND aceptar DECFLOAT directamente.

DECFLOAT_ROUNDING_MODE controla el redondeo para los lanzamientos a DECFLOAT, +, -, *, /, SQRT, SUM, y AVG. El valor predeterminado es ROUND_HALF_EVEN. Otros modos soportados son ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, y ROUND_DOWN. DIV elimina la parte fraccionaria del resultado, independientemente de DECFLOAT_ROUNDING_MODE. ROUND, BROUND, y TRUNCATE utilizan sus propias reglas de redondeo.

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

Con el modo de redondeo por defecto, el desbordamiento produce infinito y la división por cero produce infinito o NaN. El modo ANSI no cambia estos resultados. Las funciones aritméticas soportadas TRY_* preservan el infinito y NaN en lugar de devolver NULL. Los NaN se comparan igual y ordenan después del infinito positivo. Positivo y cero negativo comparan iguales. Usado ISNAN para detectar 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)

Limitaciones

  • Las operaciones de resto y de bits no están soportadas.
  • Las funciones que requieren DOUBLE entradas no aceptan DECFLOAT directamente. Convierte el valor a DOUBLE primero (esto puede resultar en pérdida de precisión).
  • DECFLOAT no es compatible con vectores de borración. Al crear una tabla Delta con columnas DECFLOAT, se establece TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Para tablas existentes, elimina la característica de tabla de vectores de eliminación antes de añadir columnas DECFLOAT.
  • Las tablas Delta que contienen DECFLOAT no pueden tener activadas las lecturas de Iceberg .
  • No se permite escribir valores DECFLOAT directamente en archivos Parquet.
  • Las columnas DECFLOAT no tienen estadísticas mínimas/máximas para saltar datos. No pueden ser columnas de partición, claves de agrupamiento, columnas de orden Z ni columnas índice de filtro de Bloom.
  • Cambiar una columna entre DECFLOAT(16) y DECFLOAT(34) con ALTER COLUMN no tiene soporte.