一.外部存储:
外部存储表引擎直接从其它的存储系统读取数据,例如读取HDFS的文件或者MySql数据库的表,这些表引擎只负责元数据管理和数据查询,他们自身通常并不负责数据的写入,数据文件直接由外部系统提供
1.HDFS: ENGINE = HDFS('hdfs://node01:8020/clickhouse/hdfs_table1','CSV');
2.Mysql : ENGINE = MySQL('192.168.88.101:3306', 'scott', 'dept', 'root','123456');
3.JDBC :
4.Kafka: ENGINE = Kafka()
SETTINGS
kafka_broker_list = 'node01:9092',
kafka_topic_list = 'topic_clickhouse',
kafka_group_name = 'clickhouse',
kafka_format = 'TabSeparated',
kafka_skip_broken_messages = 10;
二,内存类型
将数据全量放在内存中,一方面,查询性能高,但是如果装载的数据量过大,可能带来极大的内存消耗和负担。
1.Memory表引擎直接将数据保存在内存中,数据既不会被压缩也不会被格式化转换,数据在内存中保存的形态与查询时看到的如出一辙
当ClickHouse服务重启的时候,Memory表内数据会全部丢失
当数据被写入,磁盘上不会创建任何数据文件
ENGINE = Memory()
2.Set
Set表引擎时拥有物理存储的,数据首先会被写至内存,然后同步到磁盘文件中。
所以当服务重启时,它的数据不会丢失,当数据表被重新装载时,文件数据会再次被全量加载至内存。
Set表引擎具有去重的内力,在数据写入的过程中,重复的数据会被自动忽略。
Set表引擎具有去重能力,在数据写入的过程中,重复的数据会被自动忽略。
Set表引擎的存储结构由两部分组成,他们分别是:
.bin数据文件:保存了所有列字段的数据。其中,num是一个自增id,从1开始。伴随着没一批数据的写入,都会生成一个新的.bin文件,num也会随之加一。
.tmp临时目录:数据文件首先会被写到这个目录,当一批数据写入完毕后,数据文件会被移除出次目录。
ENGINE = set()
3.Join
Join表引擎可以说是为JOIN查询而生的,它等同于将JOIN查询进行了一层简单封装。在Join表引擎的底层实现中,它与Set表引擎共用了大部分的处理逻辑,所以Join和Set表引擎拥有许多相似之处。