gpt4 book ai didi

ClickHouse 替换 MergeTree

转载 作者:行者123 更新时间:2023-12-05 06:38:15 25 4
gpt4 key购买 nike

我正在尝试了解 ReplacingMergeTree 引擎的工作原理。

我在下表中配置了这样的引擎。


┌─品牌─┬─国家─┬─id─────┬────更新─┬─版本─┐
│ 即时通讯 │ 法国 │ 1 │ 2017-09-29 │ 2 │
│ 即时通讯 │ 法国 │ 2 │ 2017-09-29 │ 0 │
│ 即时通讯 │ 法国 │ 3 │ 2017-09-29 │ 1 │
└────────┴──────────┴────────┴────────────┴──────── ┘

此时一切正常

然后我执行以下 INSERT


INSERT INTO table(brand, country, id, updated, version) VALUES ('IM', 'FR', 1, '2017-10-29', 3);

正如预期的那样,有 2 行的 id 1:


┌─品牌─┬─国家─┬─id─────┬────更新─┬─版本─┐
│ 即时通讯 │ 法国 │ 1 │ 2017-09-29 │ 2 │
│ 即时通讯 │ 法国 │ 2 │ 2017-09-29 │ 0 │
│ 即时通讯 │ 法国 │ 3 │ 2017-09-29 │ 1 │
└────────┴──────────┴────────┴────────────┴──────── ┘
┌─品牌─┬─国家─┬─id─────┬────更新─┬─版本─┐
│ 即时通讯 │ 法国 │ 1 │ 2017-10-29 │ 3 │
└────────┴──────────┴────────┴────────────┴──────── ┘

由于此表的主键是 (brand, country, id),我希望在此表上进行合并会替换 id=1 且具有较低版本 2 的行。

触发与 OPTIMIZE TABLE 表 的合并来检查,似乎它并没有以这种方式工作,而且两行都令人惊讶地保留了下来。


┌─品牌─┬─国家─┬─id─────┬────更新─┬─版本─┐
│ 即时通讯 │ 法国 │ 1 │ 2017-10-29 │ 3 │
└────────┴──────────┴────────┴────────────┴──────── ┘
┌─品牌─┬─国家─┬─id─────┬────更新─┬─版本─┐
│ 即时通讯 │ 法国 │ 1 │ 2017-09-29 │ 2 │
│ 即时通讯 │ 法国 │ 2 │ 2017-09-29 │ 0 │
│ 即时通讯 │ 法国 │ 3 │ 2017-09-29 │ 1 │
└────────┴──────────┴────────┴────────────┴──────── ┘

最佳答案

从逻辑上讲,它应该像您描述的那样工作。version 列名可能有问题?如果在表定义时不指定,则调用_part_index?

你能提供你的show create table吗?

有 ReplacingMergeTree 的测试 https://github.com/yandex/ClickHouse/blob/012c5f1079e7a2605e872eb223b9c5dcd065880e/dbms/tests/queries/0_stateless/00325_replacing_merge_tree.sql.disabled

文档:https://clickhouse.yandex/docs/en/table_engines/replacingmergetree.html

关于ClickHouse 替换 MergeTree,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46486053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com