CN114625809A - 一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备 - Google Patents
一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备 Download PDFInfo
- Publication number
- CN114625809A CN114625809A CN202210210503.6A CN202210210503A CN114625809A CN 114625809 A CN114625809 A CN 114625809A CN 202210210503 A CN202210210503 A CN 202210210503A CN 114625809 A CN114625809 A CN 114625809A
- Authority
- CN
- China
- Prior art keywords
- data
- increment
- log
- full
- incremental
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/283—Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备,其中方法包括:获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表;获取上一同步时间段的全量表,对所述全量表过滤出当前同步时间段内未发生过变更的数据;对所述待合并增量表与所述全量表的过滤结果进行合并更新为当前同步时段的全量表,并根据更新后的全量表将数据导入数据仓库。
Description
技术领域
本发明涉及数据同步领域,尤其是涉及一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备。
背景技术
随着人工智能、移动互联网和物联网的兴起,大数据技术也得到了飞速发展,大数据已经融入了各行各业。各个公司也会建立基于大数据平台的数据仓库,Hive是业界常用的一个建立在Hadoop架构上的数据仓库,它能提供数据表的查询和分析。除了使用Hive管理数据之外,常常也需要在Hive数据仓库与关系型数据库如MySQL之间进行数据同步
在将关系型数据库中数据同步到数据仓库的应用场景中,通常是将关系型数据库中数据表的数据每天全量同步到数据仓库Hive中,这样如果数据库中数据表的数据量较大,全量数据同步的耗时会很长,而且还会影响数据表的读写,全量数据同步的周期也不能过于频繁。
对此,为了能更高效的将关系型数据库例如MySQL中的数据落入数据仓库Hive,目前大多公司均摒弃了每天将数据库中的数据全量同步到数据仓库Hive的方式,而是采用仅第一次拉取数据库的全量数据,而后定时(如每小时)搜集MySQL数据库的Binlog日志,解析所搜集的Binlog日志文件获得增量数据,并在预设时间(如每天凌晨数据库工作较为空闲时),与全量数据进行融合(merge)的方式,以实现将数据库中的数据入库Hive。
对于这种将关系型数据库MySQL中数据入数据仓库Hive的方式,其增量与全量数据融合的效率与准确性成为关键。对此,目前大多数互联网公司均采用如下方式进行增量数据与全量数据融合(merge):利用数据库MysQl表的唯一键来判定是否为同一条数据,如果同一条数据既出现在增量表中又出现在全量表中,状态为变更(update),则仅保留增量表里的这条数据的最后一次变更的结果,如下表1所示:
表1
如果id字段为唯一键,对于id为1的记录没有变更,为同一条数据,既出现在增量表中又出现在全量表中,则状态为update,仅保留增量表中这条数据的最后一次变更的结果,对于id为2的记录做了变更,则保留增量表中变更后的结果,增加了id为3的记录,则保留增量表中该条记录,对于id为5的记录没有变更,保留全量表中该条记录,最后对所有保留的记录进行合并,得到增量表与全量表融合(merge)的结果。
然而,上述方式存在一个问题:当某条记录的唯一键值发生变更(update)的时候,往往无法判定变更前和变更后是否为同一条数据,如下表2所示:
表2
同样地,假设id字段为唯一键,对于id为1的记录,唯一键没有发生变更,可以利用上述现有的方案进行融合(merge),但是对于id为2的记录,由于其id键值发生了变化,由2变为3,如果仅根据唯一键进行去重融合(merge),则会判定id为2和id为3的记录为两条数据,导致去重不彻底,从而使得同步后MySQL数据库中的数据和数据仓库Hive中的数据不一致。
发明内容
为克服上述现有技术存在的不足,本发明之目的在于提供一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备,以解决现有技术中由于数据库数据的唯一键发生变更导致去重不彻底,从而使得同步后数据库与数据仓库中的数据不一致的问题。
为达上述目的,本发明提供一种基于Binlog日志的数据同步方法,包括以下步骤:
获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表;
获取上一同步时间段的全量表,对所述全量表过滤出当前同步时间段内未发生过变更的数据;
对所述待合并增量表与所述全量表的过滤结果进行合并更新为当前同步时段的全量表,并根据更新后的全量表将数据导入数据仓库。
可选地,在本发明上述方法实施例中,所述获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表的步骤包括:
解析所述源数据库的日志文件,获取所述源数据库在当前同步时间段内的增量日志数据,获得增量日志数据表,于所述增量日志数据表中增加一用于存储变更操作前信息的字段;
对所述增量日志数据表中所述用于存储变更操作前信息的字段解析压平,得到包含所述增量日志数据表每行数据变更前后数据的增量表;
对所述增量表的数据进行去重处理,得到包含每个唯一键最后一次更新数据的待合并增量表。
可选地,在本发明上述方法实施例中,所述对所述增量日志数据表中所述用于存储变更操作前信息的字段解析压平的步骤包括:
对所述增量日志数据表中的每行数据,根据所述用于存储变更操作前信息的字段获取当前行变更前的数据作为所述增量表中当前行对应的变更前数据;以及
将所述增量日志数据表中的当前行数据作为所述增量表中当前行对应的变更后数据。
可选地,在本发明上述方法实施例中,在所述增量表中增加一用于标识当前行变更状态的标识字段,以标识所述增量表中每行数据的变更状态。
可选地,在本发明上述方法实施例中,所述对所述增量表的数据进行去重处理的步骤包括:
对所述增量表的数据进行分组排序,获取每个唯一键的最后一次更新数据形成所述待合并增量表。
可选地,在本发明上述方法实施例中,所述对所述增量表的数据进行分组排序的步骤包括:
对所述增量表中的每行数据,首先按照唯一键进行分组排序,然后按照变更时间字段以及所述标识字段进行排序。
可选地,在本发明上述方法实施例中,所述对所述待合并增量表与所述全量表的过滤结果进行合并更新为当前同步时段的全量表的步骤包括:
去除所述待合并增量表中标记为变更前的数据的增量数据,再将其与对所述全量表过滤出的当前同步时间段内未发生过变更的数据进行合并。
为达上述目的,本发明还提供一种基于Binlog日志的数据同步装置,包括:
待合并增量表生成单元,用于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表;
全量表过滤单元,用于获取上一同步时间段的全量表,对所述全量表过滤出设定同步时间段内未发生过变更的数据;
融合单元,用于将所述待合并增量表与所述全量表的过滤结果进行合并更新为当前同步时段的全量表,并根据更新后的全量表将数据导入数据仓库。
为达上述目的,本发明还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述基于Binlog日志的数据同步方法的步骤。
为达上述目的,本发明还提供一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述基于Binlog日志的数据同步方法的步骤。
与现有技术相比,本发明一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备,通过利用关系型数据库的Binlog日志独特的数据格式,解析出变化前后数据,使得无论唯一键是否发生变更,都可以获得变更前的数据,并根据变更前的数据对全量数据进行过滤,使得在增量表合并全量表数据的时候保证数据不重复、不丢失,实现数据库中的数据准确无误的同步到数据仓库Hive的目的。
下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。
附图说明
通过结合附图对本发明实施例进行更详细的描述,本发明的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与本发明实施例一起用于解释本发明,并不构成对本发明的限制。在附图中,相同的参考标号通常代表相同部件或步骤。
图1是本发明一示例性实施例提供的一种基于Binlog日志的数据同步方法的流程示意图;
图2为本发明示例性实施例提供的步骤101的流程示意图;
图3是本发明一示例性实施例提供的一种基于Binlog日志的数据同步装置的结构示意图。
图4是本发明一示例性实施例提供的电子设备的结构图。
具体实施方式
下面,将参考附图详细地描述根据本发明的示例实施例。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是本发明的全部实施例,应理解,本发明不受这里描述的示例实施例的限制。
应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本发明的范围。
本领域技术人员可以理解,本发明实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等,既不代表任何特定技术含义,也不表示它们之间的必然逻辑顺序。
还应理解,在本发明实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。
还应理解,对于本发明实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。
另外,本发明中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本发明中字符“/”,一般表示前后关联对象是一种“或”的关系。
还应理解,本发明对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,技术、方法和设备应当被视为说明书的一部分。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
本发明实施例可以应用于终端设备、计算机系统、服务器等电子设备,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与终端设备、计算机系统、服务器等电子设备一起使用的众所周知的终端设备、计算系统、环境和/或配置的例子包括但不限于:个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统﹑大型计算机系统和包括上述任何系统的分布式云计算技术环境,等等。
终端设备、计算机系统、服务器等电子设备可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。
示例性方法
图1是本发明一示例性实施例提供的一种基于Binlog日志的数据同步方法的流程示意图。本实施例可应用在电子设备上,如图1所示,本发明一种基于Binlog日志的数据同步方法,包括以下步骤:
步骤101,获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,对其解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表。
所述源数据库,指的是需要进行数据同步的数据库,具体可以是关系型数据库,例如MySQL等;数据仓库,是决策支持系统和联机分析应用数据源的结构化数据环境,在本实施例中,数据同步是指将源数据库中的数据同步至数据仓库中,其中,数据仓库例如可以是HIVE数据仓库。
具体地,如图2所示,步骤101进一步包括:
步骤101-a,解析所述源数据库的日志文件,获取所述源数据库在当前同步时间段内的增量日志数据,获得增量日志数据表,于所述增量日志数据表增加一用于存储变更操作前信息的字段。
增量日志数据的解析获取必然是基于全量数据的基础,相应地,本步骤中增量表的生成则是基于全量表已生成的基础,正如背景技术所提到的,本发明也应在第一次数据同步时拉取源数据库的全量数据生成全量表,后续可在每个同步时间段,基于上一个同步时间段的全量表利用本发明则可实现源数据库到数据仓库的数据同步。在本实施例中,全量表可例如下表3所示:
表3
当然,为简便说明起见,上述表3的全量表中仅示出作为唯一键的id字段以及name字段,但应可知,根据数据库与数据表的不同,其实际上可以有很多字段,本发明并不以此为限。
在本发明中,同步时间段,指的是所设定的进行数据同步处理的时间周期,例如可以是一小时,也可以是若干个小时,或者一天等,具体可以根据实际应用场景确定。当前同步时间段,指的是当前需要通过本发明同步处理的一个时间周期。
增量日志数据,指的是源数据库在当前同步时间段内新增的日志数据,所述增量日志数据可以通过解析源数据库的Binlog日志文件获得,Binlog日志文件可以用于在数据库进行数据更新时,记录数据更新的具体内容并将其以“事件”的形式保存,以MySQL关系型数据库为例,其Binlog(Binary log,二进制日志文件)日志文件记录了MySQL数据库中所有的插入、删除和修改的操作。具体地,读取Mysql数据库的Binlog日志,对Binlog日志进行解析,解析出有过变更的数据,该部分数据就是增量日志数据。
实时获取源数据库在当前同步时间段内的增量日志数据,将其放入专门用于存储文本形式日志的数据表中,该数据表即为增量日志数据表。
一般来说,源MySQL数据库的Binlog日志有ROW、STATEMENT和MIXED三种格式,在本发明具体实施例中,以Row格式的Binlog日志为例,即在源MySQL数据库的Binlog日志文件中,每条数据都是RowData格式,包含变更前before_columns(如update操作前或delete操作前)和变更后afterColumns(如update操作后或insert操作后)的数据。为了实现本发明,本发明于增量日志数据表中增加一用于存储变更(update)操作前信息的字段:before_columns,并于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据时,解析获取该字段对应的内容存入增量日志数据表,以便在唯一键发生变更时,可以获得变更操作前的数据。
在本实施例中,全量表与增量日志数据表结构的对照如下表4所示:
表4
其中增量日志数据表的before_columns字段中的{id:1,name:"zhangsan"}表示该行数据变更前id为1,name为zhangsan。
同样,增量日志数据表中除before_columns字段外,其他字段仅示出作为唯一键的id字段以及name字段,但应可知,根据数据表的不同,其实际上可以有很多字段,例如变更时间update_time等,本发明不以此为限。
步骤101-b,对所述增量日志数据表中所述用于存储变更操作前信息的字段解析压平,得到包含所述增量日志数据表每行数据变更前后数据的增量表,并在所述增量表中增加一用于标识当前行数据变更状态的标识字段来标识当前行数据的变更状态。
具体地,步骤101-b进一步包括:
对所述增量日志数据表中的每行数据,根据所述用于存储变更操作前信息的字段获取当前行变更前的数据作为所述增量表中当前行对应的变更前的数据;
获取所述增量日志数据表当前行数据作为所述增量表中当前行对应的变更后的数据。
其中,对于所述增量表中当前行对应的变更前的数据,通过所述增量表中增加的该标识字段标记其为变更前数据,对于所述增量表中当前行变更后的数据,通过所述标识字段标记其为当前行变更后数据。
具体地说,根据步骤101-a得到的增量日志数据表,对所述增量日志数据表中用于存储变更(update)操作前的数据的字段before_columns进行解析压平,则可获得所述增量日志数据表中每行数据变更前后数据的记录并形成一增量表,并于该增量表中增加一标识字段flag以标识所述增量表中每行数据的变更状态,其中,若增量表中当前行是根据before_columns字段得到,则当前行数据为变更前的数据,通过flag=1用来标记当前行数据为变更前数据,若当前行是根据Binlog日志文件的afterColumns值解析获得,则当前行数据为变更后的数据,通过flag=0来表示当前行数据为变更后的数据。在本发明具体实施例中,对表4中的增量日志数据表解析压平并增加标识所述增量表中每行数据变更状态的标识字段,更新如下表5:
表5
例如,根据对第一行数据的before_columns字段{id:1,name:"zhangsan"}进行解析压平,得到两条数据:id为1,name为zhangsan,flag=1,以及id为1,name为zhangsansan,flag=0,其中flag=1表示该行数据为变更前的数据,flag=0表示该行数据为变更后的数据。
步骤101-c,对所述增量表的数据进行去重处理。
由于增量表记录了所有变更前后的数据,在增量表中,每个唯一键都存在多条记录,因此需要进行去重处理。在本发明中,对所述增量表的数据按唯一键进行分组排序,对于每个唯一键,获取每个唯一键的最后一次更新数据形成待合并增量表。
具体地,以源数据库为MySQL数据库为例,利用row_number()函数对所述增量表中的数据进行分组排序:按照所述增量表中的唯一键进行分组,按照变更时间字段(update_time)及标识字段(flag)进行排序,获取每个唯一键最后一次更新的数据,即对于同一唯一键的记录,根据其变更时间段(update_time)按时间先后排序,同一变更时间段则按标识字段(flag)升序(例如0到1代表升序)排列,取出每个唯一键最后一次更新的数据(rn=1)形成待合并增量表。以对上述表5的增量表去重为例,获得如下表6结果的待合并增量表:
表6
步骤102,获取上一同步时间段的全量表,对该全量表数据进行过滤,过滤出当前同步时间段内未发生过变更的数据。
承前所述,本发明的实现至少基于一次全量数据的基础,即已形成上一同步时间段的全量表,在当前同步时间段内,该全量表中产生变化的数据已全部通过日志文件记录到待合并增量表中,但源数据库中当前同步时间段内未发生过变更的数据还在全量表中,因此还需过滤出全量表中当前同步时间段内未发生过变更的数据,以与待合并增量表进行合并。
在本发明具体实施例中,在步骤102中,当到达同步时间,对于全量表,可利用hive函数join,过滤出全量表中当前同步时间段内(例如一小时或一天)没有发生过变更的数据,形成未变更数据表,以表3中的全量表为例,对其过滤的结果得到如下表7的未变更数据表:
表7
步骤103,将所述待合并增量表与所述未变更数据表进行合并更新为当前同步时段的全量表,并根据更新后的当前同步时段的全量表将数据导入数据仓库。
具体地,将根据步骤101得到的当前同步时间段的待合并增量表以及步骤102得到的未变更数据表进行合并,由于flag=1表示该行数据为变更前的数据,因此需去除所述待合并增量表中flag=1的增量数据,然后与步骤102得到的未变更数据表进行合并,以表6与表7的合并为例,得到如下表8的合并结果,即更新后当前同步时段的全量表:
表8
此时可以看出,更新后的全量表中的数据已经全部是最新状态,然后根据更新后的全量表将数据导入数据仓库Hive。
示例性装置
图3为本发明一示例性实施例提供的一种基于Binlog日志的数据同步装置的结构示意图。如图3所示,本发明一种基于Binlog日志的数据同步装置包括:
待合并增量表生成单元301,用于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,对其解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表。
所述源数据库,指的是需要进行数据同步的数据库,具体可以是关系型数据库,例如MySQL等;数据仓库,是决策支持系统和联机分析应用数据源的结构化数据环境,在本实施例中,数据同步是指将源数据库中的数据全量同步至数据仓库中。其中,数据仓库例如可以是HIVE数据仓库。
具体地,待合并增量表生成单元301进一步包括:
日志解析单元,用于解析所述源数据库的日志文件,获取所述源数据库在当前同步时间段内的增量日志数据,获得增量日志数据表,于所述增量日志数据表增加一用于存储变更操作前信息的字段。
在本发明中,同步时间段,指的是所设定的进行数据同步处理的时间周期,例如可以是一小时,也可以是若干个小时等,具体可以根据实际应用场景确定。当前同步时间段,指的是当前需要通过本发明进行数据同步处理的一个时间周期。
增量日志数据,指的是源数据库在当前同步时间段内新增的日志数据,所述增量日志数据可以通过解析源数据库的Binlog日志文件获得,Binlog日志文件可以用于在数据库进行数据更新时,记录数据更新的具体内容并将其以“事件”的形式保存,以MySQL关系型数据库为例,其Binlog(Binary log,二进制日志文件)日志文件记录了MySQL数据库中所有的插入、删除和修改的操作,具体地,读取Mysql数据库的Binlog日志,对Binlog日志进行解析,解析出有过变更的数据,该部分数据就是增量日志数据。
具体地,日志解析单元实时获取源数据库在当前同步时间段内的增量日志数据,将其放入专门用于存储文本形式日志的数据表中,该数据表即为增量日志数据表。
一般来说,源MySQL数据库的Binlog日志有ROW、STATEMENT和MIXED三种格式,在本发明具体实施例中,以Row格式的Binlog日志为例,即在源MySQL数据库的Binlog日志中,每条数据都是RowData格式,包含变更前before_columns(如update操作前或delete操作前)和变更后afterColumns(如update操作后或insert操作后)的数据。为了实现本发明,本发明于增量日志数据表中增加一用于存储变更(update)操作前信息的字段:before_columns,并于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据时,获取该字段对应的内容存入增量日志数据表,以便在唯一键发生变更时,可以获得变更操作前的数据。
增量日志数据表解析压平单元,用于对所述增量日志数据表中所述用于存储变更操作前信息的字段解析压平,得到包含所述增量日志数据表每行数据变更前后数据的增量表,并在所述增量表中增加一用于标识当前行数据变更状态的标识字段来标识当前行数据的变更状态。
具体地说,根据日志解析单元得到的增量日志数据表,对所述增量日志数据表中用于存储变更(update)操作前信息的字段before_columns进行解析压平,则可获得所述增量日志数据表中每行数据变更前后数据的记录并形成一增量表,并于该增量表中增加一标识字段flag以标识所述增量表中每行数据的变更状态,其中若增量表中当前行是根据before_columns字段得到,则当前行数据为变更前的数据,通过flag=1用来标记当前行数据为变更前数据,若当前行是根据Binlog日志文件的afterColumns值解析获得,则当前行数据为变更后的数据,通过flag=0来表示当前行数据为变更后的数据。
增量表去重单元,用于对所述增量表的数据进行去重处理。
在本发明中,对所述增量表的数据按唯一键进行分组排序,对于每个唯一键,获取每个唯一键的最后一次更新数据形成待合并增量表。
具体地,以源数据库为MySQL数据库为例,增量表去重单元302利用row_number()函数对所述增量表中的数据进行分组排序:按照所述增量表中的唯一键进行分组,按照变更时间字段(update_time)及标识字段(flag)进行排序,获取每个唯一键最后一次更新的数据,即对于同一唯一键的记录,根据其变更时间段(update_time)按时间先后排序,同一变更时间段则按标识字段(flag)升序(例如0到1代表升序)排列,取出每个唯一键最后一次更新的数据(rn=1)形成待合并增量表。
全量表过滤单元302,用于获取上一同步时间段的全量表,对该全量表数据进行过滤,过滤出设定的同步时间段内未发生过变更的数据,得到未变更数据表。
承前所述,本发明的实现至少基于一次全量数据的基础,即已形成上一同步时间段的全量表,在当前同步时间段内,该全量表中产生变化的数据已全部通过日志文件记录到待合并增量表中,但源数据库中当前同步时间段内未发生过变更的数据还在全量表中,因此还需过滤出全量表中当前同步时间段内未发生过变更的数据,以与待合并增量表进行合并。
在本发明具体实施例中,在全量表过滤单元302中,当到达同步时间,对于全量表,可利用hive函数join,过滤出全量表中当前同步时间段内(例如一小时或一天)没有发生过变更的数据,根据过滤出的未发生过变更的数据得到未变更数据表。
融合单元303,用于将所述待合并增量表与所述未变更数据表进行合并更新为当前同步时段的全量表,并根据更新后的当前同步时段的全量表将数据导入数据仓库。
具体地,融合单元303将根据待合并增量表生成单元301得到的当前同步时间段的待合并增量表以及全量表过滤单元302得到的未变更数据表进行合并。在本发明实施例中,由于待合并增量表中flag=1表示该行数据为变更前的数据,因此需去除所述待合并增量表中flag=1的增量数据,然后与全量表过滤单元303得到的未变更数据表进行合并,得到更新后的当前同步时段的全量表,此时更新后的全量表中的数据已经全部是最新状态,然后,由融合单元304根据更新后的全量表将数据导入数据仓库Hive。
示例性电子设备
图4为本发明一示例性实施例提供的电子设备的结构。如图4所示,电子设备包括一个或多个处理器41和存储器42。
处理器41可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其他形式的处理单元,并且可以控制电子设备中的其他组件以执行期望的功能。
存储器42可以包括一个或多个计算机程序产品,所述计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。所述易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。所述非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。在所述计算机可读存储介质上可以存储一个或多个计算机程序指令,处理器61可以运行所述程序指令,以实现上文所述的本公开的各个实施例的软件程序的基于Binlog日志的数据同步方法以及/或者其他期望的功能。在一个示例中,电子设备还可以包括:输入装置43和输出装置44,这些组件通过总线系统和/或其他形式的连接机构(未示出)互连。
此外,该输入装置43还可以包括例如键盘、鼠标等等。
该输出装置44可以向外部输出各种信息。该输出设备44可以包括例如显示器、扬声器、打印机、以及通信网络及其所连接的远程输出设备等等。
当然,为了简化,图4中仅示出了该电子设备中与本公开有关的组件中的一些,省略了诸如总线、输入/输出接口等等的组件。除此之外,根据具体应用情况,电子设备还可以包括任何其他适当的组件。
示例性计算机程序产品和计算机可读存储介质
除了上述方法和设备以外,本公开的实施例还可以是计算机程序产品,其包括计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的基于Binlog日志的数据同步方法中的步骤。
所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、C++等,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
此外,本公开的实施例还可以是计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本公开各种实施例的基于Binlog日志的数据同步方法中的步骤。
所述计算机可读存储介质可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以包括但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
以上结合具体实施例描述了本公开的基本原理,但是,需要指出的是,在本公开中提及的优点、优势、效果等仅是示例而非限制,不能认为这些优点、优势、效果等是本公开的各个实施例必须具备的。另外,上述公开的具体细节仅是为了示例的作用和便于理解的作用,而非限制,上述细节并不限制本公开为必须采用上述具体的细节来实现。
本说明书中各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本公开中涉及的器件、装置、设备、系统的方框图仅作为例示性的例子并且不意图要求或暗示必须按照方框图示出的方式进行连接、布置、配置。如本领域技术人员将认识到的,可以按任意方式连接、布置、配置这些器件、装置、设备、系统。诸如“包括”、“包含”、“具有”等等的词语是开放性词汇,指“包括但不限于”,且可与其互换使用。这里所使用的词汇“或”和“和”指词汇“和/或”,且可与其互换使用,除非上下文明确指示不是如此。这里所使用的词汇“诸如”指词组“诸如但不限于”,且可与其互换使用。
可能以许多方式来实现本公开的方法和装置。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和装置。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
还需要指出的是,在本公开的装置、设备和方法中,各部件或各步骤是可以分解和/或重新组合的。这些分解和/或重新组合应视为本公开的等效方案。提供所公开的方面的以上描述以使本领域的任何技术人员能够做出或者使用本公开。对这些方面的各种修改对于本领域技术人员而言是非常显而易见的,并且在此定义的一般原理可以应用于其他方面而不脱离本公开的范围。因此,本公开不意图被限制到在此示出的方面,而是按照与在此公开的原理和新颖的特征一致的最宽范围。
为了例示和描述的目的已经给出了以上描述。此外,此描述不意图将本公开的实施例限制到在此公开的形式。尽管以上已经讨论了多个示例方面和实施例,但是本领域技术人员将认识到其某些变型、修改、改变、添加和子组合。
Claims (10)
1.一种基于Binlog日志的数据同步方法,包括以下步骤:
获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表;
获取上一同步时间段的全量表,对所述全量表过滤出当前同步时间段内未发生过变更的数据;
对所述待合并增量表与所述全量表的过滤结果进行合并更新为当前同步时段的全量表,并根据更新后的全量表将数据导入数据仓库。
2.根据权利要求1所述的一种基于Binlog日志的数据同步方法,其特征在于,所述获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表的步骤包括:
解析所述源数据库的日志文件,获取所述源数据库在当前同步时间段内的增量日志数据,获得增量日志数据表,于所述增量日志数据表中增加一用于存储变更操作前信息的字段;
对所述增量日志数据表中所述用于存储变更操作前信息的字段解析压平,得到包含所述增量日志数据表每行数据变更前后数据的增量表;
对所述增量表的数据进行去重处理,得到包含每个唯一键最后一次更新数据的待合并增量表。
3.根据权利要求2所述的一种基于Binlog日志的数据同步方法,其特征在于,所述对所述增量日志数据表中所述用于存储变更操作前信息的字段解析压平的步骤包括:
对所述增量日志数据表中的每行数据,根据所述用于存储变更操作前信息的字段获取当前行变更前的数据作为所述增量表中当前行对应的变更前数据;以及
将所述增量日志数据表中的当前行数据作为所述增量表中当前行对应的变更后数据。
4.根据权利要求3所述的一种基于Binlog日志的数据同步方法,其特征在于:在所述增量表中增加一用于标识当前行变更状态的标识字段,以标识所述增量表中每行数据的变更状态。
5.根据权利要求3所述的一种基于Binlog日志的数据同步方法,其特征在于,所述对所述增量表的数据进行去重处理的步骤包括:
对所述增量表的数据进行分组排序,获取每个唯一键的最后一次更新数据形成所述待合并增量表。
6.根据权利要求5所述的一种基于Binlog日志的数据同步方法,其特征在于,所述对所述增量表的数据进行分组排序的步骤包括:
对所述增量表中的每行数据,首先按照唯一键进行分组排序,然后按照变更时间字段以及所述标识字段进行排序。
7.根据权利要求6所述的一种基于Binlog日志的数据同步方法,其特征在于,所述对所述待合并增量表与所述全量表的过滤结果进行合并更新为当前同步时段的全量表的步骤包括:
去除所述待合并增量表中标记为变更前的数据的增量数据,再将其与对所述全量表过滤出的当前同步时间段内未发生过变更的数据进行合并。
8.一种基于Binlog日志的数据同步装置,包括:
待合并增量表生成单元,用于获取导入数据仓库中的源数据库在当前同步时间段内的增量日志数据表,解析处理得到包含所述增量日志数据表每行数据变更前后数据的增量表,并进行去重得到包含每个唯一键最后一次更新数据的待合并增量表;
全量表过滤单元,用于获取上一同步时间段的全量表,对所述全量表过滤出设定同步时间段内未发生过变更的数据;
融合单元,用于将所述待合并增量表与所述全量表的过滤结果进行合并更新为当前同步时段的全量表,并根据更新后的全量表将数据导入数据仓库。
9.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述基于Binlog日志的数据同步方法的步骤。
10.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任意一项所述基于Binlog日志的数据同步方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210210503.6A CN114625809A (zh) | 2022-03-04 | 2022-03-04 | 一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210210503.6A CN114625809A (zh) | 2022-03-04 | 2022-03-04 | 一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114625809A true CN114625809A (zh) | 2022-06-14 |
Family
ID=81899951
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210210503.6A Pending CN114625809A (zh) | 2022-03-04 | 2022-03-04 | 一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114625809A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115840786A (zh) * | 2023-02-20 | 2023-03-24 | 北京数元灵科技有限公司 | 一种数据湖数据同步方法及装置 |
CN115905300A (zh) * | 2023-03-14 | 2023-04-04 | 云账户技术(天津)有限公司 | 一种TiDB数据库的存量和增量数据融合捕获的方法及装置 |
CN116719971A (zh) * | 2023-05-08 | 2023-09-08 | 中银金融科技有限公司 | 拉链表数据加载方法、装置和电子设备 |
-
2022
- 2022-03-04 CN CN202210210503.6A patent/CN114625809A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115840786A (zh) * | 2023-02-20 | 2023-03-24 | 北京数元灵科技有限公司 | 一种数据湖数据同步方法及装置 |
CN115905300A (zh) * | 2023-03-14 | 2023-04-04 | 云账户技术(天津)有限公司 | 一种TiDB数据库的存量和增量数据融合捕获的方法及装置 |
CN116719971A (zh) * | 2023-05-08 | 2023-09-08 | 中银金融科技有限公司 | 拉链表数据加载方法、装置和电子设备 |
CN116719971B (zh) * | 2023-05-08 | 2024-04-09 | 中银金融科技有限公司 | 拉链表数据加载方法、装置和电子设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114625809A (zh) | 一种基于Binlog日志的数据同步方法、装置以及存储介质和电子设备 | |
CN106682097B (zh) | 一种处理日志数据的方法和装置 | |
US8577833B2 (en) | Automated data analysis and transformation | |
US9626368B2 (en) | Document merge based on knowledge of document schema | |
WO2017074174A1 (en) | A system and method for processing big data using electronic document and electronic file-based system that operates on rdbms | |
CN103733195A (zh) | 管理用于基于范围的搜索的数据的存储 | |
US10387780B2 (en) | Context accumulation based on properties of entity features | |
WO2006102512A2 (en) | Change control management of xml documents | |
CN113535856B (zh) | 数据同步方法及系统 | |
WO2014025811A2 (en) | Method and apparatus of implementing navigation of product properties | |
CN113297238B (zh) | 基于历史变更记录进行信息挖掘的方法和装置 | |
US8775392B1 (en) | Revision control and configuration management | |
CN109388659B (zh) | 数据存储方法、装置和计算机可读存储介质 | |
CN113326247A (zh) | 云端数据的迁移方法、装置及电子设备 | |
CN108733543B (zh) | 一种日志分析的方法、装置、电子设备和可读存储介质 | |
CA2734207C (en) | Electronic file comparator | |
CN110704432A (zh) | 数据索引的建立方法和装置、可读存储介质、电子设备 | |
CN113360946B (zh) | 新闻脱敏处理方法、装置、电子设备及可读存储介质 | |
CN108108478B (zh) | 数据格式转换方法、系统及电子设备 | |
US20110078218A1 (en) | Event history storage device, event history tracking device, event history storage method, event history storage program, and data structure | |
US20180060404A1 (en) | Schema abstraction in data ecosystems | |
Chacko et al. | Capturing provenance for big data analytics done using SQL interface | |
CN113220530B (zh) | 数据质量监控方法及平台 | |
CN114925125A (zh) | 数据处理方法、装置和系统、电子设备及存储介质 | |
CN113760600A (zh) | 一种数据库备份方法、数据库还原方法和相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |