Перейти к основному содержимому

DECIMAL

DECIMAL(P[,S]) — это высокоточное значение с фиксированной точкой. P обозначает общее количество значащих цифр (точность). S обозначает максимальное количество десятичных знаков (масштаб).

Если P опущен, по умолчанию используется 10. Если S опущен, по умолчанию используется 0.

  • Decimal V2

    Диапазон P составляет [1,27], а диапазон S — [0,9]. P должно быть больше или равно значению S. Значение S по умолчанию равно 0.

  • Fast Decimal (Decimal V3)

    Диапазон P составляет [1,38], а диапазон S — [0, P]. Значение S по умолчанию равно 0. Fast Decimal обеспечивает более высокую точность.

    Основные оптимизации:

    ​1. Fast Decimal использует целые числа переменной ширины для представления десятичных чисел. Например, он использует 64-битные целые числа для представления десятичных чисел с точностью менее или равной 18. В то время как Decimal V2 единообразно использует 128-битные целые числа для всех десятичных чисел. Арифметические операции и операции преобразования на 64-битных процессорах используют меньше инструкций, что значительно повышает производительность.

    ​2. По сравнению с Decimal V2, Fast Decimal внес значительные оптимизации в некоторые алгоритмы, особенно в умножение, что повышает производительность примерно в 4 раза.

Fast Decimal управляется динамическим параметром FE enable_decimal_v3, который по умолчанию имеет значение true.

Начиная с версии 1.5.0, Selena поддерживает записи Fast Decimal в ARRAY, MAP и STRUCT.

Примеры

Определение столбцов DECIMAL при создании таблицы.

CREATE TABLE decimalDemo (
pk BIGINT(20) NOT NULL COMMENT "",
account DECIMAL(20,10) COMMENT ""
) ENGINE=OLAP
DUPLICATE KEY(pk)
COMMENT "OLAP"
DISTRIBUTED BY HASH(pk);

INSERT INTO decimalDemo VALUES
(1,3.141592656),
(2,21.638378),
(3,4873.6293048479);

SELECT * FROM decimalDemo;
+------+-----------------+
| pk | account |
+------+-----------------+
| 1 | 3.1415926560 |
| 3 | 4873.6293048479 |
| 2 | 21.6383780000 |
+------+-----------------+

Ключевые слова

decimal, decimalv2, decimalv3, fast decimal