一种基于Presto的支持多数据源的混合执行SQL和python脚本的方法及系统技术方案

技术编号:23787121 阅读:26 留言:0更新日期:2020-04-15 00:30
本发明专利技术公开了一种基于Presto的支持多数据源的混合执行SQL和python脚本的方法及系统,该方法及系统具体分为数据源管理、语法编辑器、语法解析器和脚本执行器;首先基于Presto构建多数据源查询平台,实现数据源动态添加删除以及使用同一套SQL语法查询不同数据源的数据;之后定义一套可混合执行SQL和python代码的语法规则;语法规则如下:整个脚本由命令行代码块及python代码块两部分组成,其中命令行代码块包含SQL语句;命令行语句以';'作为结束符,python代码块需要以'%python'包裹,即以'%python'开头,并以'%python'结尾。本发明专利技术提供的方法简化了多数据源查询的过程,消除了SQL和python代码的跨语言隔阂,数据分析人员无需再处理python和SQL查询的连接问题,只关注数据分析的部分,大大提高数据分析的效率。

A Presto based method and system for mixed execution of SQL and python scripts supporting multiple data sources

【技术实现步骤摘要】
一种基于Presto的支持多数据源的混合执行SQL和python脚本的方法及系统
本专利技术涉及数据分析
,具体为一种基于Presto的支持多数据源的混合执行SQL和python脚本的方法及系统。
技术介绍
目前,在数据分析领域,分析师使用python对多个类SQL系统的数据进行查询分析时,需要执行以下步骤:步骤一,针对不同的类SQL系统编写查询SQL;步骤二,针对不同类SQL系统编写链接执行代码执行编写好的SQL进行数据查询;步骤三,编写数据转换代码将查询结果转换为DataFrame;步骤四,编写数据分析代码分析数据;步骤五,执行python代码得出分析结果。整个过程只有步骤四是具体的数据分析过程,其他都是为数据分析做的重复的准备工作,过程繁琐,操作复杂,非常影响数据分析的效率。
技术实现思路
本专利技术的目的在于提供一种基于Presto的支持多数据源的混合执行SQL和python脚本的方法及系统,其特征在于:该方法及系统具体分为数据源管理、语法编辑器、语法解析器和脚本执行器;首先基于Presto构建多数据源查询平台,实现数据源动态添加删除以及使用同一套SQL语法查询不同数据源的数据;之后定义一套可混合执行SQL和python代码的语法规则;语法规则如下:整个脚本由命令行代码块及python代码块两部分组成,其中命令行代码块包含SQL语句;命令行语句以';'作为结束符,python代码块需要以'%python'包裹,即以'%python'开头,并以'%python'结尾;语法规则其中包括:①:export语法:export命令负责声明全局常量,语法规则如下:exportconst_name=num|"string";②:load语法:load命令可以将CSV或者JSON文件导入成临时表,语法规则如下:loadcsv|json.'file_path'astabletable_name;③:savequeryastable语法:savequeryastable命令将SQL查询结果保存为临时表,语法规则如下:savequery(SQLstatement)astabletable_name;④:savequeryasvariable语法:savequeryasvariable命令将SQL查询结果保存为全局变量,语法规则如下:savequery(SQLstatement)asvariablevariable_name;⑤:print语法:print命令可以将全局变量的值或者内部表的数据临时输出出来进行预览,print内部表时,如果数据量很大,只会输出部分结果进行预览,语法规则如下:print{{v1}}|(SQLstatement);⑥:return语法:return命令返回最后结果,语法规则如下:return{{v1}};⑦:变量及常量引用:使用{{varial_name|table_name}}格式引用变量和内部表;⑧:Pythonload_variable函数python中使用load_variable方法将全局变量load为python变量;⑨:Pythonexport_variable函数:python中使用export_variable方法将python变量声明为全局变量,使变量可以直接在命令行里引用;⑩:Pythonload_table函数:python中使用load_table方法将内部表load为pandas的DataFrame;⑪:Pythonsave_to_table函数:python中使用save_to_table方将pandas的DataFrame导出为内部表;使用Antlr4根据上面定义的语法规则开发语法解析执行器,执行器使用内存数据库作为中间结果存储媒介,每次执行脚本,在内存数据库中为本次执行创建一个临时存储,脚本执行结束后,释放数据,删除临时存储,具体解析执行逻辑如下:①:export命令:对于export命令执行器会将对应的变量以变量名为key临时保存到内存数据库的变量表中;②:load命令:对于load命令执行器会解析URI,识别文件系统,然后使用对应文件系统的API读取文件,结合CSV或JSON解析器将文件解析为二维数据临时保存成内存数据库表;③:savequeryastable命令:对于savequeryastable命令执行器会调用presto查询接口到指定数据源执行SQL查询数据,将查询结果临时保存成内存数据库表;对于savequeryasvariable命令执行器会调用presto查询接口到指定数据源执行SQL查询数据,将查询结果以变量名为key临时保存到内存数据库的变量表中;⑤:print命令:对于print命令执行器会识别print的对象,如果是全局变量,那么直接打印变量的值,如果是内存数据库中的临时表,执行器会查询该表,将数据以二维表格的形式输出(数据超过限定行数,只打印部分数据),如果print的对象为SQL查询语句,执行器会调用presto查询接口执行SQL查询数据,最终以二维表格的形式输出;⑥:return命令:return命令即是脚本的结束符也是脚本执行的最终返回结果,对应return命令执行器会将对应的变量或临时表数据返回给前端,作为脚本的最终执行结果;对于python代码,开发load_variable,export_variable,load_table,save_to_table等内置函数模块,执行器执行python代码前将内置函数模块自动引入python代码中,然后执行;具体的,各内置函数实现逻辑如下:①:load_variable函数:以传入函数的变量名作为key查询内存数据库变量表,返回对应变量的值;②:export_variable函数:将python变量以传入的变量名作为key临时保存到内存数据库变量表中;③:load_table函数:到内存数据库中查询对应名字的表数据,转换成pandas的DataFrame;④:save_to_table函数:将pandas的DataFrame临时保存成内存数据库的表。优选的,所述数据源管理模块基于presto将数据源的动态添加删除,以及对跨数据源的数据查询。优选的,所述语法编辑器中根据定义的语法规则编写SQL和python混合脚本。优选的,所述语法编辑器将编辑好的脚本发送给语法解析器解析成语法树。优选的,所述语法解析器将解析好的语法树发送给脚本执行器根据每一种语法的执行规则进行执行,返回执行结果并打印执行日志。与现有技术相比,本专利技术的有益效果如下:1、本专利技术提供的方法简本文档来自技高网...

【技术保护点】
1.一种基于Presto的支持多数据源的混合执行SQL和python脚本的方法及系统,其特征在于:该方法及系统具体分为数据源管理、语法编辑器、语法解析器和脚本执行器;首先基于Presto构建多数据源查询平台,实现数据源动态添加删除以及使用同一套SQL语法查询不同数据源的数据;之后定义一套可混合执行SQL和python代码的语法规则;语法规则如下:整个脚本由命令行代码块及python代码块两部分组成,其中命令行代码块包含SQL语句;命令行语句以';'作为结束符,python代码块需要以'%python'包裹,即以'%python'开头,并以'%python'结尾;语法规则其中包括:/n①:export语法:/nexport命令负责声明全局常量,语法规则如下:/nexport const_name = num|"string";/n②:load语法:/nload命令可以将CSV或者JSON文件导入成临时表,语法规则如下:/nload csv|json.'file_path' as table table_name;/n③:save query as table 语法:/nsave query as table 命令将SQL查询结果保存为临时表,语法规则如下:/nsave query (SQL statement) as table table_name;/n④:save query as variable 语法:/nsave query as variable 命令将SQL查询结果保存为全局变量,语法规则如下:/nsave query (SQL statement) as variable variable_name;/n⑤:print 语法:/nprint 命令可以将全局变量的值或者内部表的数据临时输出出来进行预览,print内部表时,如果数据量很大,只会输出部分结果进行预览,语法规则如下:/nprint {{v1}}|(SQL statement);/n⑥:return 语法:/nreturn命令返回最后结果,语法规则如下:/nreturn {{v1}};/n⑦:变量及常量引用:/n使用{{varial_name|table_name}} 格式引用变量和内部表;/n⑧:Python load_variable函数/npython中使用load_variable方法将全局变量load为python变量;/n⑨:Python export_variable函数:/npython中使用export_variable方法将python变量声明为全局变量,使变量可以直接在命令行里引用;/n⑩:Python load_table函数:/npython中使用load_table方法将内部表load为pandas的DataFrame;/n⑪:Python save_to_table函数:/npython中使用save_to_table方将pandas的DataFrame导出为内部表;/n使用Antlr4根据上面定义的语法规则开发语法解析执行器,执行器使用内存数据库作为中间结果存储媒介,每次执行脚本,在内存数据库中为本次执行创建一个临时存储,脚本执行结束后,释放数据,删除临时存储,具体解析执行逻辑如下:/n①:export命令:/n对于export命令执行器会将对应的变量以变量名为key临时保存到内存数据库的变量表中;/n②:load命令:/n对于load命令执行器会解析URI,识别文件系统,然后使用对应文件系统的API读取文件,结合CSV或JSON解析器将文件解析为二维数据临时保存成内存数据库表;/n③:save query as table 命令:/n对于save query as table命令执行器会调用presto查询接口到指定数据源执行SQL查询数据,将查询结果临时保存成内存数据库表;/n对于save query as variable命令执行器会调用presto查询接口到指定数据源执行SQL查询数据,将查询结果以变量名为key临时保存到内存数据库的变量表中;/n⑤:print 命令:/n对于print命令执行器会识别print的对象,如果是全局变量,那么直接打印变量的值,如果是内存数据库中的临时表,执行器会查询该表,将数据以二维表格的形式输出(数据超过限定行数,只打印部分数据),如果print的对象为SQL查询语句,执行器会调用presto查询接口执行SQL查询数据,最终以二维表格的形式输出;/n⑥:return 命令:/nreturn命令即是脚本的结束符也是脚本执行的最终返回结果,对应return命令执行器会将对应的变量或临时表数据返回给前端,作为脚本的最终执行结果;/n对于python代码,开发load_variable,ex...

【技术特征摘要】
1.一种基于Presto的支持多数据源的混合执行SQL和python脚本的方法及系统,其特征在于:该方法及系统具体分为数据源管理、语法编辑器、语法解析器和脚本执行器;首先基于Presto构建多数据源查询平台,实现数据源动态添加删除以及使用同一套SQL语法查询不同数据源的数据;之后定义一套可混合执行SQL和python代码的语法规则;语法规则如下:整个脚本由命令行代码块及python代码块两部分组成,其中命令行代码块包含SQL语句;命令行语句以';'作为结束符,python代码块需要以'%python'包裹,即以'%python'开头,并以'%python'结尾;语法规则其中包括:
①:export语法:
export命令负责声明全局常量,语法规则如下:
exportconst_name=num|"string";
②:load语法:
load命令可以将CSV或者JSON文件导入成临时表,语法规则如下:
loadcsv|json.'file_path'astabletable_name;
③:savequeryastable语法:
savequeryastable命令将SQL查询结果保存为临时表,语法规则如下:
savequery(SQLstatement)astabletable_name;
④:savequeryasvariable语法:
savequeryasvariable命令将SQL查询结果保存为全局变量,语法规则如下:
savequery(SQLstatement)asvariablevariable_name;
⑤:print语法:
print命令可以将全局变量的值或者内部表的数据临时输出出来进行预览,print内部表时,如果数据量很大,只会输出部分结果进行预览,语法规则如下:
print{{v1}}|(SQLstatement);
⑥:return语法:
return命令返回最后结果,语法规则如下:
return{{v1}};
⑦:变量及常量引用:
使用{{varial_name|table_name}}格式引用变量和内部表;
⑧:Pythonload_variable函数
python中使用load_variable方法将全局变量load为python变量;
⑨:Pythonexport_variable函数:
python中使用export_variable方法将python变量声明为全局变量,使变量可以直接在命令行里引用;
⑩:Pythonload_table函数:
python中使用load_table方法将内部表load为pandas的DataFrame;
⑪:Pythonsave_to_table函数:
python中使用save_to_table方将pandas的DataFrame导出为内部表;
使用Antlr4根据上面定义的语法规则开发语法解析执行器,执行器使用内存数据库作为中间结果存储媒介,每次执行脚本,在内存数据库中为本次执行创建一个临时存储,脚本执行结束后,释放数据,删除临时存储,具体解析执行逻辑如下:
①:export命令:
对于expor...

【专利技术属性】
技术研发人员:邱珩陈俊锋胡宗宝
申请(专利权)人:象辑知源武汉科技有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1