一种数据库查询及数据导出方法、系统、介质及设备与流程

专利2022-06-29  87


本发明涉及数据处理技术领域,尤其涉及一种数据库查询及数据导出方法、系统、介质及设备。



背景技术:

现有技术中,数据库查询及数据导出工具只能针对特定的数据库,例如针对oracle的导出工具只能实现对oracle的数据查询及数据导出,其无法实现mysql和hive的数据查询及数据导出。然而实际使用过程中,数据分析师经常需要查询不同类型的数据库,如果每查询一种数据库更换一种查询工具,操作繁琐,查询效率低下。



技术实现要素:

本发明所要解决的技术问题是针对现有技术的不足,提供一种数据库查询及数据导出方法、系统、介质及设备。

为解决上述技术问题,本发明实施例提供一种数据库查询及数据导出方法,包括:生成符合待查询数据库sql特性的动态sql脚本;其中,所述待查询数据库sql特性为预先获取并封装待查询数据库sdk获得的;将所述动态sql脚本提交到待查询数据库,接收所述待查询数据库反馈的执行所述动态sql脚本获得的sql结果集;将所述sql结果集写入预设导出路径下的excel文件。

为解决上述技术问题,本发明实施例提供一种数据库查询及数据导出系统,包括:脚本生成模块,用于生成符合待查询数据库sql特性的动态sql脚本;其中,所述待查询数据库sql特性为预先获取并封装待查询数据库sdk获得的;数据查询模块,用于将所述动态sql脚本提交到待查询数据库,接收所述待查询数据库反馈的执行所述动态sql脚本获得的sql结果集;数据导出模块,用于将所述sql结果集写入预设导出路径下的excel文件。

为解决上述技术问题,本发明实施例提供一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使所述计算机执行根据上述技术方案所述的数据库查询及数据导出方法。

为解决上述技术问题,本发明实施例提供一种计算机设备,包括存储器、处理器及存储在所述存储器上的并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述技术方案所述的数据库查询及数据导出方法。

本发明的有益效果是:预先封装不同数据库的sql特性,编写满足不同数据库sql特性的动态sql脚本,在数据库查询前即完成对sql的检查,生成符合要求的sql脚本,可实现对多种不同类型数据库的数据查询,并进行数据快速导出。无需每查询一种数据库更换一种查询工具,降低了数据分析师对多的学习成本,操作简便,查询效率高。

本发明附加的方面及其的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。

附图说明

图1为本发明实施例提供的数据库查询及数据导出方法流程图;

图2为本发明实施例提供的动态sql脚本生成方法流程图;

图3为本发明实施例提供的数据导出方法流程图;

图4为本发明实施例提供的数据库查询及数据导出系统框图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

本发明实施例基于python开发,目前支持windows与linux。预先导入与python配合的外置程序包,即导入待查询数据库的软件开发工具包sdk(softwaredevelopmentkit)。基于python的应用会提供应用所需的外置程序包的名称、版本的request文件,进而封装外置程序的api。

图1为本发明实施例提供的数据库查询及数据导出方法流程图。如图1所示,该方法包括:

110、生成符合待查询数据库sql特性的动态sql脚本;其中,所述待查询数据库sql特性为预先获取并封装待查询数据库sdk获得的;

120、将所述动态sql脚本提交到待查询数据库,接收所述待查询数据库反馈的执行所述动态sql脚本获得的sql结果集;

130、将所述sql结果集写入预设导出路径下的excel文件。

具体地,可以根据接收的导出目录参数确定预设导出路径,如果未接收到导出目录参数,则默认当前活动目录为预设导出路径。

上述实施例中,预先封装不同数据库的sql特性,编写满足不同数据库sql特性的动态sql脚本,在数据库查询前即完成对sql的检查,生成符合要求的sql脚本,可实现对多种不同类型数据库的数据查询,并进行数据快速导出。无需每查询一种数据库更换一种查询工具,降低了数据分析师对多的学习成本,操作简便,查询效率高。该实施例中,可实现hive、oracle和mysql数据库的单表与多表查询以及查询结果的excel文件导出。

可选地,在一个实施例中,如图2所示,所述生成符合待查询数据库sql特性的动态sql脚本,包括:

111、生成初始sql脚本,获取待查询数据库的sql特性,根据所述sol特性对所述初始sql脚本进行语法检查;

具体地,sql特性为待查询数据库特有的语法及函数。例如oraclenvl函数,row_number()等在mysql不适用;又例如oracledecode函数与hive的decode的函数功能又不一样。

例如初始sql脚本为:selectcard_noas卡号fromods.bss_hk_d_rs_card_info_presellwheredeal_time='20191229'limit10。

进行语法检查时,会对表ods.bss_hk_d_rs_card_info_presell是否存在字段card_no,登录用户是否有ods数据库的查询权限、查询的目标数据库是否有相关含函数等异常检测点进行检查,例如上述语句oracle没有limit,则会报出异常,查询oracle时,将limit10修改为whererownum<11即可;而mysql、hive则不会报错。

112、根据检查结果对所述初始sql脚本进行修改直至符合所述待查询数据库的sql特性,获取动态sql脚本。

上述实施例中,通过sql语法检查提升错误异常返回的效率,例如hive的sql执行是需要启动mapreduce,无论多么简单的语句都启动mapreduce,但启动mapreduce是比较耗时的操作。该实施例中,将sql脚本提交给待查询数据库前进行语法检查,不需要启动数据库连接就可以实现事前的检查,提高查询效率。

可选地,所述将所述动态sql脚本提交到待查询数据库之前,还包括:获取导出路径参数,根据所述导出路径参数检验对应路径下的excel文件否具备写入权限,如无写入权限则更改导出路径。

具体地,导出路径参数可以为传入的导出目录参数,如果未传入导出目录参数,则默认当前活动目录的目录参数为导出路径参数。检查导出路径参数是否具备写入权限,对于无写入权限的进行异常告警,并退出程序执行。

例如:当前目录:/home/etlrun/python_src/utils;

执行命令:pythondb_to_xlsx_new.pyy0000002.sql,由于命令未传入sql文件的绝对路径、未指定导出excel的名称与目录,所以程序默认检查当前目录是否有写的权限、当前目录是否存在y0000002.sql的文件,如果检查结果不满足则会报出异常,并退出执行。

上述实施例中,事先进行权限检查可以在未执行大量io操作之前检查必备条件是否满足,避免io操作完成后无法将缓存数据刷入到磁盘中。

可选地,在一个实施例中,如图3所示、所述将所述sql结果集写入预设导出路径下的excel文件中,包括:

131、获取所述sql结果集的字段类型,以及字段别名和/或字段名称。

132、根据预设映射关系为所述字段类型适配excel数据格式。

具体地,可以利用字典库记录映射关系,当有映射不正确时可以更新和修改映射关系的字典库。例如常见的映射类型包括:数据库类型为varchar、string、text、和char类型的,对应excel格式为文本;数据库类型为number、decimal和int类型的,对应excel格式为数值类型(当为小数时,默认是保留2位进行四舍五入);数据库类型为timestamp和date类型的,对应excel格式为日期、时间或者文本类型。

133、将所述字段别名和/或字段名称写入excel文件的第一列作为标题。

具体地,可以自动将字段别名写入到excel文件的第一列作为标题。如果未提供别名,则默认将字段名称写入到excel文件的第一列作为标题。例如,步骤111中字段card_no有别名为“卡号”,则输出的excel文件对应列的标题为“卡号”,如果没有别名,则显示字段名称card_no。

134、将所述sql结果集以适配的所述excel数据格式的写入excel文件。

现有技术中,传统的数据库数据导出一般为txt、csv等格式,用excel打开时需要进行格式转换,操作麻烦,用户体验度低。

上述实施例中,数据导出时将数据库的数据类型与excel数据类型进行自动适配,直接以适配的数据格式导出,打开文件时无需进行格式转换,提升了导出excel数据的效率,提高了用户体验度。

可选地,将所述sql结果集以适配的所述excel数据格式的写入excel文件中之前,还包括:根据所述待查询数据库的编码格式,对所述sql结果集进行导出内容的统一编码规整。

由于windows在处理unicode的文件时有相应的建议,即microsoft建议所有的unicode文件应该以zerowidthnobreakspace(u feff)字符开头。当数据库为utf-8等unicode编码时,需要对导出的内容进行编码处理,加上windows建议的特征符。

上述实施例中,进行编码规整后,有效避免不同编码格式带来多字节字符串(如中文、日文等)在excel显示乱码的问题。

可选地,所述将所述sql结果集以所述适配的excel数据格式写入excel文件时,还包括:根据预设拆分规则将所述sql结果集拆分写入excel文件的数据sheet页中。

需要说明的是,将数据写入excel时,可以根据excel文件版本和预设每个sheet页写入数据条数等预设拆分规则将sql结果集进行拆分,将拆分后端sql结果集写入不同的数据sheet页中。比如数据有10万条,2003版就分成2个数据sheet页,2003版后的就一个数据sheet页。再比如规定每个数据sheet也存储5万条数据,那10万条数据需要分成两个数据sheet页进行存储。

上述实施例中,根据预设拆分规则将所述sql结果集拆分写入excel文件的数据sheet页中,可实现查询数据的灵活存储。

可选地,在一个实施例中,还包括将所述动态sql脚本写入数据sheet页后面的一个sheet页。

上述实施例中,将所述动态sql脚本写入数据sheet页后面的一个sheet页,方便下一次运行与数据核对。

上文结合图1至图3,详细描述了根据本发明实施例提供的数据库查询及数据导出方法。下面结合图4,详细描述本发明实施例提供的数据库查询及数据导出系统。

如图4所示,本发明实施例还提供一种数据库查询及数据导出系统,包括:脚本生成模块、数据查询模块和数据导出模块。

脚本生成模块,用于生成符合待查询数据库sql特性的动态sql脚本;其中,所述待查询数据库sql特性为预先获取并封装待查询数据库sdk获得的;

数据查询模块,用于将所述动态sql脚本提交到待查询数据库,接收所述待查询数据库反馈的执行所述动态sql脚本获得的sql结果集;

数据导出模块,用于将所述sql结果集写入预设导出路径下的excel文件。

上述实施例中,预先封装不同数据库的sql特性,编写满足不同数据库sql特性的动态sql脚本,可实现对多种不同类型数据库的数据查询,并进行数据快速导出。无需每查询一种数据库更换一种查询工具,降低了数据分析师对多的学习成本,操作简便,查询效率高。

可选地,所述脚本生成模块具体用于:生成初始sql脚本,获取待查询数据库的sql特性,根据所述sol特性对所述初始sql脚本进行语法检查;根据检查结果对所述初始sql脚本进行修改直至符合所述待查询数据库的sql特性,获取动态sql脚本。

可选地,还包括导出路径获取模块,用于获取导出路径参数,根据所述导出路径参数检验对应路径下的excel文件否具备写入权限,如无写入权限则更改导出路径。

可选地,所述数据导出模块具体用于:获取所述sql结果集的字段类型,以及字段别名和/或字段名称;根据预设映射关系为所述字段类型适配excel数据格式;将所述字段别名和/或字段名称写入excel文件的第一列作为标题;将所述sql结果集以适配的所述excel数据格式的写入excel文件。

可选地,还包括编码规整模块,用于根据所述待查询数据库的编码格式,对所述sql结果集进行导出内容的统一编码规整。

可选地,所述数据导出模块还用于:根据预设拆分规则将所述sql结果集拆分写入excel文件的数据sheet页中。

可选地,所述数据导出模块还用于将所述动态sql脚本写入数据sheet页后面的一个sheet页。

本发明实施例还提供一种计算机可读存储介质,包括指令,当所述指令在计算机上运行时,使所述计算机执行根据上述实施例所述的数据库查询及数据导出方法。

本发明实施例提供一种计算机设备,包括存储器、处理器及存储在所述存储器上的并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现上述实施例所述的数据库查询及数据导出方法。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。

作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。


技术特征:

1.一种数据库查询及数据导出方法,其特征在于,包括:

生成符合待查询数据库sql特性的动态sql脚本;其中,所述待查询数据库sql特性为预先获取并封装待查询数据库sdk获得的;

将所述动态sql脚本提交到待查询数据库,接收所述待查询数据库反馈的执行所述动态sql脚本获得的sql结果集;

将所述sql结果集写入预设导出路径下的excel文件。

2.根据权利要求1所述的数据库查询及数据导出方法,其特征在于,所述生成符合待查询数据库sql特性的动态sql脚本,包括:

生成初始sql脚本,获取待查询数据库的sql特性,根据所述sol特性对所述初始sql脚本进行语法检查;

根据检查结果对所述初始sql脚本进行修改直至符合所述待查询数据库的sql特性,获取动态sql脚本。

3.根据权利要求1所述的数据库查询及数据导出方法,其特征在于,所述将所述动态sql脚本提交到待查询数据库之前,还包括:获取导出路径参数,根据所述导出路径参数检验对应路径下的excel文件否具备写入权限,如无写入权限则更改导出路径。

4.根据权利要求1至3任一项所述的数据库查询及数据导出方法,其特征在于,所述将所述sql结果集写入预设导出路径下的excel文件中,包括:

获取所述sql结果集的字段类型,以及字段别名和/或字段名称;

根据预设映射关系为所述字段类型适配excel数据格式;

将所述字段别名和/或字段名称写入excel文件的第一列作为标题;

将所述sql结果集以适配的所述excel数据格式的写入excel文件。

5.根据权利要求4所述的数据库查询及数据导出方法,其特征在于,将所述sql结果集以适配的所述excel数据格式的写入excel文件中之前,还包括:根据所述待查询数据库的编码格式,对所述sql结果集进行导出内容的统一编码规整。

6.根据权利要求4所述的数据库查询及数据导出方法,其特征在于,所述将所述sql结果集以所述适配的excel数据格式写入excel文件时,还包括:根据预设拆分规则将所述sql结果集拆分写入excel文件的数据sheet页中。

7.根据权利要求6所述的数据库查询及数据导出方法,其特征在于,还包括将所述动态sql脚本写入数据sheet页后面的一个sheet页。

8.一种数据库查询及数据导出系统,其特征在于,包括:

脚本生成模块,用于生成符合待查询数据库sql特性的动态sql脚本;其中,所述待查询数据库sql特性为预先获取并封装待查询数据库sdk获得的;

数据查询模块,用于将所述动态sql脚本提交到待查询数据库,接收所述待查询数据库反馈的执行所述动态sql脚本获得的sql结果集;

数据导出模块,用于将所述sql结果集写入预设导出路径下的excel文件。

9.一种计算机可读存储介质,包括指令,其特征在于,当所述指令在计算机上运行时,使所述计算机执行根据权利要求1-7任一项所述的数据库查询及数据导出方法。

10.一种计算机设备,包括存储器、处理器及存储在所述存储器上的并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7任一项所述的数据库查询及数据导出方法。

技术总结
本发明涉及一种数据库查询及数据导出方法、系统、介质及设备,方法包括:生成符合待查询数据库SQL特性的动态SQL脚本;其中,所述待查询数据库SQL特性为预先获取并封装待查询数据库SDK获得的;将所述动态SQL脚本提交到待查询数据库,接收所述待查询数据库反馈的执行所述动态SQL脚本获得的SQL结果集;将所述SQL结果集写入预设导出路径下的Excel文件。本发明提供的数据库查询及数据导出方法,预先封装不同数据库的SQL特性,编写满足不同数据库SQL特性的动态SQL脚本,可实现对多种不同类型数据库的数据查询,并进行数据快速导出。

技术研发人员:文凭
受保护的技术使用者:北京思特奇信息技术股份有限公司
技术研发日:2020.01.16
技术公布日:2020.06.09

转载请注明原文地址: https://bbs.8miu.com/read-25530.html

最新回复(0)