clickhouse基础原理

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:

特点:

  1. 这个引擎存在磁盘中
  2. 不支持索引
  3. 没有并发控制,但是支持并发(同时读,同时写,读和写),只能支持同时读的并发

应用场景:小表,这个表一般只用于查询,例如国家,省份等

使用方式:创建表的时候指定引擎即可

 

2.memory

特点:

1.内存引擎,速度快,可以达到每秒10g,官网建议上限1亿条数据

2.不支持索引

使用方式:用于测试

 

3.merge

特点:

1.本身不存储数据,通过合并其他表的数据来得到自身的数据

 

4.mergetree(重点)

会自动的合并多个分支,减少了数据的存储

特点:

  1. 按照主键进行排序
  2. 可以指定分区
  3. 可以支持数据副本,保证数据安全性
  4. 支持数据采样

 

 

索引粒度:每个索引有多少行,默认值是8192

数据片段头在zk中的存储方式

使用直接io来操作磁盘合并时所需要的最小数据量,数据小于10g采用缓存io,大于10g采用磁盘io

linux中的io方式:直接io,缓存io

 

5.replacingmergetree

这个引擎是在mergertree的基础上,添加了删除重复数据的功能,该引擎和mergetree的不同之处在于它会删除

具有相同主键的重复项.

ver:版本列

 会自动进行数据的合并,但是只会保存最大的版本

 

6.summingmergertree

会把所有具有相同主键的数据指定的列合并为一行,会取最先出现的值。

 

7.distributed

分布式引擎,本身不存储数据,但是可以在多个服务器上进行分布式查询,可以并行读。

把不同的数据存到不同的机器上。

 

 

 

 

 

 

 

 

posted @ 2020-06-11 15:30  小矮子的小胖子  阅读(3718)  评论(0编辑  收藏  举报