前言
什么是 ClickHouse?简单来说它是一个高性能,面向列的SQL数据库管理系统(DBMS),用于在线分析处理(OLAP)。
ClickHouse 提供了大量的数据引擎,分为数据库引擎、表引擎,根据数据特点及使用场景选择合适的引擎,这很重要。其相关文档为:
-
数据库引擎
-
数据表引擎
数据库引擎默认是 Ordinary,在这种数据库下的表可以是任意类型引擎。生产环境中常用的表引擎是 MergeTree 系列,也是官方主推的引擎。
数据库引擎
- Ordinary:默认引擎,在大多数情况下都会使用默认引擎,使用时无须刻意声明。在此数据库下可以使用任意类型的表引擎。
- Dictionary:字典引擎,此类数据库会自动为所有数据字典创建它们的数据表。
- Memory:内存引擎,用于存入临时数据。此类数据库下的数据表只会停留在内存中,不会涉及任何磁盘操作,当服务重启后数据会被清除。
- Lazy:日志引擎,此类数据库下只能使用 Log 系列的表引擎。
- MySQL:MySQL 引擎,此类数据库下会自动拉取远端 MySQL 中的数据,并为它们创建 MySQL 表引擎的数据表。
数据表引擎
表引擎在 ClickHouse 中的作用十分关键,直接决定了数据如何存储和读取、是否支持 index、支持的 query 种类、是否支持主备复制等。其表引擎比较多,各有各的用途,那应该如何选择呢?
- Log 系列:用来做小表数据分析。
- MergeTree 系列:用来做大数据量分析。
- Integration 系列:多用于外表数据集成。
表引擎概述
Log 系列
Log 系列表引擎功能相对简单,主要用于快速写入小表(1百万行左右的表),然后全部读出的场景。
几种 Log 表引擎的共性是:
- 数据被顺序 append 写到磁盘上;
- 不支持 delete、update;
- 不支持 index;
- 不支持原子性;
- insert 会阻塞 select 操作。
它们彼此之间的区别是:
- TinyLog:不支持并发读取数据文件,查询性能较差;格式简单,适合用来暂存中间数据;
- StripLog:支持并发读取数据文件,查询性能比 TinyLog 好;将所有列存储在同一个大文件中,减少了文件个数;
- Log:支持并发读取数据文件,查询性能比 TinyLog 好;每个列会单独存储在一个独立文件中。
Integration 系列
主要用于将外部数据导入到 ClickHouse 中,或者在 ClickHouse 中直接操作外部数据源。
- Kafka:将 Kafka Topic 中的数据直接导入到 ClickHouse;
- MySQL:将 MySQL 作为存储引擎,直接在 ClickHouse 中对 MySQL 表进行 select 等操作;
- JDBC/ODBC:通过指定 jdbc、odbc 连接串读取数据源;
- HDFS:直接读取 HDFS 上的特定格式的数据文件。
Special 系列
大多是为了特定的场景而定制。如:
- Memory:将数据存储在内存中,重启后会导致数据丢失。查询性能极好,适合对于数据持久性没有要求的 1 亿以下的小表。通过用来做临时表。
- Buffer:为目标设置一个内存 buffer,当 buffer 达到一定条件之后会 flush 到磁盘。
- File:直接将本地文件作为数据存储。
- Null:写入数据被丢弃、读取数据为空。
MergeTree 系列
官方主推存储引擎,支持几乎所有 ClickHouse 核心功能。适用于负载任务,可以快速插入数据(极大量的数据插入到一张表中)并进行后续的后台数据处理。
表结构,MergeTree 官方文档表结构:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1,
INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2
) ENGINE = MergeTree()
[PARTITION BY expr]
[ORDER BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
-
ENGINE—引擎名和参数。ENGINE = MergeTree(). MergeTree 引擎没有参数
-
PARTITION BY—分区键
-
ORDER BY—表的排序键
-
PRIMARY KEY—主键【默认情况下主键跟排序键(由
ORDER BY
子句指定)相同】 -
SAMPLE BY—用于抽样的表达式
-
SETTINGS—影响 MergeTree 性能的额外参数:
-
index_granularity—索引粒度。即索引中相邻『标记』间的数据行数。默认值,8192。
-
index_granularity_bytes—索引粒度,以字节为单位,默认值: 10Mb。
-
enable_mixed_granularity_parts—启用或禁用通过index_granularity_bytes控制索引粒度的大小。
-
merge_with_ttl_timeout—TTL合并频率的最小间隔时间。默认值: 86400 (1天)。
-
write_final_mark—启用或禁用在数据片段尾部写入最终索引标记。默认值:1(不建议更改)。
-
storage_policy—存储策略。
-
ReplacingMergeTree:
有去重功能。它会删除具有相同主键的重复项,但数据的去重只会在合并的过程中出现。合并会在未知的时间在后台进行,所以你无法预先作出计划。即不保证没有重复的数据出现。
表结构:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = ReplacingMergeTree([ver])
[PARTITION BY expr]
[ORDER BY expr]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
合并的时候,ReplacingMergeTree 从所有具有相同主键的行中选择一行留下:
- 如果ver 列未指定,选择最后一条。
- 如果ver 列已指定,选择 ver 值最大的版本。
SummingMergeTree:
有汇总求和功能。当合并 SummingMergeTree 表的数据片段时,ClickHouse 会把所有具有相同主键的行合并为一行,该行包含了被合并的行中具有数值数据类型的列的汇总值。
表结构:
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = SummingMergeTree([columns])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
AggregatingMergeTree:
有聚合功能。
CollapsingMergeTree:
有折叠删除功能。
VersionedCollapsingMergeTree:
有版本折叠功能。
GraphiteMergeTree:
有压缩汇总功能。
ClickHouse 数据类型
数据类型文章来源:https://www.toymoban.com/news/detail-511862.html
- Integer types:有符号和无符号整数 (
UInt8
,UInt16
,UInt32
,UInt64
,UInt128
,UInt256
,Int8
,Int16
,Int32
,Int64
,Int128
,Int256
)。 - Floating-point numbers:浮点数(
Float32
和Float64
)和Decimal
值。 - Boolean:ClickHouse 具有
Boolean
类型。 - Strings:
String
和FixedString
。 - Dates:使用
Date
和Date32
表示天数,使用DateTime
和DateTime64
表示时间实例。 - JSON:
JSON
对象将 JSON 文档存储在单个列中。 - UUID:用于存储
UUID
值的高性能选项。 - Low cardinality types:当具有少量唯一值时,请使用
Enum
,当列最多有 10,000 个唯一值时,请使用LowCardinality
。 - Arrays:任何列都可以定义为值的
Array
。 - Maps:使用
Map
存储键/值对。 - Aggregation function types:使用
SimpleAggregateFunction
和AggregateFunction
存储聚合函数结果的中间状态。 - Nested data structures:
Nested
数据结构类似于单元格内的表。 - Tuples:元素的
Tuple
,每个元素都有单独的类型。 - Nullable:
Nullable
允许您在值“缺失”时将值存储为NULL
(而不是列获取其数据类型的默认值)。 - IP addresses:使用
IPv4
和IPv6
高效存储 IP 地址。 - Geo types:用于地理数据,包括
Point
、Ring
、Polygon
和MultiPolygon
。 - Special data types:包括
Expression
、Set
、Nothing
和Interval
。
ClickHouse 常用的函数
时间日期函数文章来源地址https://www.toymoban.com/news/detail-511862.html
到了这里,关于ClickHouse-简单了解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!