这是我在clickhouse中的当前(简化)模型:
凭证表
用户:字符串
域:字符串
密码:string
泄漏:uint64
田野 leak
是对泄漏id的引用。
泄漏表
编号:uint64
名称:字符串
描述:字符串
日期:字符串
我在用mergetree引擎 Credential
和日志 Leak
.
有时会插入两个same凭据,因此我有一个示例:
|用户|域|密码| 0|
|用户|域|密码| 1|
我想把它变成:
|用户|域|密码|[0,1]|
我读过关于replacingmergetree的文章,但是我没有找到比 version
参数。
我的问题是我有几十亿个条目,在插入之前处理数据听起来很疯狂。即使clickhouse的响应时间非常低,检查我尝试插入的每个新凭据是否都已在其中,如果已在其中,则更新其数据,这似乎很可笑,对吗?
我试图尽可能地减少磁盘存储,但要保持这些难以置信的响应时间,似乎很难做到平衡。我在听你的想法。
1条答案
按热度按时间w51jfk4q1#
有很多方法可以解决这个问题。
您可以创建
Materialized Table
还有你的table。你可以用
ReplacingMergeTree
.您可以改变(更改或更新)现有数据。
按原样使用表,但使用
groupArray
得到你想要的结果。这里我演示第四种解决方案。你只要把数据插入
MergeTree
就像你一直做的那样。但是当你查询它时,你使用groupArray
将所需列滚动为基于其他列的数组。假设你的table是这样的:
你用
groupArray
要解决您的问题: