【问题标题】:clickhouse - CollapsingMergeTree works like ReplacingMergeTreeclickhouse - CollapsingMergeTree 的工作方式类似于 ReplacingMergeTree
【发布时间】:2021-12-24 10:25:20
【问题描述】:

我创建了带有 clickhouse-server 的 docker 容器,里面有挂载的目录。

docker run -d --name clickserver -p 8213:8123 -v C:\Users\mankov.k\Desktop\Test_task\epay:/data chserver

chserver 是通过 Dockerfile 创建的 docker 镜像

FROM clickhouse/clickhouse-server:21.11.6.7
WORKDIR /data

docker build -t chtest8 .

现在我有一个名为 data.csv 的 csv 文件,我正在尝试将其插入 CollapsingMergeTree 表中。

调用创建的表

CREATE TABLE cmt_1(id UInt64, 
                   dt_u DateTime, 
                   IdUser UInt32, 
                   Summa Decimal(11, 2), 
                   agent UInt16, 
                   idCurrency UInt16, 
                   subagent UInt32, 
                   dt_pay DateTime, 
                   mainUserId UInt32, 
                   id_country UInt16, 
                   refUser UInt16, 
                   refTransact UInt32, 
                   globalProject UInt16, 
                   currencyUser UInt16, 
                   AffilateId UInt32, 
                   isFirstdep UInt8, 
                   epay_status UInt32, 
                   Sign Int8)Engine=CollapsingMergeTree(Sign) 
ORDER BY (epay_status, agent, subagent) 
PARTITION BY toYYYYMM(dt_pay);

data.csv 里面有 1.32 亿行,每行的 Sign 字段等于 1(我的意思是 Sign 字段中没有任何 -1)

我正在尝试使用 bash 命令插入数据

cat data.csv | clickhouse-client --query="INSERT INTO cmt_1 FORMAT CSV"

除了我的 CollapsingMergeTree 像 ReplacingMergeTree 一样工作外,所有插入都很好。我的意思是它从 ORDER BY 字段(epay_status、agent、subagent)中删除具有相等值的行。但是 CollapsingMergeTree 应该删除具有相同 ORDER BY 字段不同符号值(-1 和 1)的行。但我在 Sign 字段中没有任何 -1。

因此,我的 1.3 亿行合并为 65k 行。

例子

在 csv 我有

922514853,"2019-04-05 15:28:37",56091623,10,58,12,1171,"2020-11-20 13:50:58",56091623,148,1,0,1,12,0,0,3,1
1217950451,"2019-08-26 11:26:40",5237207,15,490,20,2579,"2020-11-26 15:16:21",5237207,1,1,0,1,1,0,0,5,1
1217958553,"2019-08-26 11:26:40",5237207,2,490,20,2579,"2020-11-26 15:16:21",5237207,1,1,0,1,1,0,0,7,1
1217975479,"2019-08-26 11:26:40",5237207,2,490,20,2579,"2020-11-26 15:16:21",5237207,1,1,0,1,1,0,0,2,1
1217975675,"2019-08-26 11:26:40",5237207,2,490,12,2579,"2020-11-26 16:07:07",5237207,1,1,0,1,1,0,0,7,1

但是在我的桌子上我有

┌─────────id─┬────────────────dt_u─┬────IdUser─┬─Summa─┬─agent─┬─idCurrency─┬─subagent─┬──────────────dt_pay─┬─mainUserId─┬─id_country─┬─refUser─┬─refTransact─┬─globalProject─┬─currencyUser─┬─AffilateId─┬─isFirstdep─┬─epay_status─┬─Sign─┐
│ 1217950451 │ 2019-08-26 11:26:40 │   5237207 │    15 │   490 │         20 │     2579 │ 2020-11-26 15:16:21 │    5237207 │          1 │       1 │           0 │             1 │            1 │          0 │          0 │           5 │    1 │
│ 1217975479 │ 2019-08-26 11:26:40 │   5237207 │     2 │   490 │         20 │     2579 │ 2020-11-26 15:16:21 │    5237207 │          1 │       1 │           0 │             1 │            1 │          0 │          0 │           2 │    1 │
│ 1217975675 │ 2019-08-26 11:26:40 │   5237207 │     2 │   490 │         12 │     2579 │ 2020-11-26 16:07:07 │    5237207 │          1 │       1 │           0 │             1 │            1 │          0 │          0 │           7 │    1 │
│ 1222374915 │ 2019-08-26 11:26:40 │   5237207 │    50 │   490 │         12 │     2597 │ 2020-11-26 16:07:07 │    5237207 │          1 │       1 │           0 │             1 │            1 │          0 │          0 │           4 │    1 │
│ 1629063475 │ 2020-01-09 18:12:46 │ 160644195 │    25 │   111 │          3 │     2045 │ 2020-11-04 11:57:50 │  160644195 │          2 │      25 │           0 │             1 │            3 │          0 │          0 │           1 │    1 │

您可以看到带有id 1217958553 和1217975675 的行折叠到第二行。

伙计们,我在做什么?

【问题讨论】:

  • 您能否提供data.csv 的示例,其中 2 行折叠成 1 行?
  • @AndreiKoch 添加到问题描述中
  • 你确定吗?您刚刚发布了表格的 sn-p。此外,您在 csv 和表格中都有 5 行。我建议您通过创建具有相同结构的单独表并准确插入 5 个指定行来缩小问题范围
  • @AndreiKoch 我在 csv 和 table 中都按 id 对行进行了排序,因此我可以检查至少前 5 行之间是否有任何不同。
  • clickhouse.com/docs/en/engines/table-engines/mergetree-family/… 最后一个“状态”行,如果“状态”行多于“取消”行。

标签: docker clickhouse


【解决方案1】:

感谢@DennyCrane 在 cmets 中的回答。

CollapsingMergetree documentation

CollapsingMergeTree 基本上可以折叠 ORDER BY 字段中具有相同值的行,这就是该功能。另外,您必须知道,我不会同时折叠所有内容,折叠过程可能需要一段时间,因此您可以使用 OPTIMIZE TABLE FINISH;无需等待即可折叠所有内容。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2015-01-19
  • 2018-10-02
  • 2019-03-02
  • 2021-09-23
  • 2021-11-05
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多