Tipo de DECFLOAT

Aplica-se a:com marca de verificação sim Databricks SQL marcado sim Databricks Runtime 19 e acima

Representa números de ponto flutuante base 10 com 16 ou 34 dígitos significativos e sem escala fixa.

Importante

DECFLOAT está em Beta. Um administrador de espaço de trabalho deve habilitar o tipo de dado DECFLOAT em Prévias.

Sintaxe

DECFLOAT [ ( p ) ]
  • p: O número máximo de dígitos decimais significativos. Os valores suportados são 16 e 34. O padrão é 34.

DECFLOAT não aceita um argumento de escala. Cada valor tem seu próprio expoente.

Limits

Property DECFLOAT(16) DECFLOAT(34)
Dígitos significativos Até 16 Até 34
Menor valor positivo não nulo 1E-398 1E-6176
Maior valor positivo finito (10^16 - 1) × 10^369 (10^34 - 1) × 10^6111

Os mesmos limites se aplicam aos números negativos. Ambos os tipos também suportam infinito e NaN.

Literals

Use CAST com uma string ou valor numérico suportado. As cadeias também podem conter NaN, Inf, ou Infinity.

Notes

DECFLOAT representa valores decimais como 0.1 exatamente. Valores que excedem a precisão podem arredondar sem erro, incluindo com TRY_CAST. Lançar texto decimal diretamente. Converter através FLOAT ou DOUBLE pode perder precisão.

A saída de string preserva zeros posteriores, então valores iguais como 1.5 e 1.50 podem produzir cadeias diferentes (+15E-1 e +150E-2). Lança de DECFLOAT para DECIMAL arredondar metade para cima, independentemente de DECFLOAT_ROUNDING_MODE.

  • A aritmética preserva a precisão quando ambos os operandos têm o mesmo tipo DECFLOAT. Precisões ou operações mistas com outros tipos numéricos suportados utilizam DECFLOAT(34).
  • SUM e AVG retorna DECFLOAT(34). MIN e MAX preservar a precisão da entrada.
  • SQRT, ABS, e ROUND aceitar diretamente o DECFLOAT.

DECFLOAT_ROUNDING_MODE arredondamento de controles para lançamentos para DECFLOAT, +, -, *, /, SQRT, SUM, , e AVG. O padrão é ROUND_HALF_EVEN. Outros modos suportados são ROUND_HALF_UP, ROUND_CEILING, ROUND_FLOOR, e ROUND_DOWN. DIV remove a parte fracionária do resultado, independentemente de DECFLOAT_ROUNDING_MODE. ROUND, BROUND, e TRUNCATE usam suas próprias regras de arredondamento.

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

Com o modo de arredondamento padrão, o excesso de energia produz infinito e a divisão por zero produz infinito ou NaN. O modo ANSI não altera esses resultados. Funções aritméticas suportadas TRY_* preservam o infinito e o NaN em vez de retornar NULL. As NaNs comparam igual e ordenam após o infinito positivo. Positivo e zero negativo se comparam iguais. 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)

Limitações

  • Operações de remanescente e bit a bit não são suportadas.
  • Funções que requerem DOUBLE entradas não aceitam DECFLOAT diretamente. Converta o valor para DOUBLE o primeiro (isso pode resultar em perda de precisão).
  • O DECFLOAT não é compatível com vetores de deleção. Ao criar uma tabela Delta com colunas DECFLOAT, defina TBLPROPERTIES ('delta.enableDeletionVectors' = 'false'). Para tabelas existentes, elimine a característica de tabela vetorial de exclusão antes de adicionar colunas DECFLOAT.
  • As tabelas Delta contendo DECFLOAT não podem ter leituras Iceberg ativadas.
  • Escrever valores DECFLOAT diretamente em arquivos Parquet não é suportado.
  • Colunas DECFLOAT não possuem estatísticas min/max para pular dados. Elas não podem ser colunas de partição, chaves de clustering, colunas de ordem Z ou colunas de índice de filtro de Bloom.
  • Mudar uma coluna entre DECFLOAT(16) e DECFLOAT(34) com ALTER COLUMN não é suportado.