ETL任务数据源切换方法、系统、计算机设备和存储介质与流程

文档序号:15761246发布日期:2018-10-26 19:19阅读:409来源:国知局
ETL任务数据源切换方法、系统、计算机设备和存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种etl任务数据源切换方法、系统、计算机设备和存储介质。



背景技术:

利用关系型数据库来存储和管理业务数据,并建立相应的应用系统来支持日常的业务运作。这种应用以支持业务处理为主要目的,被称为联机事务处理(onlinetransactionprocessing,oltp)应用,它所存储的数据被称为操作数据或者业务数据。bi(businessintelligence)是一种运用了数据仓库,在线分析和数据挖掘等技术来处理和分析数据的崭新技术,目的是为企业决策者提供决策支持。cow(写时复制copy-on-write),是存储快照的一种方式,更新源数据卷中的原始数据时,将原始数据copy到快照卷中。当我们需要恢复快照时,只需要按照快照指针表逐一进行寻址就能够完成了,而且cow在使用上非常的灵活,可以随时为任意源数据卷建立快照。

etl(extract-transform-load),用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程,etl常用在数据仓库。etl任务主要是针对olap型的bi项目。一般是从业务型的oltp型数据库中抽取数据。主要特点是数据量大,处理时间长。一般处理的时间段大都是集中在oltp数据库压力较小的凌晨,但存在如下问题:

1、部分抽数任务由于依赖任务多或者报错等原因,运行时间排到了白天上班时间。而在上班时间对oltp型的数据库进行大数据量长时间的抽取,对数据库io(数据库文件的读写,即检索数据和插入数据)和性能造成了很大影响。

2、一般采取人工从备份cow库取数方式解决上述问题,但人工切换方式易产生操作失误,且增加了不必要的人力。



技术实现要素:

基于此,有必要针对现行etl任务数据源切换方法,大数据量长时间的抽取,对数据库文件的读取和性能造成了很大影响,人工切换方式易产生操作失误的弊端,提供一种etl任务数据源切换方法、系统、计算机设备和存储介质。

一种etl任务数据源切换方法,所述切换方法包括:在etl任务运行时所在的服务器配置库中预置映射表和数据源配置表,所述映射表包括生产库和cow库,将所述映射表中的生产库连接字符串和cow库连接字符串一一对应,所述数据源配置表中的连接数据包括连接字符串;调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串;在api服务器的数据库中设置数据库表,所述数据库表包含cow库的起库信息和同步数据信息,根据所述数据库表中记录的数据检测数据库是否起库,以及是否将数据同步到凌晨时间0点,所述起库是数据库启动实例;在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源。

在其中一个实施例中,所述数据源配置表中的连接数据还包括数据源名称、安全标识符、数据库用户名及密码。

在其中一个实施例中,所述调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串具体包括:

通过程序在服务器上设置crontab表达式,所述表达式包括时间点和所述时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的shell脚本;

所述shell脚本封装有调用api服务器的curl命令,所述curl命令通过命令行方式发起http请求,进而调用api服务器;

通过api服务器检测和修改配置库中的连接字符串。

在其中一个实施例中,所述在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源具体包括:

在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,etl任务运行时所在的服务器读取数据源配置表中的连接数据,通过python程序中的oracle包连接服务器配置库,执行update语句,修改数据源配置表中的连接字符串,改变etl任务运行时所连接的数据库,自动切换数据源。

在其中一个实施例中,所述自动切换到需要操作的数据源之后还包括:

在api服务器的数据库中设置工作日志,所述工作日志用于监控记录数据源是否切换成功,若未成功切换则发出警报通知用户。

在其中一个实施例中,所述所述警报包括电话告警和电子邮件通知。

一种etl任务数据源切换系统,所述etl任务数据源切换系统包括:

对应单元,用于在etl任务运行时所在的服务器配置库中预置映射表和数据源配置表,所述映射表包括生产库和cow库,将所述映射表中的生产库连接字符串和cow库连接字符串一一对应,所述数据源配置表中的连接数据包括连接字符串;

调用单元,用于调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串;

起库同步单元,用于在api服务器的数据库中设置数据库表,所述数据库表包含cow库的起库信息和同步数据信息,根据所述数据库表中记录的数据检测数据库是否起库,以及是否将数据同步到凌晨时间0点,所述起库是数据库启动实例;

切换单元,用于在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源。

在其中一个实施例中,所述调用单元包括:

设置模块,用于通过程序在服务器上设置crontab表达式,所述表达式包括时间点和所述时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的shell脚本;

调用模块,用于所述shell脚本封装有调用api服务器的curl命令,所述curl命令通过命令行方式发起http请求,进而调用api服务器;

检测模块,用于通过api服务器检测和修改配置库中的连接字符串。

一种计算机设备,包括存储器和处理器,所述存储器中存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,使得所述处理器执行上述切换方法的步骤。

一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行上述切换方法的步骤。

上述etl任务数据源切换方法、系统、计算机设备和存储介质,通过在etl任务运行时所在的服务器配置库中预置映射表和数据源配置表,所述映射表包括生产库和cow库,将所述映射表中的生产库连接字符串和cow库连接字符串一一对应,所述数据源配置表中的连接数据包括连接字符串,调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串,在api服务器的数据库中设置数据库表,所述数据库表包含cow库的起库信息和同步数据信息,根据所述数据库表中记录的数据检测数据库是否起库,以及是否将数据同步到凌晨时间0点,所述起库是数据库启动实例,在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源,降低了人工操作的风险,提高了切换效率,减少了误操作。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。

图1为一个实施例中etl任务数据源切换方法的流程图;

图2为一个实施例中检测和修改配置库中的连接字符串的流程图;

图3为一个实施例中etl任务数据源切换系统的结构框图;

图4为一个实施例中调用单元的结构框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本发明的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。

作为一个较好的实施例,如图1所示,一种etl任务数据源切换方法,该etl任务数据源切换方法包括以下步骤:

步骤s101,在etl任务运行时所在的服务器配置库中预置映射表和数据源配置表,映射表包括生产库和cow库,将映射表中的生产库连接字符串和cow库连接字符串一一对应,数据源配置表中的连接数据包括连接字符串;

etl任务主要是针对olap型的bi项目。etl(extract-transform-load),用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程,etl常用在数据仓库。etl是构建数据仓库的重要一环,用户从数据源抽取出所需的数据,经过数据清洗,最终按照预先定义好的数据仓库模型,将数据加载到数据仓库中去。一般是从业务型的oltp型数据库中抽取数据。利用关系型数据库来存储和管理业务数据,并建立相应的应用系统来支持日常的业务运作。这种应用以支持业务处理为主要目的,被称为联机事务处理(onlinetransactionprocessing,oltp)应用,它所存储的数据被称为操作数据或者业务数据。bi(businessintelligence)是一种运用了数据仓库,在线分析和数据挖掘等技术来处理和分析数据的崭新技术,目的是为企业决策者提供决策支持。cow(写时复制copy-on-write),是存储快照的一种方式,更新源数据卷中的原始数据时,将原始数据copy到快照卷中。当我们需要恢复快照时,只需要按照快照指针表逐一进行寻址就能够完成了,而且cow在使用上非常的灵活,可以随时为任意源数据卷建立快照。

配置生产库与备份cow库间的对应关系。在一选定的linux客户端,在其服务器的配置库中,事先设置一映射表,在所述映射表上录入生产库连接字符串和cow库连接字符串,并使之一一对应,从而配置生产库与备份cow库之间的对应关系,如下表1所示:

表1

其中,sid也就是安全标识符(securityidentifiers),是标识用户、组和计算机帐户的唯一的号码。sid为数据源的sid,是一个数据库的唯一标识符,即在建立一个数据库时系统自动赋予的一个初始id。jdbc_str_cow和jdbc_str_prd分别表示cow库的连接字符串和生产库的连接字符串。

步骤s102,调用shell脚本,shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串;

调用shell脚本,调用api服务器。api是applicationprogramminginterface(应用编程接口),使用的api接口会把参数消息传到给api服务器。api是applicationprogramminginterface(应用编程接口),使用的api接口会把参数消息传到给api服务器。shell脚本与windows/dos下的批处理相似,利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与指令写在里面,然后用正规表示法,管道命令以及数据流重导向等功能。

在linux服务器上,通过程序设置crontab表达式,该crontab表达式包括两部分,一部分为时间点,一部分为所述时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的脚本shell脚本,所述shell脚本中封装有一调用api的curl命令,所述curl命令是操作系统linux上的一个工具,可以通过命令行方式发起http请求,进而调用api服务器。调用curl命令来调用api后,经过api服务器来检测、修改配置库中的连接字符串。

步骤s103,在api服务器的数据库中设置数据库表,数据库表包含cow库的起库信息和同步数据信息,根据数据库表中记录的数据检测数据库是否起库,以及是否将数据同步到凌晨时间0点,起库是数据库启动实例;

检测cow库是否起库,是否已同步到凌晨时间0点:在api服务器的数据库中,设置有一数据库表,数据管理员将cow库的起库信息以及同步数据信息记录于该数据库表中,根据数据库表中记录的数据来检测数据库是否已经起库,是否已经将数据同步到凌晨时间0点,在api服务器中确认起库信息及同步信息以进行数据源切换。

步骤s104,在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源。

修改连接字符串,实现数据源自动切换。在linux服务器的配置库上,设置有一数据源配置表,etl任务在运行时,etl任务运行时所在的服务器会读取数据源配置表中的连接数据,用于连接数据库。所述数据源配置表中的连接数据包括数据源名称,安全标识符(sid),数据库用户名密码,以及连接字符串。

经上述步骤s103,在api服务器中检测通过起库信息以及同步信息后,通过python程序,利用python程序中的cx_oracle包连接配置库,执行update语句,来修改数据源配置表中的连接字符串,从而改变etl任务运行时所连接的数据库,进行数据源的自动切换。

所述数据源配置表如下表所示:

如上表所示,数据源配置表中配置有数据源名称,sid,数据库用户名密码,以及连接字符串(jdbc_str)等数据。cow库是生产库的备份库,具有相同的用户密码,区别在于连接字符串不同,故只需修改其中的连接字符串字段即可实现数据源的自动切换。

在一个实施例中,数据源配置表中的连接数据还包括数据源名称、安全标识符、数据库用户名及密码。

在linux服务器的配置库上,设置有一数据源配置表,etl任务在运行时,etl任务运行时所在的服务器会读取数据源配置表中的连接数据,用于连接数据库。所述数据源配置表中的连接数据包括数据源名称,安全标识符(sid),数据库用户名密码,以及连接字符串。

如图2所示,在一个实施例中,调用shell脚本,shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串具体包括:

步骤s201,通过程序在服务器上设置crontab表达式,表达式包括时间点和时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的shell脚本;

在linux服务器上,通过程序设置crontab表达式,该crontab表达式包括两部分,一部分为时间点,一部分为所述时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的脚本shell脚本,所述shell脚本中封装有一调用api的curl命令,所述curl命令是操作系统linux上的一个工具,可以通过命令行方式发起http请求,进而调用api服务器。调用curl命令来调用api后,经过api服务器来检测、修改配置库中的连接字符串。

步骤s202,shell脚本封装有调用api服务器的curl命令,curl命令通过命令行方式发起http请求,进而调用api服务器;

shell脚本中封装有一调用api的curl命令,所述curl命令是操作系统linux上的一个工具,可以通过命令行方式发起http请求,进而调用api服务器。

步骤s203,通过api服务器检测和修改配置库中的连接字符串。

调用curl命令来调用api后,经过api服务器来检测、修改配置库中的连接字符串。

在一个实施例中,在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源具体包括:

在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,etl任务运行时所在的服务器读取数据源配置表中的连接数据,通过python程序中的oracle包连接服务器配置库,执行update语句,修改数据源配置表中的连接字符串,改变etl任务运行时所连接的数据库,自动切换数据源。

在一个实施例中,自动切换到需要操作的数据源之后还包括:

在api服务器的数据库中设置工作日志,工作日志用于监控记录数据源是否切换成功,若未成功切换则发出警报通知用户。

在一个实施例中,警报包括电话告警和电子邮件通知。

置工作日志,并进行外部监控:在api服务器的数据库中,还设置有一工作日志,该工作日志用于记录上述步骤4)中的数据源是否切换成功。

在服务器外端,设置一监控平台,所述监控平台配置有需要监控的api服务器的数据库、监控执行的sql语句、监控联系人、邮件组以及监控执行的时间和频度。该监控平台按照监控执行的频率连接数据库中的数据,执行sql语句,所述sql语句用于检测数据源自动切换的工作日志数据,确定数据源是否已自动切换。设置监控的执行时间点稍晚于调用api服务器的时间点。

经监控执行的sql语句检测数据源自动切换的工作日志数据后,根据数据信息来判断数据源是否切换成功。若数据源未成功切换,则通过监控平台电话告警及发送邮件给相应的运维人员和数据管理员,数据管理员查看api服务器的数据库中起库信息和同步信息,确定原因并进行处理,处理完成后再次调用api服务器进行数据源的自动切换。

如图3所示,在一个实施例中,提供一种etl任务数据源切换系统,该切换系统包括:

对应单元,用于在etl任务运行时所在的服务器配置库中预置映射表和数据源配置表,所述映射表包括生产库和cow库,将所述映射表中的生产库连接字符串和cow库连接字符串一一对应,所述数据源配置表中的连接数据包括连接字符串;

调用单元,用于调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串;

起库同步单元,用于在api服务器的数据库中设置数据库表,所述数据库表包含cow库的起库信息和同步数据信息,根据所述数据库表中记录的数据检测数据库是否起库,以及是否将数据同步到凌晨时间0点,所述起库是数据库启动实例;

切换单元,用于在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源。

如图4所示,在一个实施例中,所述调用单元包括:

设置模块,用于通过程序在服务器上设置crontab表达式,所述表达式包括时间点和所述时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的shell脚本;

调用模块,用于所述shell脚本封装有调用api服务器的curl命令,所述curl命令通过命令行方式发起http请求,进而调用api服务器;

检测模块,用于通过api服务器检测和修改配置库中的连接字符串。

在一个实施例中,提出了一种计算机设备,所述计算机设备包括存储器和处理器,存储器中存储有计算机可读指令,计算机可读指令被处理器执行时,使得处理器执行所述计算机程序时实现以下步骤:

在etl任务运行时所在的服务器配置库中预置映射表和数据源配置表,所述映射表包括生产库和cow库,将所述映射表中的生产库连接字符串和cow库连接字符串一一对应,所述数据源配置表中的连接数据包括连接字符串;

调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串;

在api服务器的数据库中设置数据库表,所述数据库表包含cow库的起库信息和同步数据信息,根据所述数据库表中记录的数据检测数据库是否起库,以及是否将数据同步到凌晨时间0点,所述起库是数据库启动实例;

在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源。

在其中一个实施例中,所述数据源配置表中的连接数据还包括数据源名称、安全标识符、数据库用户名及密码。

在其中一个实施例中,所述调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串具体包括:

通过程序在服务器上设置crontab表达式,所述表达式包括时间点和所述时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的shell脚本;

所述shell脚本封装有调用api服务器的curl命令,所述curl命令通过命令行方式发起http请求,进而调用api服务器;

通过api服务器检测和修改配置库中的连接字符串。

在其中一个实施例中,所述在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源具体包括:

在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,etl任务运行时所在的服务器读取数据源配置表中的连接数据,通过python程序中的oracle包连接服务器配置库,执行update语句,修改数据源配置表中的连接字符串,改变etl任务运行时所连接的数据库,自动切换数据源。

在其中一个实施例中,所述自动切换到需要操作的数据源之后还包括:

在api服务器的数据库中设置工作日志,所述工作日志用于监控记录数据源是否切换成功,若未成功切换则发出警报通知用户。

在其中一个实施例中,所述所述警报包括电话告警和电子邮件通知。

在一个实施例中,提出了一种存储有计算机可读指令的存储介质,该计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行以下步骤:

在etl任务运行时所在的服务器配置库中预置映射表和数据源配置表,所述映射表包括生产库和cow库,将所述映射表中的生产库连接字符串和cow库连接字符串一一对应,所述数据源配置表中的连接数据包括连接字符串;

调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串;

在api服务器的数据库中设置数据库表,所述数据库表包含cow库的起库信息和同步数据信息,根据所述数据库表中记录的数据检测数据库是否起库,以及是否将数据同步到凌晨时间0点,所述起库是数据库启动实例;

在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源。

在其中一个实施例中,所述数据源配置表中的连接数据还包括数据源名称、安全标识符、数据库用户名及密码。

在其中一个实施例中,所述调用shell脚本,所述shell脚本封装有调用api服务器的curl命令,利用curl命名调用api服务器,通过api服务器检测和修改配置库中的连接字符串具体包括:

通过程序在服务器上设置crontab表达式,所述表达式包括时间点和所述时间点需要执行的脚本名称,通过设置crontab表达式的脚本名称来调用需要定时执行的shell脚本;

所述shell脚本封装有调用api服务器的curl命令,所述curl命令通过命令行方式发起http请求,进而调用api服务器;

通过api服务器检测和修改配置库中的连接字符串。

在其中一个实施例中,所述在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,修改数据源配置表中的连接字符串,自动切换到需要操作的数据源具体包括:

在api服务器确认起库信息和同步信息后,etl任务运行时所在的服务器读取数据源配置表中的连接数据,etl任务运行时所在的服务器读取数据源配置表中的连接数据,通过python程序中的oracle包连接服务器配置库,执行update语句,修改数据源配置表中的连接字符串,改变etl任务运行时所连接的数据库,自动切换数据源。

在其中一个实施例中,所述自动切换到需要操作的数据源之后还包括:

在api服务器的数据库中设置工作日志,所述工作日志用于监控记录数据源是否切换成功,若未成功切换则发出警报通知用户。

在其中一个实施例中,所述所述警报包括电话告警和电子邮件通知。

本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(rom,readonlymemory)、随机存取存储器(ram,randomaccessmemory)、磁盘或光盘等。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明一些示例性实施例,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1