You need to enable JavaScript to run this app. SQL场景下列名异构多源表每日增量追加数据至目的表 保留历史数据
优惠活动
大模型
产品
解决方案
定价
更多

SQL场景下列名异构多源表每日增量追加数据至目的表 保留历史数据

多源表每日增量同步至目的表的实现

核心逻辑

完全贴合「仅追加新增、不改动目的表存量、源表变更不影响目的表历史数据」的要求,判定规则为:

  • 匹配键采用ID + 来源标记Source的组合,不单独用ID判定重复
  • 仅当源表记录在目的表中不存在相同ID + Source组合时,才将该条记录追加写入目的表
  • 全流程不做目的表的更新、删除操作,源表后续的修改、删除动作完全不触发目的表变更,留存所有历史写入的数据

增量SQL示例(替换原全量插入逻辑)

原全量插入逻辑直接替换为带存在性校验的差量插入,以单个源表为例:

INSERT INTO dest_table (ID, Name, Source)
SELECT 
  s.ID, 
  s.Name, 
  'source_table' as Source -- 此处替换为对应源表的硬编码名称,和连接条件的Source值保持一致
FROM source_table s -- 替换为实际源表名
LEFT JOIN dest_table d
  ON s.ID = d.ID
  AND d.Source = 'source_table' -- 连接条件匹配当前源表的Source标记,避免跨源ID重复导致漏判
WHERE d.ID IS NULL -- 过滤掉已经在目的表存在的记录,仅保留待新增的差量数据

落地注意事项

  • 禁止使用「清空目的表再全量重插」的实现方式,会直接破坏目的表的历史留存数据
  • 不能仅用单字段ID做重复匹配:不同源表的ID生成逻辑相互独立,单ID匹配会误判跨源的同ID新记录为重复,导致漏插
  • 不需要额外的更新逻辑:按照需求,源表后续修改Name值、删除记录时,目的表已写入的对应记录保持不变,不做同步更新
  • 各源表字段命名不统一的问题,直接在SELECT子句中做字段映射即可,比如源表主键叫uid就映射为uid as ID,名称字段叫user_name就映射为user_name as Name,不需要修改源表结构,也不影响增量判断逻辑
  • 编写连接条件时,要和SELECT中硬编码的Source值完全一致,避免匹配错位导致全量插入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 13:45:01