一:与其他框架对比
| MySQL | Hive | CLickHouse(区分大小写) |
| byte | TINYINT | Int8 |
| short | SMALLINT | Int16 |
| int | INT |
Int32 |
| long | BIGINT | Int64 |
| varchar | STRING | String |
| timestamp | TIMESTAMP | DateTime |
| float | FLOAT | Float32 |
| double | DOUBLE | Float64 |
| boolean | BOOLEAN | 无 |
注: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
本文对比了ClickHouse与其他框架的数据类型,并详细介绍了ClickHouse中的整型、浮点型、布尔型(通过UInt8实现)、字符串(包括String和FixedString)、枚举类型(Enum8和Enum16)以及Date类型。建议尽量使用整型存储数据,注意浮点数可能引入误差,而FixedString虽然固定长度但使用不便。枚举类型限制了可存储的特定字符串值。
888

被折叠的 条评论
为什么被折叠?



