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

如何在Boomi中对比不同数据库下的MySQL数据表数据?

在Boomi中对比两个MySQL表数据集的操作步骤

一、先获取源/目标表的完整数据集

  • 拖入两个Database Query操作,分别配置好源MySQL和目标MySQL的数据库连接
  • 每个Query里写SQL拉取完整数据,必须带上用于匹配的唯一主键(比如SELECT id, col1, col2, ... FROM your_table)
  • 保证两个Query返回的字段结构对齐(字段名、数据类型对应),如果不对齐,后续用Map组件做字段映射调整

二、两种常用的数据集对比实现方式

方式1:用Lookup组件关联匹配(适合中小数据集)

  • 先把其中一个数据集(比如目标表数据)通过Cache组件缓存,作为Lookup的数据源
  • 处理另一个数据集(源表数据)时,在Map组件里加Lookup规则,用主键匹配缓存里的目标记录
  • 在Map里加判断逻辑:
    • 如果Lookup命中:逐字段对比源和目标的值,标记出差异字段
    • 如果Lookup没命中:标记成「源表有但目标表缺失」的记录
  • 要找「目标表有但源表缺失」的记录,就反向来一次:把源表数据缓存,用目标表数据做Lookup匹配,标记这类记录

方式2:用Data Process写Groovy脚本(适合大数据集)

  • 把两个数据集都传入Data Process组件,在脚本里做以下操作:
    1. 把两个数据集转成以主键为Key的Map集合,方便快速匹配
    2. 遍历源表的Map,对比目标表对应主键的字段值,收集差异记录和源表独有的记录
    3. 遍历目标表的Map,收集目标表独有的记录
  • 参考脚本片段:
// 读取源和目标数据集
def sourceRecords = dataContext.getStream('source').readRecords()
def targetRecords = dataContext.getStream('target').readRecords()

// 转成主键映射的Map
def sourceMap = sourceRecords.collectEntries { [(it.getField('id')): it] }
def targetMap = targetRecords.collectEntries { [(it.getField('id')): it] }

// 对比逻辑
def diffResults = []
// 源表 vs 目标表
sourceMap.each { key, sourceRec ->
    def targetRec = targetMap.get(key)
    if (!targetRec) {
        sourceRec.setField('diff_type', 'SOURCE_ONLY')
        diffResults.add(sourceRec)
    } else {
        // 这里以col1、col2为例,按需替换成你要对比的字段
        def hasDiff = false
        if (sourceRec.getField('col1') != targetRec.getField('col1')) {
            sourceRec.setField('col1_diff', "${sourceRec.getField('col1')} -> ${targetRec.getField('col1')}")
            hasDiff = true
        }
        if (sourceRec.getField('col2') != targetRec.getField('col2')) {
            sourceRec.setField('col2_diff', "${sourceRec.getField('col2')} -> ${targetRec.getField('col2')}")
            hasDiff = true
        }
        if (hasDiff) {
            sourceRec.setField('diff_type', 'FIELD_DIFF')
            diffResults.add(sourceRec)
        }
    }
}
// 目标表 vs 源表,收集目标独有的记录
targetMap.each { key, targetRec ->
    if (!sourceMap.get(key)) {
        targetRec.setField('diff_type', 'TARGET_ONLY')
        diffResults.add(targetRec)
    }
}

// 输出对比结果
dataContext.addStream(diffResults)

三、输出对比结果

对比完成后,把结果集通过Database Write写入日志表留存,或者用Message Shape发通知,也可以导出成CSV文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:02:44