跳至主要内容
跳至主要内容

表部件

ClickHouse 中的表格部分是什么?


ClickHouse MergeTree 引擎系列中的每个表格的数据在磁盘上组织为一组不可变的 数据部分

为了说明这一点,我们使用 这个表格(改编自 英国房价数据集),跟踪英国售出房产的日期、城镇、街道和价格

CREATE TABLE uk.uk_price_paid_simple
(
    date Date,
    town LowCardinality(String),
    street LowCardinality(String),
    price UInt32
)
ENGINE = MergeTree
ORDER BY (town, street);

您可以在我们的 ClickHouse SQL Playground 中 查询这个表格

当一组行插入到表格时,会创建一个数据部分。下图描述了这一点


当 ClickHouse 服务器处理示例插入的 4 行数据(例如,通过 INSERT INTO 语句)如上图所示时,它会执行几个步骤

排序:行按表格的 排序键在 ClickHouse 中,排序键定义了磁盘上行的物理顺序。如果您没有指定主键,ClickHouse 将使用排序键作为主键。如果您同时指定了两者,则主键必须是排序键的前缀。 (town, street) 排序,并为排序后的行生成 稀疏主索引

拆分:排序后的数据被拆分为列。

压缩:每个列被 压缩

写入磁盘:压缩后的列作为二进制列文件保存到代表插入的数据部分的新目录中。稀疏主索引也经过压缩并存储在同一目录中。

根据表格的具体引擎,在排序之旁,可能还会发生其他转换 可能发生。

数据 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。是自包含的,包括解释其内容所需的所有元数据,而无需中央目录。除了稀疏主索引之外,部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。还包含其他元数据,例如辅助 数据跳过索引列统计信息、校验和、最小-最大索引(如果使用 分区),以及 更多

部分合并

为了管理每个表格的 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。数量,一个 后台合并作业会定期将较小的 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。合并成较大的部分,直到它们达到 可配置的压缩大小(通常约为 150 GB)。合并后的 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。可配置的时间间隔后被标记为非活动并删除。随着时间的推移,此过程会创建合并 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。的层次结构,这就是它被称为 MergeTreeClickHouse 中的 MergeTree 是一种表引擎,专为高数据摄取速率和大数据量而设计。它是 ClickHouse 的核心存储引擎,提供诸如列式存储、自定义分区、稀疏主索引以及对后台数据合并的支持等功能。表格的原因


为了最大限度地减少初始 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。的数量以及合并的开销,数据库客户端被 鼓励批量插入元组,例如一次插入 20,000 行,或者使用 异步插入模式,在这种模式下,ClickHouse 将多个传入 INSERT 的行缓冲到同一个表格中,并且仅当缓冲区大小超过可配置的阈值或超时到期时,才会创建一个新的部分。

监控表格部分

您可以使用 查询我们示例表格的所有当前存在的活动 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。列表,方法是使用 虚拟列 _part

SELECT _part
FROM uk.uk_price_paid_simple
GROUP BY _part
ORDER BY _part ASC;

   ┌─_part───────┐
1. │ all_0_5_1   │
2. │ all_12_17_1 │
3. │ all_18_23_1 │
4. │ all_6_11_1  │
   └─────────────┘

上面的查询检索磁盘上目录的名称,每个目录代表表格的一个活动数据部分。这些目录名称的组成部分具有特定的含义,这些含义记录在 此处,供那些有兴趣进一步探索的人使用。

或者,ClickHouse 会跟踪所有表格的所有 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。信息在 system.parts 系统表中,以下查询 返回我们示例表格的当前所有活动 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。列表、它们的合并级别以及存储在这些 部分磁盘上的物理文件(或目录),用于存储表格数据的一部分。这与分区不同,分区是使用分区键创建的表格数据的逻辑划分。中的行数

SELECT
    name,
    level,
    rows
FROM system.parts
WHERE (database = 'uk') AND (`table` = 'uk_price_paid_simple') AND active
ORDER BY name ASC;

   ┌─name────────┬─level─┬────rows─┐
1. │ all_0_5_1   │     1 │ 6368414 │
2. │ all_12_17_1 │     1 │ 6442494 │
3. │ all_18_23_1 │     1 │ 5977762 │
4. │ all_6_11_1  │     1 │ 6459763 │
   └─────────────┴───────┴─────────┘

合并级别每次对该部分进行额外的合并都会增加一。级别 0 表示这是一个尚未合并的新部分。

    © . This site is unofficial and not affiliated with ClickHouse, Inc.