本发明属于互联网开发技术领域,具体的说提供了一种周期性自动全量提取数据库数据的方法。
背景技术:
在国内,许多中小企业发展的局限性在于发展初期资金不足,IT基础薄弱甚至忽略IT,仅随着市场发展才逐渐引入信息化管理体系;其次,由于信息系统分散搭建,各部门之间互相孤立,信息不能有效沟通,使得企业发展大受掣肘;即便是有些企业意识到了整合信息系统的重要性,但是碍于巨大的投资压力,所以并不敢轻易尝试。最终,许多企业因此走入了“信息孤岛”的困境,信息管理混乱,影响企业进一步发展。
随着大数据时代来临,信息管理对中小企业生存的重要作用逐渐凸显出来,企业往往希望将各个孤立系统的数据整合到一个集中管理系统中。这就涉及到从孤立系统全量抽取数据到集中管理系统的问题。
对这些孤立系统的数据提取,要求不影响现有系统的运行,采用传统的ETL(Extract-Transform-Load)工具,一般要求已有系统的数据表中有数值递增的索引字段,根据递增索引字段进行增量抽取,这一点往往无法保证,因此ETL工具一般只能一次性抽取全量数据,以后新增数据无法处理了。
本发明提供了一种对传统关系型数据进行周期性自动全量数据提取的方法,在不对现有系统进行改造的前提下,能够将现有系统中的数据周期性自动全量提取到集中管理系统中。
技术实现要素:
:
针对现有技术中存在的技术问题,本发明的目的在于提供一种周期性自动全量提取数据库数据的方法。
本发明针对关系型数据库,对需要抽取的数据表字段自定义了数据库提取主键,使用提取主键周期性的从数据库中提取数据,并实时记录下已提取记录标识。在下个运行周期启动时,从提取记录标识开始继续提取,从而达到全量提取数据的目的。
本发明的技术方案为:
一种周期性自动全量提取数据库数据的方法,其步骤为:
1)从关系型数据库系统的数据表中选取若干字段,将选取的每一字段的字段值左补若干位;选取的若干字段为能够唯一标识一条记录的若干字段;
2)将选取的字段组合作为该关系型数据库系统的提取主键,将补齐后的值按字符串拼接在一起作为提取主键的值;
3)周期性从该关系型数据库系统的数据表中进行数据提取:每次提取n条记录并记录本次提取的最后一条记录的提取主键值,下次提取时通过比对提取主键值获取后面n条记录,直至完成数据表中记录的全量提取。
进一步的,左补的若干位均为0;左补若干位后的每一字段的长度均相同。
进一步的,左补若干位后的每一字段的长度均为20。
进一步的,选取的字段包括姓名、性别和生日字段。
进一步的,步骤3)中,每次提取记录时,先根据提取主键的字段对记录进行排序,然后提取n条记录。
进一步的,对该关系型数据库系统中单一数据表进行全量提取。
进一步的,将该关系型数据库系统中多个数据表通过sql语句建立动态视图,然后对该多个数据表进行全量提取。
进一步的,对提取出来的记录进行定制化的转换后存储到一数据管理系统。
与现有技术相比,本发明的积极效果为:
本发明不要求已有系统的数据表定义数值自增的主键,也不需要对已有系统进行改造,就能够周期性全量提取数据。
附图说明
图1是本发明实施例一提供的数据库数据提取和标准化的流程图。
具体实现方式
下面结合附图和实施例对本发明做进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的数据提取方法的流程图。本实施例可适用于提取各种关系型数据库系统中的数据,具体包括如下步骤:
步骤101:定义数据库提取主键
因为现有系统的数据库表往往没有数值自增字段,需要自定义提取主键。
自定义提取主键从数据表中任意选择几个可以唯一标识一条记录的字段。将每个字段的值左补‘0’,使字段总长度至N位(N缺省为20位,举例来说,字段值为ABC,左补17个‘0’,使字段值为‘00000000000000000ABC’),然后将补齐后的字段值按字符串拼接在一起作为提取主键的值。
举例来说,如果有下面员工信息表(employee)和数据,如表1:
表1为员工信息表
分析这个表的数据,通过姓名,性别和生日可以唯一确定一条记录,那么用这3个字段来构造提取主键,每条记录的提取主键的值分别为:
000000000000000000张三0000000000000000000男00000000000019850810
000000000000000000王飞0000000000000000000男00000000000019890110
000000000000000000王飞0000000000000000000女00000000000019900704
000000000000000000王飞0000000000000000000男00000000000019850321
步骤102:提取数据:
提取数据按批次提取,可以针对单一数据表提取,也可以将多个表的数据通过sql语句建立动态视图进行提取。
每次提取,先根据提取主键的字段对记录进行排序,然后提取n条,完成n条记录的提取后,记录最后一条记录的提取主键值,下次提取通过比对提取主键的值,获取后面n条记录,周期往复完成表数据的全量提取。
举例来说,提取表1中的数据,将n设置为3,第一次提取前3条记录,并记录最后提取的的记录主键值为“000000000000000000王飞0000000000000000000女00000000000019900704”,下一次提取时,计算表中记录的主键值,将主键值大于“000000000000000000王飞0000000000000000000女00000000000019900704”的后n条记录提取出来。
通过上面方法提取出来的记录保存成集中管理系统要求的数据格式(见步骤103),并将最后一条记录的提取主键值记录下来(见步骤104)。
步骤103:转换提取数据为集中管理系统数据格式。
将第102步查询到的数据转换成集中管理系统要求的格式,在本发明的例子中,假设集中管理系统要求性别使用字典码(男用0表示,女用1表示),生日必须是YYYY-MM-DD格式(这里仅仅是举例,实际情况比较复杂,可能要关联补充其他信息,比如需要从B表中关联出工作岗位和工资标准,那么需要通过SQL关联查询语句构造出动态视图,然后针对动态视图进行提取,而不是简单的格式转换),那么可以针对提取出来的记录进行定制化的转换,转换后的数据供集中管理系统使用。如下是转换后的数据:
张三0 1985-08-10西城区xx小区A楼1708室信息化部
王飞0 1989-01-10海淀区xx小区B楼1001室运维部
王飞1 1990-07-04东城区xx小区C楼2001室财务部
步骤104:记录提取数据位置。
将第2步提取出来的最后一条记录的提取主键值记录下来,比如:
EMPLOYEE_datasource=000000000000000000王飞0000000000000000000女00000000000019900704
步骤105:周期提取
设置一个提取周期,比如每10分钟启动一次提取,下次提取时比对上次提取到的最后一条记录的主键值,获取后面的n条记录,从而实现周期性抽取数据。
代码示例:
通过配置文件配置抽取策略:
属性说明如表2所示:
表2为属性说明表