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