数据定义(三)

1 ClickHouse的数据类型 

   分为基础类型、复合类型和特殊类型

 【基础类型】  

  •   ClickHouse则直接使用Int8、Int16、Int32和Int64指代4种大小的Int类型
  •   ClickHouse的浮点数支持正无穷、负无穷以及非数字的表达方式
  •   如果要求更高精度的数值运算,则需要使用定点数。ClickHouse提供了Decimal32、Decimal64和Decimal128三种精度的定点数
  •  字符串由String定义,长度不限。因此在使用String的时候无须声明大小
  •  FixedString表示固定长度的字符串,FixedString使用null字节填充末尾字符
  •  ClickHouse有UUID数据类型
  • 时间类型分为DateTime、DateTime64和Date三类。ClickHouse目前没有时间戳类型

【复合类型】

    ClickHouse还提供了数组、元组、枚举和嵌套四类复合类型

  • 不需要主动声明数组的元素类型。因为ClickHouse的数组拥有类型推断的能力,推断依据:以最小存储代价为原则,即使用最小可表达的数据类型
  • 同一个数组内可以包含多种数据类型,例如数组[1,2.0]是可行的。但各类型之间必须兼容
  • 元组类型由1~n个元素组成,每个元素之间允许设置不同的数据类型,且彼此之间不要求兼容
  • ClickHouse支持枚举类型,这是一种在定义常量时经常会使用的数据类型
  • 枚举固定使用(String:Int)Key/Value键值对的形式定义数据;key和Value是不允许重复的,要保证唯一性。Key和Value的值都不能为Null,但Key允许是空字符串。在写入枚举数据的时候,只会用到Key字符串部分
  • 虽然枚举定义中的Key属于String类型,但是在后续对枚举的所有操作中(包括排序、分组、去重、过滤等),会使用Int类型的Value值
  • 嵌套类型本质是一种多维数组的结构。嵌套表中的每个字段都是一个数组,并且行与行之间数组的长度无须对

【特殊类型】

  • Nullable 表示可以写入null
  • Nullable只能和基础类型搭配使用,不能用于数组和元组这些复合类型,也不能作为索引字段;其次,应该慎用Nullable类型,包括Nullable的数据表,不然会使查询和写入性能变慢。因为在正常情况下,每个列字段的数据会被存储在对应的[Column].bin文件中。如果一个列字段被Nullable类型修饰后,会额外生成一个[Column].null.bin文件专门保存它的Null值。这意味着在读取和写入数据时,需要一倍的额外文件操作。

2 参考

朱凯《ClickHouse原理解析与应用实践》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值