更新时间:2024-04-29 GMT+08:00

数据类型

此章节描述ClickHouse的数据类型。

数据类型表

表1 数据类型表

分类

关键字

数据类型

描述

整数类型

Int8

Int8

取值范围:【-128,127】

Int16

Int16

取值范围:【-32768,32767】

Int32

Int32

取值范围:【-2147483648,2147483647】

Int64

Int64

取值范围:【-9223372036854775808,9223372036854775807】

浮点类型

Float32

单精度浮点数

同C语言Float类型,单精度浮点数在机内占4个字节,用32位二进制描述。

Float64

双精度浮点数

同C语言Double类型,双精度浮点数在机内占8个字节,用64位二进制描述。

Decimal类型

Decimal

Decimal

有符号的定点数,可在加、减和乘法运算过程中保持精度。支持几种写法:

  • Decimal(P, S)
  • Decimal32(S)
  • Decimal64(S)
  • Decimal128(S)
    说明:

    P:精度,有效范围:[1:38],决定可以有多少个十进制数字(包括分数)。

    S:规模,有效范围:[0:P],决定数字的小数部分中包含的小数位数。

字符串类型

String

字符串

字符串可以是任意长度的。它可以包含任意的字节集,包含空字节。因此,字符串类型可以代替其他DBMSs中的VARCHAR、BLOB、CLOB等类型。

FixedString

固定字符串

当数据的长度恰好为N个字节时,FixedString类型是高效的。 在其他情况下,这可能会降低效率。可以有效存储在FixedString类型的列中的值的示例:

  • 二进制表示的IP地址(IPv6使用FixedString(16))
  • 语言代码(ru_RU, en_US … )
  • 货币代码(USD, RUB … )
  • 二进制表示的哈希值(MD5使用FixedString(16),SHA256使用FixedString(32))

时间日期类型

Date

日期

用两个字节存储,表示从1970-01-01(无符号)到当前的日期值。日期中没有存储时区信息。

DateTime

时间戳

用四个字节(无符号的)存储Unix时间戳。允许存储与日期类型相同的范围内的值。最小值为1970-01-01 00:00:00。时间戳类型值精确到秒(没有闰秒)。时区使用启动客户端或服务器时的系统时区。

DateTime64

DateTime64

此类型允许以日期(date)加时间(time)的形式来存储一个时刻的时间值。

布尔型

Boolean

Boolean

ClickHouse没有单独的类型来存储布尔值。可以使用UInt8 类型,取值限制为0或1。

数组类型

Array

Array

Array(T),由T类型元素组成的数组。T可以是任意类型,包含数组类型。但不推荐使用多维数组,ClickHouse对多维数组的支持有限。例如,不能在MergeTree表中存储多维数组。

元组类型

Tuple

Tuple

Tuple(T1, T2, ...),元组,其中每个元素都有单独的类型,不能在表中存储元组(除了内存表)。它们可以用于临时列分组。在查询中,IN表达式和带特定参数的lambda函数可以来对临时列进行分组。

Domains数据类型

Domains

Domains

Domains类型是特定实现的类型:

  • IPv4是与UInt32类型保持二进制兼容的Domains类型,用于存储IPv4地址的值。它提供了更为紧凑的二进制存储的同时支持识别可读性更加友好的输入输出格式。
  • IPv6是与FixedString(16)类型保持二进制兼容的Domain类型,用于存储IPv6地址的值。它提供了更为紧凑的二进制存储的同时支持识别可读性更加友好的输入输出格式。

枚举类型

Enum8

Enum8

取值范围:【-128,127】

Enum保存 'string'= integer的对应关系,例如:Enum8('hello' = 1, 'world' = 2)

Enum16

Enum16

取值范围:【-32768,32767】

可为空

Nullable

Nullable

除非在ClickHouse服务器配置中另有说明,否则NULL是任何Nullable类型的默认值。Nullable类型字段不能包含在表索引中。

可以与TypeName的正常值存放一起。例如,Nullable(Int8) 类型的列可以存储Int8类型值,而没有值的行将存储NULL。

嵌套类型

nested

nested

嵌套的数据结构就像单元格内的表格。嵌套数据结构的参数(列名和类型)的指定方式与CREATE TABLE查询中的指定方式相同。每个表行都可以对应于嵌套数据结构中的任意数量的行。

示例:Nested(Name1 Type1, Name2 Type2, …)