ClickHouse数据类型

本文对比了ClickHouse与其他框架的数据类型,并详细介绍了ClickHouse中的整型、浮点型、布尔型(通过UInt8实现)、字符串(包括String和FixedString)、枚举类型(Enum8和Enum16)以及Date类型。建议尽量使用整型存储数据,注意浮点数可能引入误差,而FixedString虽然固定长度但使用不便。枚举类型限制了可存储的特定字符串值。

一:与其他框架对比

   MySQLHiveCLickHouse(区分大小写)
byteTINYINTInt8
shortSMALLINTInt16
intINT

                     Int32

longBIGINTInt64
varcharSTRINGString
timestampTIMESTAMPDateTime
floatFLOATFloat32
doubleDOUBLEFloat64
booleanBOOLEAN

      注:ClickHouse并非没有布尔类型,后面会讲到如何创建和使用。

二:常用类型的介绍和使用

1. 整型

      固定长度的整型,包括有符号整型和无符号整型。

      整型范围:-2^(n-1)~2^(n-1)-1

      Int8:-128~127

      Int16:-32768~32767

      Int32:-2147483648~2147483647

      Int64:-922337203854775808~922337203854775807

      无符号整型范围:0~2^n-1

      UInt8:0~255

      UInt16:0~65535

      UInt32:0~4294967295

      UInt64:0~18446744073709551615

2. 浮点型

      Float32~float

      Float64~double

      建议尽可能使用整型存储数据,浮点数会引起误差!

      与标准SQL相比,还支持以下类型:

      Inf-正无穷

      -Inf-负无穷

      NaN-非数字

3. 布尔型

      没有单独的类型存储布尔值,可用UInt8类型,取值限制为0或1,具体用法后面再讲。

4. 字符串

      1)String

      字符串长度是任意的,并且可以包含任意字符集,包含空字节。

      2)FixedString(N)

      类似于varchar,固定长度N的字符串,N必须是严格的正自然数,当服务端读取长度小于N的字符串时,通过在末尾添加空字节来达到N字节长度。大于N时,返回错误消息。

      相比较而言,String已经足够强大,很少使用FixedString,因为用起来不是很方便。

5. 枚举类型

       包括Enum8和Enum16类型,Enum保存‘string’=integer的对应关系。

       Enum8用‘String’=Int8对描述。

       Enum16用‘String’=Int16对描述。

      用法演示:

      创建一个带有一个枚举Enum8(‘hello’=1,‘world’=2)类型的列:

CREATE TABLE t_enum
(
    x Enum8('hello' = 1, 'world' = 2)
)
ENGINE = TinyLog;

      这个x列只能存储类型定义中列出的值:‘hello’或者‘world’,插入其他值会报错。

insert into t_enum values('hello'),('world');

      如果要看数值:

select cast(x,'Int8') from t_enum;

       运行结果:

 6. Date

      日期类型,用两个字节存储,表示从1970-01-01(无符号)到当前的日期值。

      还有其他很多数据类型,数组元组等,此处不再敖述,可以直接去看官方文档http://clickhouse.yandex/docs/zh/data_types

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值