数据迁移完了,怎么证明数据是对的?
DataY 数据比对能力:从记录数到明细,一次配置,多表核验
数据迁移、数据同步、数仓建设,最难的往往不是“把数据搬过去”。
真正让人心里没底的,是搬完之后的那句话:
“数据到底对不对?”
源库 100 万行,目标库也是 100 万行,不代表数据就是一致的。
行数一样,可能字段值错了;字段值一样,可能主键缺失;单表对上了,可能关联表没对上。
很多团队最后只能回到最原始的方式:写 SQL、导 Excel、VLOOKUP、人工抽查。效率低、覆盖少,出了问题还很难追溯。
DataY 新增的数据比对能力,就是把这件“靠人盯”的事情,变成标准化的数据任务。
一、数据比对,到底难在哪里?
1. 迁移完成,不等于数据正确
数据同步任务显示“成功”,只能说明数据写过去了,不能说明数据内容一致。
常见问题包括:
- 源表 10 万行,目标表只有 9.8 万行
- 主键都存在,但金额、状态、时间字段不一致
- 源端多了一批新数据,目标端没有
- 目标端多出脏数据,源端已经删除
- 多张表单独看都正常,关联起来却对不上
这些问题不解决,后面的报表、指标、分析全都是“带病运行”。
2. 手工比对效率低、覆盖少
常见的临时方案是:
SELECT COUNT(*) FROM source_table;
SELECT COUNT(*) FROM target_table;
行数一致就认为没问题。
稍微认真一点,会写字段差异 SQL、做 checksum、导出 CSV 再用 Excel 对比。但很快会遇到新问题:
- 跨数据库,SQL 方言不一样
- 字段类型不一样,直接比较就报错
- 表多、字段多,SQL 写到手软
- 比对结果散落在聊天记录和 Excel 里
- 每次重新同步都要再来一遍
- 出了问题,无法证明“上次比对到底比了什么”
3. 不是所有场景都需要比对全部明细
日常巡检时,可能只想知道两张表行数是否一致。
迁移验收时,才需要逐行、逐字段检查差异。
如果所有场景都拉全量数据做明细比对,成本高、耗时长,还会给源库带来压力。
数据比对需要分级:既能快速看记录数,也能深入看明细。
二、DataY 怎么做数据比对?
DataY 把数据比对设计成一个独立任务,而不是一段临时 SQL。
1. 一个任务,支持多表比对
创建比对任务时,可以同时选择多张表。
每一张表独立配置:
- 左侧表
- 右侧表
- 主键字段
- 比对字段
- 左侧过滤条件
- 右侧过滤条件
右侧表默认与左侧同名,也可以手动修改。
这意味着一个任务可以完成:
ods_order -> dwd_order
ods_order_item -> dwd_order_item
ods_customer -> dim_customer
多张表一次配置、一次执行,结果按表分别展示。
2. 对比项可选:记录数对比、明细对比
DataY 支持两种对比项:
- 记录数对比
- 明细对比
新建任务默认只勾选记录数对比。
只比记录数
适合快速巡检和初步验收。
不需要配置主键字段,也不需要配置比对字段。
执行时只对两侧表执行:
SELECT COUNT(*) AS row_count FROM schema.table
不会读取源表全量数据,只比较总行数差异。
结果直接告诉你:
左侧行数:4
右侧行数:3
记录数差异:1
比对明细
需要逐行核验时,勾选明细对比。
配置主键字段和比对字段后,DataY 会按主键关联两侧数据,并识别:
- VALUE_DIFF:字段值差异
- ONLY_LEFT:仅左侧存在
- ONLY_RIGHT:仅右侧存在
例如:
差异类型,主键,左侧值,右侧值
字段值差异,2,21.00,20.00
仅左侧存在,3,30.00,
仅右侧存在,5,,50.00
记录数、一致行数、差异行数、仅左侧、仅右侧、值差异,一眼看清。
3. 底层用 ETL + DuckDB 执行
数据比对任务不是单独造一套执行引擎,而是复用 DataY 的 ETL 能力。
执行过程大致是:
左侧数据源 -> ETL 输入 -> 临时 DuckDB
右侧数据源 -> ETL 输入 -> 临时 DuckDB
↓
SQL 数据比对
↓
生成汇总与差异结果
↓
写入本地文件或 MinIO
这样做有几个好处:
- 跨 MySQL、PostgreSQL、DuckDB 等数据源统一处理
- 比对 SQL 在 DuckDB 中执行,不依赖某一侧数据库的能力
- 结果文件统一落地,便于下载、归档和审计
- 复用 ETL 的任务实例、日志和状态体系
4. 比对结果按任务实例追溯
每次执行都会生成一个任务实例。
结果查看默认展示最近一次比对:
- 执行状态
- 执行时间
- 左右行数
- 一致行数
- 差异行数
- 仅左侧、仅右侧、值差异
- 差异明细前 100 行
需要查看历史结果时,再通过「历史任务实例」切换。
每个执行实例都有唯一 ID,可以按实例 ID 直接查询结果。
结果文件也带实例 ID 和表名,便于定位:
data-compare/{taskId}/diff_result_{jobInstanceId}_{序号}_{表名}.csv
data-compare/{taskId}/summary_{jobInstanceId}_{序号}_{表名}.csv
文件存储支持:
- 本地文件
- MinIO
集群部署时使用 MinIO,多节点都可以访问同一份比对结果。
5. 多表结果分别展示
多表任务执行完成后,结果页会展示每张表的比对情况:
| ods_date | dim_date | 1096 / 1096 | 0 |
| ods_order | dwd_order_wide | 40 / 40 | 0 |
点击任意一张表,可以切换到该表的差异明细,也可以单独下载该表的:
- 差异文件
- 汇总文件
不用再在一张大表里翻找。
三、哪些场景适合用?
场景一:数据迁移验收
从 MySQL 迁移到 PostgreSQL,或者从业务库同步到数仓。
迁移任务跑完后,直接创建比对任务:
- 先比记录数,快速确认数据量
- 再比明细,确认字段值、主键、增量数据是否一致
场景二:跨库数据对账
两边系统各有一套数据,需要定期核对。
DataY 支持跨数据源比对,不要求两侧是同一个数据库。
场景三:数据修复验证
修复了一批异常数据后,需要确认:
- 差异行是否减少
- 是否引入了新的不一致
- 目标端是否多写、漏写
通过历史任务实例,可以直接对比修复前后的比对结果。
场景四:多表批量核验
一次迁移几十张表,逐张写 SQL 不现实。
多表比对任务可以统一配置、统一执行、统一查看结果。
四、使用建议
先记录数,后明细 日常巡检只开记录数对比,成本最低;验收或排障时再开明细对比。
主键要唯一 明细对比依赖主键关联,主键重复会导致差异结果放大。
大表加过滤条件 只比对目标时间范围或业务范围,避免无意义全量扫描。
跨库字段类型尽量一致 DataY 会做统一转换,但源端和目标端字段语义一致,比对结果更可靠。
集群环境使用 MinIO 本地文件只适合单机部署,集群部署建议统一使用 MinIO。
五、关于 DataY
DataY 是一套开源、轻量的一体化数据平台,理念很简单:
数据平台可以很小,功能不打折。
传统数据平台往往需要 Hadoop、Spark、Flink、ClickHouse 一整套组件,几十台机器起步,运维门槛高。DataY 选择另一条路:
- 一个 JAR,自研流批一体处理引擎,拒绝组件地狱;
- 2 核 4G 就能跑通数据集成 → 数据建模 → 数据开发 → 任务调度 → 数据应用;
- 零依赖启动,10 分钟搭好开发环境;
- 调度 master 与执行 worker 可分可合,单机和集群同一套代码;
- 内嵌 DuckDB 作为高性能分析引擎,同时支持 Doris、ClickHouse 等外部分析引擎。
这里的“轻量”指的是运行资源门槛低,不是能力轻量。
DataY 由两块组成:
| DataY Core | 数据集成引擎 | 轻量、可嵌入、可扩展、流批一体;JSON 定义任务、自动建表、CDC 实时同步;可脱离 Web 独立运行或嵌入 Java 应用 |
| DataY Web | 可视化数据平台 | 拖拽式任务设计、任务调度、维度建模、指标管理、智能问数 |
和本文这条实时链路相关的能力:
- 🔌 多数据源:MySQL / PostgreSQL / Oracle / SQL Server / SAP HANA / Doris / ClickHouse / DuckDB 等二十余种数据源;
- 🔄 四种 CDC:MySQL Binlog、PostgreSQL WAL、Oracle LogMiner、MongoDB Change Streams;
- 🧩 统一组件模型:Source / Operator / Sink,批流共用;
- 🛡️ 断点续传:Binlog 位点、LSN、SCN、resumeToken 统一持久化;
- 🏗️ 自动建表:跨库 DDL 转换,表不存在时自动创建;
- 🚀 Doris 流式写入:内置 DorisStreamLoad,支持 insert / delete / overwrite;
- 🧮 流内计算:StreamSQL、Join、Lookup、DataTransform,同步路上顺手把数据加工好;
- ⏰ 任务调度:Quartz Cron 精确到秒,DAG 拓扑编排,master/worker 可分离;
- 🤖 MCP Harness:把数据源、数据服务、ETL 任务、数据模型暴露给 AI Agent,让 Agent 直接操作平台对象;
- 📦 可嵌入:Core 可以作为 Java 库,嵌进你自己的应用。
快速开始:
git clone https://gitee.com/yuyuejia/datay.git
cd datay
mvn clean package -DskipTests
java -jar datay-web/target/*.jar –DATAY_AI_API_KEY=sk-xxxxxxxxx
# 浏览器打开 http://localhost:8080,默认账号 admin/admin
也可以只用 Core 跑单个任务:
java -jar datay-core/target/datay-core-*-jar-with-dependencies.jar taskConfig.json
产品首页:http://datay.yuyuejia.com.cn/ 在线体验:http://datay-demo.yuyuejia.com.cn/ 项目地址:https://gitee.com/yuyuejia/datay
DataY 想做的,不是再堆一套大数据组件,而是把数据集成、建模、调度、数仓和问数,收进一个足够轻的平台上。
数据比对,是 DataY 数据集成能力的一块新拼图。
它不追求“再做一个对账工具”,而是让数据比对成为数据平台里的标准任务:
可配置、可执行、可追溯、可复用。
数据迁移完成,只是开始。
真正让人放心的,是有一份可验证、可下载、可回溯的比对结果。
这,就是 DataY 数据比对能力想解决的问题。





