Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Type
S’applique à :
Databricks SQL
Runtime 19 et supérieur
Représente des nombres en virgule flottante en base 10 avec 16 ou 34 chiffres significatifs et sans échelle fixe.
Important
DECFLOAT est en version bêta. Un administrateur d’espace de travail doit activer le type de données DECFLOAT dans les Aperçus.
Syntax
DECFLOAT [ ( p ) ]
-
p: Le nombre maximal de chiffres décimaux significatifs. Les valeurs prises en charge sont 16 et 34. La valeur par défaut est 34.
DECFLOAT n’accepte pas l’argument de l’échelle. Chaque valeur a son propre exposant.
Limits
| Propriété | DECFLOAT(16) |
DECFLOAT(34) |
|---|---|---|
| Chiffres significatifs | Jusqu’à 16 | Jusqu’à 34 |
| Plus petite valeur positive non nulle | 1E-398 |
1E-6176 |
| Plus grande valeur positive finie | (10^16 - 1) × 10^369 |
(10^34 - 1) × 10^6111 |
Les mêmes limites s’appliquent aux nombres négatifs. Les deux types prennent également en charge l’infini et le NaN.
Literals
Utilisez CAST avec une chaîne ou une valeur numérique prise en charge. Les chaînes peuvent aussi contenir NaN, Inf, ou Infinity.
Notes
DECFLOAT représente les valeurs décimales telles que 0.1 exactement. Les valeurs qui dépassent la précision peuvent arrondir sans erreur, y compris avec TRY_CAST. Lancez directement du texte décimal. Convertir à travers FLOAT peut DOUBLE perdre de la précision.
La sortie des chaînes préserve les zéros suivants, donc des valeurs égales comme 1.5 et 1.50 peuvent produire différentes chaînes (+15E-1 et +150E-2). Lances de DECFLOAT pour DECIMAL arrondir à moitié vers le haut, indépendamment de DECFLOAT_ROUNDING_MODE.
- L’arithmétique préserve la précision lorsque les deux opérandes ont le même type DECFLOAT. Les précisions ou opérations mixtes avec d’autres types numériques pris en charge utilisent
DECFLOAT(34). -
SUMetAVGrevenonsDECFLOAT(34).MINetMAXpréserver la précision des entrées. -
SQRT,ABS, etROUNDaccepter directement DECFLOAT.
DECFLOAT_ROUNDING_MODE contrôle l’arrondi pour les lancers vers DECFLOAT, +, -, *, /, SQRT, SUM, , et AVG. La valeur par défaut est ROUND_HALF_EVEN. D’autres modes pris en charge sont ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, et ROUND_DOWN.
DIV supprime la partie fractionnaire du résultat, indépendamment de DECFLOAT_ROUNDING_MODE.
ROUND, BROUND, et TRUNCATE utilisent leurs propres règles d’arrondi.
> SET DECFLOAT_ROUNDING_MODE = ROUND_FLOOR;
> SELECT CURRENT_DECFLOAT_ROUNDING_MODE();
ROUND_FLOOR
Avec le mode d’arrondi par défaut, le débordement produit l’infini et la division par zéro produit l’infini ou NaN.
Le mode ANSI ne modifie pas ces résultats. Les fonctions arithmétiques prises en charge TRY_* préservent l’infini et NaN plutôt que de retourner NULL. Les NaN comparent égaux et trient après l’infini positif. Un positif et un moins zéro égales à la comparaison. Utilisé ISNAN pour détecter le 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
- Les opérations de reste et de bits par bit ne sont pas prises en charge.
- Les fonctions nécessitant
DOUBLEdes entrées n’acceptent pas directement DECFLOAT. Convertissez la valeur enDOUBLEpremière (cela peut entraîner une perte de précision). - DECFLOAT n’est pas compatible avec les vecteurs de délétion. Lors de la création d’une table Delta avec des colonnes DECFLOAT, on définit
TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Pour les tables existantes, supprimez la fonction de tableau vectoriel de suppression avant d’ajouter les colonnes DECFLOAT. - Les tables Delta contenant DECFLOAT ne peuvent pas activer les lectures Iceberg .
- L’écriture directe des valeurs DECFLOAT dans des fichiers Parquet n’est pas prise en charge.
- Les colonnes DECFLOAT ne comportent pas de statistiques min/max pour le saut de données. Ils ne peuvent pas être des colonnes de partition, des clés de clustering, des colonnes d’ordre Z ou des colonnes index de filtre de Bloom.
- Changer une colonne entre
DECFLOAT(16)etDECFLOAT(34)avecALTER COLUMNn’est pas supporté.