这些设置可在 system.merge_tree_settings 中查看,且由 ClickHouse 源代码自动生成。
write_final_mark
类型
Bool
默认值
1
已废弃设置,不起任何作用。
write_marks_for_substreams_in_compact_parts
类型
Bool
默认值
1
版本历史
| 版本 | 默认值 | 注释 |
|---|---|---|
| 25.8 | 1 | 默认启用在 compact parts 中按子流写入标记 |
| 25.5 | 0 | 新设置 |
启用后,在 Compact parts 中将按每个子流而不是按每一列写入标记。 这样便可以高效地从数据分区片段中读取单独的子列。
例如,列 t Tuple(a String, b UInt32, c Array(Nullable(UInt32))) 会被序列化为以下子流:
t.a表示 tuple 元素a的 String 数据t.b表示 tuple 元素b的 UInt32 数据t.c.size0表示 tuple 元素c的数组大小t.c.null表示 tuple 元素c中嵌套数组元素的 null mapt.c表示 tuple 元素c中嵌套数组元素的 UInt32 数据
启用此设置后,我们会为这 5 个子流分别写入一个标记,这意味着在需要时,可以分别从粒度中读取每个子流的
数据。例如,如果我们想读取子列 t.c,则只会读取
子流 t.c.size0、t.c.null 和 t.c 的数据,而不会读取子流 t.a 和 t.b 的数据。禁用此设置时,
我们只会为顶层列 t 写入一个标记,这意味着即使我们只需要某些子流的数据,也始终会从粒度中读取整列数据。