clickhouse的常用数据类型

本文介绍了ClickHouse的各种数据类型,包括整型、浮点数、Boolean、String、FixedString、UUID、Date和DateTime、Array、Nullable等。建议尽量使用整数存储数据以保持精度,并详细阐述了各类型的特点和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据类型

整型

整型包括有符号整型或⽆符号整型

有符号整型范围:

  • 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 列与类似的 普通⽂件相⽐消耗额外的存储空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值