在https://www.linkedin.com/pulse/data-lt-mysteries-effectivity-satellite-driving-key-patrick-cuba/?trk=read_related_article-card_title中,Patrick Cuba 展示了仅插入逻辑在填充效率卫星。
但是,当将其应用于我们有乱序事件的事件流时,摄取和查询逻辑的复杂性似乎爆炸式增长。
例子
考虑这一系列描述个人雇佣关系变化的变化事件。
person_id | 员工ID | src_event_time | 更改类型 |
---|---|---|---|
一个 | X | t1 | 插入 |
一个 | X | t2 | 删除 |
一个 | X | t3 | 插入 |
考虑以下场景,其中事件按顺序出现t3, t1, t2
,我们将其摄取到有效性链接卫星表中:
1.处理事件t3
person_id | 员工ID | 有效性开始日期 | 有效性结束日期 |
---|---|---|---|
一个 | X | t3 | t9999 |
2.处理事件t1
在我们的摄取逻辑中,我们可以确定新事件时间t1
在现有事件之前t3
。所以我们将有效性设置为介于t1
和t3
person_id | 员工ID | 有效性开始日期 | 有效性结束日期 |
---|---|---|---|
一个 | X | t3 | t9999 |
一个 | X | t1 | t3 |
3.处理事件t2
这就是事情变得有点奇怪的地方。我们的逻辑必须检测到存在有效期限(从 t1 到 t3),然后通过添加 (t1 - t2) 有效期限来“纠正”它。由于我们的约束是我们只插入而不更新现有行,因此我们现在有两个具有相同 start time 的有效行t1
。
person_id | 员工ID | 有效性开始日期 | 有效性结束日期 |
---|---|---|---|
一个 | X | t3 | t9999 |
一个 | X | t1 | t3 |
一个 | X | t1 | t2 |
问题
这是正确的方法吗?我将如何查询给定时间点的关系状态?(例如,我将如何查询t1.5
, 或的关系t2.5
?)