You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并增量数据集与快照数据集并保留已删除行?

数据集删除行保留最优实现方案

1. 新增统一元数据字段

给Dataset Y、Dataset Z统一新增3个核心元数据字段,所有字段值随行变更同步更新:

  • op_type:操作类型枚举,标记行对应操作是插入I、更新U、删除D
  • row_version:行版本时间戳,精确到毫秒即可,取值为对应操作在源表发生的时间
  • is_deleted:布尔型软删除标记,删除行设为true,正常有效行设为false

2. 调整Dataset Y的生成与快照逻辑

  • 同步源表操作时,除了新增、更新行之外,单独捕获源表的删除事件,为每个删除行生成一条op_type=D、is_deleted=true的增量记录,保留该行所有原有业务字段,row_version取删除操作发生时间
  • Dataset Y的快照按row_version分区存储,所有历史变更记录(含删除记录)永久留存,滚动快照时不清理历史版本,从根源避免删除行丢失

3. 重构Dataset Z的合并逻辑

原合并逻辑仅取X或Y的最新版本,调整后规则如下:

  1. 预处理Dataset X:为X中所有行补充元数据字段,is_deleted默认设为false,row_version取X的快照生成时间
  2. 预处理Dataset Y:按主键对Y的所有记录分组,取每组中row_version最大的记录,得到每个主键的最新增量状态集合
  3. 按主键关联两个预处理后的数据集执行合并:
    • 主键同时出现在X和Y最新集合:优先取Y的记录,不管是更新状态还是删除状态
    • 主键仅出现在Y最新集合且is_deleted=true:直接保留该删除记录到Z
    • 主键仅出现在X:直接保留X的对应记录

可选优化:兼容X的软删除逻辑

如果可以调整Dataset X的生成规则,可进一步简化合并逻辑:
每次生成X快照时,和上一版本X做全量主键对比,上一版本存在、当前源表不存在的行,在本次X快照中标记is_deleted=true,保留所有原有字段。调整后Z的合并逻辑可简化为直接取同主键下row_version更大的记录即可,无需单独处理X缺失的删除行。

内容的提问来源于stack exchange,提问作者tomwhittaker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 13:24:03