欢迎光临
我们一直在努力

数据迁移完了,怎么证明数据是对的?

数据迁移完了,怎么证明数据是对的?

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 数据比对能力想解决的问题。

    赞(0)
    未经允许不得转载:171主机测评 » 数据迁移完了,怎么证明数据是对的?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址