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