1.clickhouse支持常见的数据类型
string ,int,float等等
特殊:
1.string中的-inf是负无穷
inf是正无穷
nan是空值
FixedString(N),类似与mysql中的varchar,可以指定字符串的长度
2.枚举类型,clickhouse不支持boolean类型,需要使用枚举来做
包括 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'
。如果尝试保存任何其他值,ClickHouse 抛出异常。
:) INSERT INTO t_enum VALUES ('hello'), ('world'), ('hello')
INSERT INTO t_enum VALUES
Ok.
3 rows in set. Elapsed: 0.002 sec.
:) insert into t_enum values('a')
INSERT INTO t_enum VALUES
Exception on client:
Code: 49. DB::Exception: Unknown element 'a' for type Enum8('hello' = 1, 'world' = 2)
从表中查询数据时,ClickHouse 从 Enum
中输出字符串值。
SELECT * FROM t_enum
┌─x─────┐
│ hello │
│ world │
│ hello │
└───────┘
如果需要看到对应行的数值,则必须将 Enum
值转换为整数类型。
SELECT CAST(x, 'Int8') FROM t_enum
┌─CAST(x, 'Int8')─┐
│ 1 │
│ 2 │
│ 1 │
└─────────────────┘
3.数组,tuple,date,还有很多类型,可以去官网上看。
2.表引擎:
1.tinylog:
特点:
- 这个引擎存在磁盘中
- 不支持索引
- 没有并发控制,但是支持并发(同时读,同时写,读和写),只能支持同时读的并发
应用场景:小表,这个表一般只用于查询,例如国家,省份等
使用方式:创建表的时候指定引擎即可
2.memory
特点:
1.内存引擎,速度快,可以达到每秒10g,官网建议上限1亿条数据
2.不支持索引
使用方式:用于测试
3.merge
特点:
1.本身不存储数据,通过合并其他表的数据来得到自身的数据
4.mergetree(重点)
会自动的合并多个分支,减少了数据的存储
特点:
- 按照主键进行排序
- 可以指定分区
- 可以支持数据副本,保证数据安全性
- 支持数据采样
索引粒度:每个索引有多少行,默认值是8192
数据片段头在zk中的存储方式
使用直接io来操作磁盘合并时所需要的最小数据量,数据小于10g采用缓存io,大于10g采用磁盘io
linux中的io方式:直接io,缓存io
5.replacingmergetree
这个引擎是在mergertree的基础上,添加了删除重复数据的功能,该引擎和mergetree的不同之处在于它会删除
具有相同主键的重复项.
ver:版本列
会自动进行数据的合并,但是只会保存最大的版本
6.summingmergertree
会把所有具有相同主键的数据指定的列合并为一行,会取最先出现的值。
7.distributed
分布式引擎,本身不存储数据,但是可以在多个服务器上进行分布式查询,可以并行读。
把不同的数据存到不同的机器上。