跳到主要内容
版本: 最新版本-3.5

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 支持在 ARRAYMAPSTRUCT 中使用 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