网站首页 > 博客文章 正文
数值类型
1)IntX和UIntX
以前我们常用Tinyint、Smallint、Int和Bigint指代整数的不同取值范围。而Clickhouse则直接使用Int8、Int16、Int32、Int64指代4种大小的int类型,其末尾的数字正好表明了占用字节的大小(8位=1字节)。
名称 | 大小(字节) | 范围 | 普遍观念 |
Int8 | 1 | -127到127 | Tinyint |
Int16 | 2 | -32768到32767 | Smallint |
Int32 | 4 | -2147483648到2147483647 | Int |
Int64 | 8 | -9223372036854775808到9223372036854775807 | Bigint |
clickhouse支持无符号的整数,使用前缀U表示。
名称 | 大小(字节) | 范围 | 普遍观念 |
UInt8 | 1 | 0到255 | Tinyint Unsigned |
UInt16 | 2 | 0到65535 | Smallint Unsigned |
UInt32 | 4 | 0到4294967295 | Int Unsigned |
UInt64 | 8 | 0到18446744073709551615 | Bigint Unsigned |
2)FloatX
名称 | 大小(字节) | 有效精度 | 普遍概念 |
Float32 | 4 | 7 | Float |
Float64 | 8 | 16 | Double |
3)Decimal
如果要求更高精度的数值运算,则需要使用定点数。ClickHouse提供了Decimal32、Decimal64和Decimal128三种精度的定点数。可以通过两种形式声明定点:简写方式有Decimal32(S)、Decimal64(S)、Decimal128(S)三种,原生方式为Decimal(P,S),其中:
P代表精度,决定总位数(整数部分+小数部分),取值范围1~38;S代表规模,决定小数位数,取值范围是0~P
字符串类型
字符串类型可以细分为String、FixedString和UUID三类。从命名来看彷佛不像是由一款数据库提供的类型,反而更像是一门编程语言的设计,没错CK语法剧本编程语言的特征(数据+运算)。
1)String
字符串由String定义,长度不限。因此在使用String的时候无须声明大小。它完全替代了传统意义上数据库的varchar、text、Clob和Blob等字符类型。String类型不限定字符集,因为它根本没有这个概念,所以可以将任意编码的字符串存入其中。但是为了程序的规范性和可维护性,在同一套程序中应该遵循使用统一的编码,例如统一使用UTF-8编码就是一种很好的约定。所以在对数据操作的时候我们不再需要去关注编码和乱码问题。
2)FixedString
FixedString类型和传统意义上的Char类型有些类似,对于一些字符有明确长度的场合,可以使用固定长度的字符串。定长字符串通过FixedString(N)声明,其中N表示字符串长度。但与Char不同的是,FixedString使用null字节填充末尾字符,而Char通常使用空格填充。
3)UUID
UUID是一种数据库常见的主键类型,在ClickHouse中直接把它作为一种数据类型。UUID共有32位,它的格式位8-4-4-4-12。如果一个UUID类型的字段在写入时没有被赋值,则会依照格式使用0填充。
时间类型
1)Date
Date类型不包含具体的时间信息,只精准到天,支持字符串形式写入。
2)DateTime
DateTime类型包含时、分、秒信息,精准到秒,支持字符串形式写入。
3)DateTime64
DateTime64可以记录亚秒,它在DateTIme之上增加了精度的设置。亚秒默认是3位。
复杂类型
1)Enum
Clickhouse支持枚举类型,这是一种在定义常量时经常会使用的数据类型。Clickhouse提供了Enum8和Enum16两种枚举类型,它们除了取值范围不同之外,别无二致。枚举固定使用(String:int)key/value键值对的形式定义数据,所以Enum8和Enum16分别会对应(String:Int8)和(String:int16)。
在定义枚举集合的时候,有几点需要注意。首先,key和value是不允许重复的,要保证唯一性。其次,key和value的值都不能为null,但key允许是空字符串。在写入枚举数据的时候,只会用到key字符串部分。
注意:其实我们可以使用字符串来替代Enum类型来存储数据,那么为什么是要使用枚举类型呢?这是出于性能的考虑。因为虽然枚举定义中的key属于String类型,但是在后续对枚举的所有操作中(包括排序、分组、去重、过滤等),会使用int类型的value值,提高处理数据的效率。
2)Array(T)
CK支持数组这种复合数据类型,并且数据在操作在今后的数据分析中起到非常便利的效果。数组的定义方式有两种:array(T)[e1,e2...],我们在这里要求数组中的数据类型是一致的。
3)Tuple
元组类型由1~n个元素组成,每个元素之间允许设置不同的数据类型,且彼此之间不要求兼容。元组同样支持类型推断,其推断依据仍然以最小存储代价为原则。与数组类似,元组也可以使用两种方式定义,常规方式tuple(T):元组中可以存储多种数据类型,但是要注意数据类型的顺序。
4)Nested
nested是一种嵌套表结构。一张数据表,可以定义任意多个嵌套类型字段,但每个字段的嵌套层级只支持一级,即嵌套表内不能继续使用嵌套类型。对于简单场景的层级关系或关联关系,使用嵌套类型也是一种不错的选择。
嵌套类型本质是一种多维数组的结构。嵌套表中每个字段都是一个数组,并且行与行之间数组的长度无须对齐。需要注意的是,在同一行数据内每个数组长度必须相等。
猜你喜欢
- 2024-10-17 Uber如何使用ClickHouse建立日志分析平台?
- 2024-10-17 ClickHouse内核分析-MergeTree的存储结构和查询加速
- 2024-10-17 clickhouse ----入门(clickhouse-server)
- 2024-10-17 ClickHouse 查询优化(clickhouse join优化)
- 2024-10-17 clickhouse的技术文档--后面有安装文档
- 2024-10-17 使用Canal实现ClickHouse实时同步MySQL数据
- 2024-10-17 性能提高15倍!只是把MySQL换成了ClickHouse
- 2024-10-17 大数据ClickHouse进阶(十八):数据字典类型
- 2024-10-17 Clickhouse单机部署(clickhouse django)
- 2024-10-17 Clickhouse系列-第二节-基本原理(clickhouse ui)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)