开始学习《ClickHouse原理解析与应用实践》,写博客作读书笔记。
本文全部内容都来自于书中内容,个人提炼。
第一章 -> 第二章:
第3章 安装与部署
【略过,网上资料很多,不用看这个】
第4章 数据定义
ClickHouse提供了DDL 与DML的功能,并支持大部分标准的SQL。
ClickHouse的 UPDATE和DELETE是借助ALTER变种实现的。
4.1 ClickHouse的数据类型
数据类型可以划分为基础类型、复合类型和特殊类型。
4.1.1 基础类型
基础类型只有数值、字符串和时间三种类型,没有Boolean类型, 但可以使用整型的0或1替代。
1.数值类型
对于int。
ck使用Int8、Int16、Int32和 Int64指代四种大小的int。数字为占用位数。
同时还支持加前缀U的无符号类型:UInt8、UInt16、UInt32和 UInt64。
名称 | 大小(字节) | 范围 | 普遍观念 |
---|---|---|---|
Int8 | 1 | [-128,127] | Tinyint |
Int16 | 2 | [-32768,32767] | Smallint |
Int32 | 4 | [-2147483648,2147483647] | Int |
Int64 | 8 | [-9223372036854775808,9223372036854775807] | Bigint |
UInt8 | 1 | [0,255] | Tinyint Unsigned |
UInt16 | 2 | [0,65535] | Smallint Unsigned |
UInt32 | 4 | [0,4294967295] | Int Unsigned |
UInt64 | 8 | [0,18446744073709551615] | Bigint Unsigned |
对于Float。
ck使用Float32和Float64代表单精度 浮点数以及双精度浮点数。
超过有效精度会产生数据溢出。
ck支持正无穷、负无穷以及非数字的表达方式。
对于Decimal。
ck提供Decimal32、Decimal64和Decimal128三种精度的定点数。
可以通过两种形式声明定点:
- 简写方式有Decimal32(S)、Decimal64(S)、 Decimal128(S)三种
- 原生方式为Decimal(P,S)
其中:
- P代表精度,决定总位数(整数部分+小数部分),取值范围是1 ~38;
- S代表规模,决定小数位数,取值范围是0~P。
名称 | 灯效 | 范围 |
---|---|---|
Decimal32(S) | Decimal(1-9,S) | [-1*10^(9-S) , 1*10^(9-S)] |
Decimal64(S) | Decimal(10-18,S) | [-1*10^(18-S) , 1*10^(18-S)] |
Decimal128(S) | Decimal(19-38,S) | [-1*10^(38-S) , 1*10^(38-S)] |
两个Decimal加法运算时,S取最大值。
两个Decimal减法运算时,S取最大值。
两个Decimal乘法运算时,S取两者S之和。
两个Decimal除法运算时,S取被除数的值,此时要求被除数S必须大于 除数S,否则会报错。
现代计算器系统只支持 32位和64位CPU,所以Decimal128速度会明显慢于Decimal32与Decimal64。
2.字符串类型
字符串分为String、FixedString和UUID三类。
对于String。
长度不限,不限定字符集,但在同一套程序中应该遵循使用统一的编码。
对于FixedString。
Char类型有些类似。通过 FixedString(N)声明。
使用固定长度,但与Char不同的是, FixedString使用null字节填充末尾字符,而Char通常使用空格填充。
对于UUID。
数据库常见的主键类型。
UUID共有32位,它的格式为8-4-4-4-12。
如果一个UUID类型的字段在写