数据类型
整型
整型包括有符号整型或⽆符号整型
有符号整型范围:
- Int8 - [-128 : 127]
- Int16 - [-32768 : 32767]
- Int32 - [-2147483648 : 2147483647]
- Int64 - [-9223372036854775808 : 9223372036854775807]
⽆符号整型范围:
- UInt8 - [0 : 255]
- UInt16 - [0 : 65535]
- UInt32 - [0 : 4294967295]
- UInt64 - [0 : 18446744073709551615]
浮点数
- Float32 对应 float
- Float64 对应 double
- Inf 正⽆穷
- -Inf 负⽆穷
- NaN ⾮数字
官方建议尽可能以整数形式存储数据。例如,将固定精度的数字转换为整数值,例如货币数量或⻚⾯加载时间⽤毫秒为单位表示。
也可以使用有符号的定点数,可在加、减和乘法运算过程中保持精度。有符号的定点数:
Decimal(P, S), Decimal32(S), Decimal64(S), Decimal128(S)
参数:
P - 精度。有效范围:[1:38],决定可以有多少个⼗进制数字(包括分数)
S - 规模。有效范围:[0:P],决定数字的⼩数部分中包含的⼩数位数。
Boolean
clickhouse没有单独的类型来存储布尔值。可以使⽤ UInt8 类型,取值限制为 0 或 1。
String和FixedString(N)
字符串可以任意⻓度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他 DBMSs 中的 VARCHAR、 BLOB、CLOB 等类型。
FixedString是固定⻓度 N 的字符串。N 必须是严格的正⾃然数,一般很少使用
UUID
ClickHouse提供了 generateuidv4 函数来生成UUID。
例子:
CREATE TABLE t_uuid (x UUID, y String) ENGINE=TinyLog
INSERT INTO t_uuid SELECT generateUUIDv4(), 'Example 1'
Date和DateTime
Date:⽇期类型,⽤两个字节存储,表示从 1970-01-01 (⽆符号) 到当前的⽇期值
DateTime:时间戳类型,精确到秒
Array(T)
数组创建方式:array(T)和[ ]
创建数组示例:
SELECT array(1, 2) AS x, toTypeName(x)
SELECT[1, 2] AS x, toTypeName(x)
ClickHouse会⾃动检测数组元素,并根据元素计算出存储这些元素最⼩的数据类型。如果在元素中存在 NULL 或存在 Nullable 类型元素,那么数组的元素类型将会变成 Nullable。
Nullable(TypeName)
clickhouse允许⽤特殊标记 (NULL) 表示"缺失值",可以与 TypeName 的正常值存放⼀起。例如, Nullable(Int8) 类型的列可以存储 Int8 类型值,⽽没有值的⾏将存储 NULL 。
对于 TypeName ,不能使⽤复合数据类型 Array 和 Tuple。复合数据类型可以包含 Nullable 类型值,例 如 Array(Nullable(Int8)) 。 Nullable 类型字段不能包含在表索引中。
要在表的列中存储 Nullable 类型值,ClickHouse 除了使⽤带有值的普通⽂件外,还使⽤带有 NULL 掩码的单独⽂件。 掩码 ⽂件中的条⽬允许 ClickHouse 区分每个表⾏的 NULL 和相应数据类型的默认值。 由于附加了新⽂件, Nullable 列与类似的 普通⽂件相⽐消耗额外的存储空间。