Update mergetree.md (#13969)

* Update mergetree.md

Correct some wrong logic like translate of ‘big row’,Add some missing prpeties in new version。

* Update docs/zh/engines/table-engines/mergetree-family/mergetree.md

* Update mergetree.md

correct a wrong separate of TTL rule

Co-authored-by: Ivan Blinkov <github@blinkov.ru>
This commit is contained in:
Gao Qiang 2020-08-27 16:20:42 +08:00 committed by GitHub
parent 67f16d5ae8
commit 9a6f8c0d58
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,19 +8,19 @@ Clickhouse 中最强大的表引擎当属 `MergeTree` (合并树)引擎及
- 存储的数据按主键排序。
这让你可以创建一个用于快速检索数据的小稀疏索引。
这让你可以创建一个用于快速检索数据的小稀疏索引。
- 允许使用分区,如果指定了 [分区键](custom-partitioning-key.md) 的话。
在相同数据集和相同结果集的情况下 ClickHouse 中某些带分区的操作会比普通操作更快。查询中指定了分区键时 ClickHouse 会自动截取分区数据。这也有效增加了查询性能。
在相同数据集和相同结果集的情况下 ClickHouse 中某些带分区的操作会比普通操作更快。查询中指定了分区键时 ClickHouse 会自动截取分区数据。这也有效增加了查询性能。
- 支持数据副本。
`ReplicatedMergeTree` 系列的表便是用于此。更多信息,请参阅 [数据副本](replication.md) 一节。
`ReplicatedMergeTree` 系列的表便是用于此。更多信息,请参阅 [数据副本](replication.md) 一节。
- 支持数据采样。
需要的话,你可以给表设置一个采样方法。
需要的话,你可以给表设置一个采样方法。
!!! 注意 "注意"
[合并](../special/merge.md#merge) 引擎并不属于 `*MergeTree` 系列。
@ -41,7 +41,7 @@ Clickhouse 中最强大的表引擎当属 `MergeTree` (合并树)引擎及
[SAMPLE BY expr]
[SETTINGS name=value, ...]
请求参数的描述,参考 [请求描述](../../../engines/table-engines/mergetree-family/mergetree.md) 。
对于以上参数的描述,可参考 [CREATE 语句 的描述](../../../engines/table-engines/mergetree-family/mergetree.md) 。
<a name="mergetree-query-clauses"></a>
@ -49,35 +49,49 @@ Clickhouse 中最强大的表引擎当属 `MergeTree` (合并树)引擎及
- `ENGINE` - 引擎名和参数。 `ENGINE = MergeTree()`. `MergeTree` 引擎没有参数。
- `ORDER BY` — 排序键。
可以是一组列的元组或任意的表达式。 例如: `ORDER BY (CounterID, EventDate)`
如果没有使用 `PRIMARY KEY` 显式的指定主键ClickHouse 会使用排序键作为主键。
如果不需要排序,可以使用 `ORDER BY tuple()`. 参考 [选择主键](https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/mergetree/#selecting-the-primary-key)
- `PARTITION BY` — [分区键](custom-partitioning-key.md) 。
要按月分区,可以使用表达式 `toYYYYMM(date_column)` ,这里的 `date_column` 是一个 [Date](../../../engines/table_engines/mergetree_family/mergetree.md) 类型的列。这里该分区名格式会是 `"YYYYMM"` 这样。
要按月分区,可以使用表达式 `toYYYYMM(date_column)` ,这里的 `date_column` 是一个 [Date](../../../engines/table-engines/mergetree-family/mergetree.md) 类型的列。分区名的格式会是 `"YYYYMM"`
- `ORDER BY` — 表的排序键。
- `PRIMARY KEY` - 主键,如果要设成 [跟排序键不相同](#xuan-ze-gen-pai-xu-jian-bu-yi-yang-zhu-jian),可选
可以是一组列的元组或任意的表达式。 例如: `ORDER BY (CounterID, EventDate)`
- `PRIMARY KEY` - 主键,如果要设成 [跟排序键不相同](#xuan-ze-gen-pai-xu-jian-bu-yi-yang-zhu-jian)。
默认情况下主键跟排序键(由 `ORDER BY` 子句指定)相同。
因此,大部分情况下不需要再专门指定一个 `PRIMARY KEY` 子句。
默认情况下主键跟排序键(由 `ORDER BY` 子句指定)相同。
因此,大部分情况下不需要再专门指定一个 `PRIMARY KEY` 子句。
- `SAMPLE BY` — 用于抽样的表达式。
如果要用抽样表达式,主键中必须包含这个表达式。例如:
`SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`
如果要用抽样表达式,主键中必须包含这个表达式。例如:
`SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID))`
- TTL 指定行存储的持续时间并定义 PART 在硬盘和卷上的移动逻辑的规则列表,可选。
表达式中必须存在至少一个 `Date``DateTime` 类型的列,比如:
`TTL date + INTERVAl 1 DAY`
规则的类型 `DELETE|TO DISK 'xxx'|TO VOLUME 'xxx'`指定了当满足条件(到达当前时间)时所要执行的动作:移除过期的行,还是将 PART 如果PART中的所有行都满足表达式的话移动到指定的磁盘`TO DISK 'xxx'`) 或 卷(`TO VOLUME 'xxx'`)。默认的规则是移除(`DELETE`)。可以在列表中指定多个规则,但最多只能有一个`DELETE`的规则。
- `SETTINGS` — 影响 `MergeTree` 性能的额外参数:
- `index_granularity` — 索引粒度。即索引中相邻『标记』间的数据行数。默认值8192 。该列表中所有可用的参数可以从这里查看 [MergeTreeSettings.h](https://github.com/ClickHouse/ClickHouse/blob/master/src/Storages/MergeTree/MergeTreeSettings.h) 。
- `index_granularity_bytes` — 索引粒度,以字节为单位,默认值: 10Mb。如果仅按数据行数限制索引粒度, 请设置为0(不建议)。
- `enable_mixed_granularity_parts` — 启用或禁用通过 `index_granularity_bytes` 控制索引粒度的大小。在19.11版本之前, 只有 `index_granularity` 配置能够用于限制索引粒度的大小。当从大表(数十或数百兆)中查询数据时候,`index_granularity_bytes` 配置能够提升ClickHouse的性能。如果你的表内数据量很大可以开启这项配置用以提升`SELECT` 查询的性能。
- `use_minimalistic_part_header_in_zookeeper` — 数据片段头在 ZooKeeper 中的存储方式。如果设置了 `use_minimalistic_part_header_in_zookeeper=1` ZooKeeper 会存储更少的数据。更多信息参考『服务配置参数』这章中的 [设置描述](../../../operations/server-configuration-parameters/settings.md#server-settings-use_minimalistic_part_header_in_zookeeper) 。
- `index_granularity` — 索引粒度。索引中相邻『标记』间的数据行数。默认值8192 。参考[Data Storage](#mergetree-data-storage)
- `index_granularity_bytes` — 索引粒度,以字节为单位,默认值: 10Mb。如果想要仅按数据行数限制索引粒度, 请设置为0(不建议)。
- `enable_mixed_granularity_parts`是否启用通过 `index_granularity_bytes` 控制索引粒度的大小。在19.11版本之前, 只有 `index_granularity` 配置能够用于限制索引粒度的大小。当从具有很大的行(几十上百兆字节)的表中查询数据时候,`index_granularity_bytes` 配置能够提升ClickHouse的性能。如果你的表里有很大的行,可以开启这项配置来提升`SELECT` 查询的性能。
- `use_minimalistic_part_header_in_zookeeper`是否在 ZooKeeper 中启用最小的数据片段头 。如果设置了 `use_minimalistic_part_header_in_zookeeper=1` ZooKeeper 会存储更少的数据。更多信息参考『服务配置参数』这章中的 [设置描述](../../../operations/server-configuration-parameters/settings.md#server-settings-use_minimalistic_part_header_in_zookeeper) 。
- `min_merge_bytes_to_use_direct_io` — 使用直接 I/O 来操作磁盘的合并操作时要求的最小数据量。合并数据片段时ClickHouse 会计算要被合并的所有数据的总存储空间。如果大小超过了 `min_merge_bytes_to_use_direct_io` 设置的字节数,则 ClickHouse 将使用直接 I/O 接口(`O_DIRECT` 选项)对磁盘读写。如果设置 `min_merge_bytes_to_use_direct_io = 0` ,则会禁用直接 I/O。默认值`10 * 1024 * 1024 * 1024` 字节。
<a name="mergetree_setting-merge_with_ttl_timeout"></a>
- `merge_with_ttl_timeout` — TTL合并频率的最小间隔时间。默认值: 86400 (1 天)。
- `write_final_mark` — 启用或禁用在数据片段尾部写入最终索引标记。默认值: 1不建议更改
- `merge_with_ttl_timeout` — TTL合并频率的最小间隔时间,单位:秒。默认值: 86400 (1 天)。
- `write_final_mark`是否启用在数据片段尾部写入最终索引标记。默认值: 1不建议更改
- `storage_policy` — 存储策略。 参见 [使用多个区块装置进行数据存储](#table_engine-mergetree-multiple-volumes).
- `min_bytes_for_wide_part`,`min_rows_for_wide_part` 在数据分段中可以使用`Wide`格式进行存储的最小字节数/行数。你可以不设置、只设置一个,或全都设置。参考:[Data Storage](#mergetree-data-storage)
**示例配置**