ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

clickhouse引擎介绍

2022-01-04 10:30:00  阅读:267  来源: 互联网

标签:介绍 MergeTree 引擎 设置 TTL 主键 数据 ORDER clickhouse


MergeTree家族 (LSM-Tree 数据结构)

Replicated(副本)+ MergeTree等 = ReplicatedMergeTree

  1. MergeTree :

  2. ReplacingMergeTree : 在后台数据合并期间,对具有相同排序键的数据进行去重操作。

  3. SummingMergeTree : 当合并数据时,会把具有相同主键的记录合并为一条记录。根据聚合字段设置,该字段的值为聚合后的汇总值,非聚合字段使用第一条记录的值,聚合字段类型必须为数值类型。

  4. AggregatingMergeTree : 在同一数据分区下,可以将具有相同主键的数据进行聚合。

  5. CollapsingMergeTree : 在同一数据分区下,对具有相同主键的数据进行折叠合并。

  6. VersionedCollapsingMergeTree : 基于CollapsingMergeTree引擎,增添了数据版本信息字段配置选项。在数据依据ORDER BY设置对数据进行排序的基础上,如果数据的版本信息列不在排序字段中,那么版本信息会被隐式的作为ORDER BY的最后一列从而影响数据排序。

  7. GraphiteMergeTree : 用来存储时序数据库Graphites的数据。

Log Engines

Log系列表引擎功能相对简单,主要用于快速写入小表(1百万行左右的表),然后全部读出的场景。

几种Log表引擎的共性是:

  • 数据被顺序append写到磁盘上;
  • 不支持delete、update;
  • 不支持index;
  • 不支持原子性写;
  • insert会阻塞select操作。
  1. TinyLog : 不支持并发读取数据文件,查询性能较差;格式简单,适合用来暂存中间数据;

  2. Log : 支持并发读取数据文件,查询性能比TinyLog好;每个列会单独存储在一个独立文件中。

Integration Engines

该系统表引擎主要用于将外部数据导入到ClickHouse中,或者在ClickHouse中直接操作外部数据源。

  1. Kafka:将Kafka Topic中的数据直接导入到ClickHouse;
  2. MySQL:将Mysql作为存储引擎,直接在ClickHouse中对MySQL表进行select等操作;
  3. JDBC/ODBC:通过指定jdbc、odbc连接串读取数据源;
  4. HDFS:直接读取HDFS上的特定格式的数据文件;

Special Engines

  1. Memory:将数据存储在内存中,重启后会导致数据丢失。查询性能极好,适合于对于数据持久性没有要求的1亿一下的小表。在ClickHouse中,通常用来做临时表。

  2. Buffer:为目标表设置一个内存buffer,当buffer达到了一定条件之后会flush到磁盘。

  3. File:直接将本地文件作为数据存储;

  4. Null:写入数据被丢弃、读取数据为空;

  5. Distributed : Distributed 引擎并不存储真实数据,而是来做分布式写入和查询,与其他引擎配合使用。比如:Distributed + MergeTree。并行执行查询操作。

-- 建表模板
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] 
(
      name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1], 
      name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], 
      ... 
) ENGINE = MergeTree()
  ORDER BY expr 
  [PARTITION BY expr] 
  [PRIMARY KEY expr] 
  [SAMPLE BY expr] 
  [TTL expr [DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'], ...] 
  [SETTINGS name=value, ... 

-- ex
   CREATE TABLE test (
  id UInt16,
  create_time Date,
  title Nullable(String)
) ENGINE = MergeTree()
   PARTITION BY create_time
     ORDER BY  (id, create_time)
     PRIMARY KEY (id, create_time)
     TTL create_time + INTERVAL 1 MONTH
     SETTINGS index_granularity=8192;
   
-- 必填选项
# ENGINE:
   引擎名字,MergeTree引擎无参数。
# ORDER BY:
   排序键,可以由一列或多列组成,决定了数据以何种方式进行排序,例如ORDER BY(CounterID, EventDate)。如果没有显示指定PRIMARY KEY,那么将使用ORDER BY作为PRIMARY KEY。通常只指定ORDER BY即可。

-- 选填选项
# PARTITION BY:
   分区键,指明表中的数据以何种规则进行分区。分区是在一个表中通过指定的规则划分而成的逻辑数据集。分区可以按任意标准进行,如按月、按日或按事件类型。为了减少需要操作的数据,每个分区都是分开存储的。
# PRIMARY KEY:
   主键,设置后会按照主键生成一级索引(primary.idx),数据会依据索引的设置进行排序,从而加速查询性能。默认情况下,PRIMARY KEY与ORDER BY设置相同,所以通常情况下直接使用ORDER BY设置来替代主键设置。
# SAMPLE BY:
   数据采样设置,如果显示配置了该选项,那么主键配置中也应该包括此配置。例如 ORDER BY CounterID / EventDate / intHash32(UserID)、SAMPLE BY intHash32(UserID)。
# TTL:
   数据存活时间,可以为某一字段列或者一整张表设置TTL,设置中必须包含Date或DateTime字段类型。如果设置在列上,那么会删除字段中过期的数据。如果设置的是表级的TTL,那么会删除表中过期的数据。如果设置了两种类型,那么按先到期的为准。例如,TTL createtime + INTERVAL 1 DAY,即一天后过期。使用场景包括定期删除数据,或者定期将数据进行归档。
# index_granularity:
   索引间隔粒度。MergeTree索引为稀疏索引,每index_granularity条数据产生一条索引。index_granularity默认设置为8092。
# enable_mixed_granularity_parts:
   是否启动index_granularity_bytes来控制索引粒度大小。
# index_granularity_bytes:
   索引粒度,以字节为单位,默认10Mb。
# merge_max_block_size:
   数据块合并最大记录个数,默认8192。
# merge_with_ttl_timeout:
   合并频率最小时间间隔,默认1天。

标签:介绍,MergeTree,引擎,设置,TTL,主键,数据,ORDER,clickhouse
来源: https://blog.csdn.net/Mr_ShangHaohao/article/details/122297722

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有