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。
从 v3.1 开始,StarRocks 支持在 ARRAY、MAP 和 STRUCT 中使用 Fast Decimal 条目。
示例
创建表时定义 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