已经详细介绍了dataCompare 的功能,目前dataCompare 已经实现同源数据的对比
一、dataCompare 现有核心功能如下:
(1)数量级对比
(2)一致性对比
(3)差异case 自动发现
(4)定时调度自动对比数据
二、背景
但是上述功能目前只是针对于同源数据的对比,首先来介绍一下文中提到的同源和异源的概念
同源数据定义:
(1)相同的数据存储(比如说:mysql 和mysql,Hive 和Hive、Doris和Doris),因此只适用相同的数据存储
(2)同库或者同集群,比如说:Hive 和Hive 数据对比,要保证数据能在通一个集群进行运行,通常是利用集群来进行大批量数据的对比校验
因此,能够非常明显的看到目前大数据对比平台功能只适用于数据迁移中的对比,而不适用于数据架构升级,比如说:本来Hive 存储的数据由于架构升级需要迁移到Iceberg 或者Doris 等等数据存储中。
自从代码开源之后,获取了不少关注着,它们都提出了异源对比的要求。那么何为异源数据呢?
(1)不同的数据存储,比如说:Hive 和Doris、Hive和Iceberg 等等
(2)相同的数据存储,但是可能会跨库跨集群,也就是没办法把两边的数据在一个集群里面运行对比(如果能在一个集群里面获取到两边的数据还是认为同源的)
三、遇到的问题
那么针对异源数据的对比,有没有什么办法呢,又会遇到哪些问题呢?
目前异源数据对比存在如下问题:
(1)跨存储,不同的存储导致所支持的sql 不同,比如说Hive和ClickHouse,明显支持的sql 就有差异
(2)数据量大,没办法直接在内存里面进行对比,同源数据都是利用集群的方式进行对比的
四、解决方案
为了解决异源数据对比,目前提出了如下两种解决方案
(1)最简单的方案,把数据弄到一起,也就是转成同源数据对比,但是这样明显很浪费时间,需要数据同步,同时也浪费存储
(2)利用一些技巧来实现异源数据的对比
本文主要介绍如何利用一些数据的技巧来实现异源数据的对比
比如说:由于数据架构升级,之前的Hive(user_info_hive) 数据 升级到用Doris(user_info_doris) 进行存储(要求:表结构不变,只是数据存储升级)
(1)分别计算user_info_hive、user_info_doris 的pv和uv,分别记录为pv_hive,pv_doris,uv_hive,uv_doris
(2)采用hash的方式,a.对于user_info_hive、user_info_doris 的主键 user_id 进行hash,分别统计;b.对于user_info_hive、user_info_doris 所有字段拼接构建md5分别hash 统计
(3)一致性校验:选择user_info_hive、user_info_doris 其中主键user_id hash值相同的1w 条数据进行对比,看有多少条数据两边同时都能找到
因此通过上述的数据技巧,来进行对比数据也是非常合理的,同样能够达到数据对比的效果。