如何解决如何对聚合的 1:N 关系建模?
我想将一系列事件放入 Clickhouse,它们通过 id
字段关联到单个实体。每个事件类型都有实体的不同部分,大多数事件类型发生一次,但有些事件发生多次。我试图弄清楚如何对此进行建模,以便表中有一行(在 OPTIMIZE
之后)来表示该实体(即使每个实体有多个事件)。
我的数据是这样的,其中事件 D 是可以多次发生的事件:
Event type A:
{
"id": <string identifier>,"a": <data for field a>
"aa": <data for field aa>
}
Event type B:
{
"id": <string identifier>,"b": <data for field b>,"bb": <data for field bb>
}
Event type C:
{
"id": <string identifier>,"c": <data for field c>,"cc": <data for field cc>
}
Event type D:
{
"id": <string identifier>,"d": <data for field d>,"dd": <data for field dd>
}
我希望 Clickhouse 中的表格看起来像这样:
CREATE TABLE events
(
id String,a Nullable(String),aa Nullable(String),b Nullable(String),bb Nullable(String),c Nullable(String),cc Nullable(String),d Nullable(Array(String)),dd Nullable(Array(String))
)
其中列 d
和 dd
的元素的顺序相同,例如d[1]
和 dd[1]
应该来自事件 D 的同一实例。
我遇到的问题是想出一个正确的引擎来给我这个。我很自然地为此去了 AggregatingMergeTree
并使用 id
作为排序键,但我不知道如何聚合来自事件 D 的字段。我认为这可能是因为明显缺乏将值聚合到该类型数组中的聚合函数(例如,将 Nullable(String)
聚合到 Array(String)
中)。
是否有这样的函数或表引擎可以完成我正在尝试做的事情,或者我是否正确地考虑了这一点?我意识到我可以将 D 事件写入单独的表,但我想尽可能避免连接。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。