CN117349332B - 一种应用程序编程接口api的生成方法、装置和电子设备 - Google Patents

一种应用程序编程接口api的生成方法、装置和电子设备 Download PDF

Info

Publication number
CN117349332B
CN117349332B CN202311657374.6A CN202311657374A CN117349332B CN 117349332 B CN117349332 B CN 117349332B CN 202311657374 A CN202311657374 A CN 202311657374A CN 117349332 B CN117349332 B CN 117349332B
Authority
CN
China
Prior art keywords
sql
queried
data
api
parameter
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.)
Active
Application number
CN202311657374.6A
Other languages
English (en)
Other versions
CN117349332A (zh
Inventor
黄深广
黄昂涛
孙志军
夏侃
贺伟国
汪先波
周桢挺
吕作印
曹思超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NINGBO PORT INFORMATION COMMUNICATION CO Ltd
Original Assignee
NINGBO PORT INFORMATION COMMUNICATION CO Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NINGBO PORT INFORMATION COMMUNICATION CO Ltd filed Critical NINGBO PORT INFORMATION COMMUNICATION CO Ltd
Priority to CN202311657374.6A priority Critical patent/CN117349332B/zh
Publication of CN117349332A publication Critical patent/CN117349332A/zh
Application granted granted Critical
Publication of CN117349332B publication Critical patent/CN117349332B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种应用程序编程接口API的生成方法、装置和电子设备;该方法包括:确定结构化查询语句SQL,并将SQL解析成语法树;获取SQL关联的表信息和表信息对应的字段信息,并从SQL的数据源中获取字段信息对应的元数据信息;基于语法树中条件表达式所在的位置和字段信息对应的元数据信息对待查询数据进行类型转换,得到转换后的待查询数据;修正语法树的节点,并将修正后的语法树转化成可执行的SQL;基于可执行的SQL生成API;通过本发明,解决了相关技术中生成API涉及的SQL较为繁琐、调试难度大,导致API生成效率低的技术问题,达到了简化SQL配置流程,更加灵活地生成可执行的SQL,进而提高了API生成效率的技术效果。

Description

一种应用程序编程接口API的生成方法、装置和电子设备
技术领域
本发明涉及计算机技术领域,特别是涉及一种应用程序编程接口API的生成方法、装置和电子设备。
背景技术
在应用程序编程接口(Application Programming Interface,API)创建过程中,现有技术通常是使用强类型语言(Java等)、脚本语言(Python等)通过编码方式开发一个服务接口,然后发布到服务器上,形成一个数据服务。但这种方式开发效率极低,每次开发一个服务都需要手动编写一段代码逻辑,但使用的灵活性比较大,可以在执行层面对SQL进行分支、循环、变量的逻辑判断,生成强大的一个服务。另外,还有现有技术使用模板语言、领域特定语言(Domain Specific Language,DSL)来编写执行SQL脚本(包含一个或多个SQL命令的SQL语句),在研发层面更加的方便快捷,但在使用层面更加的繁琐,最终用户需要学习配置SQL脚本的语法,调试难度加大,使得开发效率大大降低。
针对上述的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供的一种应用程序编程接口API的生成方法、装置和电子设备,以至少解决相关技术中生成API涉及的SQL较为繁琐、调试难度大,导致API生成效率低的技术问题。
根据本发明实施例的一个方面,提供了一种应用程序编程接口API的生成方法,包括:确定结构化查询语句SQL,并将所述SQL解析成语法树,其中,所述SQL用于查询待查询数据;获取所述SQL关联的表信息和所述表信息对应的字段信息,并从所述SQL的数据源中获取所述字段信息对应的元数据信息;基于所述语法树中条件表达式所在的位置和所述字段信息对应的元数据信息对所述待查询数据进行类型转换,得到转换后的待查询数据;修正所述语法树的节点,并将修正后的语法树转化成可执行的SQL;基于所述可执行的SQL生成API,其中,所述API用于访问所述转换后的待查询数据。
可选地,确定结构化查询语句SQL,包括:获取统一资源标识符URI地址,其中,每个所述URI地址与一个所述SQL相对应;基于所述URI地址路由到对应的所述SQL。
可选地,基于所述语法树中条件表达式所在的位置和所述字段信息对应的元数据信息对所述待查询数据进行类型转换,得到转换后的待查询数据,包括:基于所述语法树中条件表达式所在的位置对所述待查询数据的参数进行转换,得到参数转换后的待查询数据;基于所述字段信息对应的元数据信息对所述待查询数据的参数类型进行转换,得到参数类型转换后的待查询数据;根据参数转换后的待查询数据和所述参数类型转换后的待查询数据,生成所述转换后的待查询数据。
可选地,修正所述语法树的节点,包括:针对第一类型参数的节点,将第一类型参数的节点从所述语法树的节点中移除,其中,所述第一类型参数为非必填且未传递的参数;和/或,针对第二类型参数的节点,将所述语法树中所述第二类型参数的节点替换为恒非等表达式,其中,所述第二类型参数为空数组。
可选地,将修正后的语法树转化成可执行的SQL,包括:将修正后的语法树转化成目标SQL;将所述目标SQL中的占位符替换为预定的占位符,并将所述转换后的待查询数据转化成具有次序的数组,得到所述可执行的SQL。
可选地,所述方法还包括:获取分页参数;构建所述分页参数的节点;将所述分页参数的节点将插入到所述修正后的语法树。
可选地,所述方法还包括:确定所述待查询数据的请求方式,其中,所述请求方式用于指示数据传输的形式;根据所述请求方式获取待查询参数;将待查询参数转换成具有预定键值对结构的参数,得到所述待查询数据,其中,所述预定键值对结构中的每一个键对应至少一个值。
可选地,所述方法还包括:确定所述语法树的返回类型;基于所述返回类型对所述语法树进行结构转换,得到所述语法树的转换结果,其中,所述语法树的转换结果用于反映所述语法树的结构化程度。
根据本发明实施例的另一个方面,提供了一种API的生成装置,包括:第一处理模块,用于确定结构化查询语句SQL,并将所述SQL解析成语法树,其中,所述SQL用于查询待查询数据;第二处理模块,用于获取所述SQL关联的表信息和所述表信息对应的字段信息,并从所述SQL的数据源中获取所述字段信息对应的元数据信息;第三处理模块,用于基于所述语法树中条件表达式所在的位置和所述字段信息对应的元数据信息对所述待查询数据进行类型转换,得到转换后的待查询数据;第四处理模块,用于修正所述语法树的节点,并将修正后的语法树转化成可执行的SQL;第五处理模块,用于基于所述可执行的SQL生成API,其中,所述API用于访问所述转换后的待查询数据。
根据本发明实施例的另一个方面,提供了一种电子设备,包括:处理器,以及存储程序的存储器,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行上述中所述的API的生成方法。
在本发明实施例中,采用确定结构化查询语句SQL,并将SQL解析成语法树,其中,SQL用于查询待查询数据;获取SQL关联的表信息和表信息对应的字段信息,并从SQL的数据源中获取字段信息对应的元数据信息;基于语法树中条件表达式所在的位置和字段信息对应的元数据信息对待查询数据进行类型转换,得到转换后的待查询数据;修正语法树的节点,并将修正后的语法树转化成可执行的SQL;基于可执行的SQL生成API,其中,API用于访问转换后的待查询数据。也就是,本发明的实施例可以基于扩展的SQL和执行环境的上下文信息(包含待查询数据、语法树和元数据信息等)生成最终可执行的SQL从而形成API,进而解决了相关技术中生成API涉及的SQL较为繁琐、调试难度大,导致API生成效率低的技术问题,达到了简化SQL配置流程,更加灵活地生成可执行的SQL,进而提高了API生成效率的技术效果。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的实施例。
图1为本发明实施例提供的一种应用程序编程接口API的生成方法的流程图;
图2为本发明实施例提供的一种API的生成装置的示意图;
图3为本发明实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本发明的实施例。虽然附图中显示了本发明的某些实施例,然而应当理解的是,本发明的实施例可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本发明的实施例。应当理解的是,本发明的实施例的附图及实施例仅用于示例性作用,并非用于限制本发明的实施例的保护范围。
根据本发明实施例的一个方面,提供了一种应用程序编程接口API的生成方法。图1为本发明实施例提供的一种应用程序编程接口API的生成方法的流程图,如图1所示,该方法包括如下步骤:
步骤S102,确定结构化查询语句SQL,并将SQL解析成语法树,其中,SQL用于查询待查询数据;
步骤S104,获取SQL关联的表信息和表信息对应的字段信息,并从SQL的数据源中获取字段信息对应的元数据信息;
步骤S106,基于语法树中条件表达式所在的位置和字段信息对应的元数据信息对待查询数据进行类型转换,得到转换后的待查询数据;
步骤S108,修正语法树的节点,并将修正后的语法树转化成可执行的SQL;
上述修正语法树的节点包括但不限于对语法树中的节点进行新增、删除、修改等操作。
步骤S110,基于可执行的SQL生成API,其中,API用于访问转换后的待查询数据。
可选地,可以将可执行的 SQL 映射到API ,并提供统一的响应格式,从而可以极大地节省时间和精力。
在本发明实施例中,采用确定结构化查询语句SQL,并将SQL解析成语法树,其中,SQL用于查询待查询数据;获取SQL关联的表信息和表信息对应的字段信息,并从SQL的数据源中获取字段信息对应的元数据信息;基于语法树中条件表达式所在的位置和字段信息对应的元数据信息对待查询数据进行类型转换,得到转换后的待查询数据;修正语法树的节点,并将修正后的语法树转化成可执行的SQL;基于可执行的SQL生成API,其中,API用于访问转换后的待查询数据。也就是,本发明的实施例可以基于扩展的SQL和执行环境的上下文信息(包含待查询数据、语法树和元数据信息等)生成最终可执行的SQL从而形成API,进而解决了相关技术中生成API涉及的SQL较为繁琐、调试难度大,导致API生成效率低的技术问题,达到了简化SQL配置流程,更加灵活地生成可执行的SQL,进而提高了API生成效率的技术效果。
此外,配置的SQL基于执行上下文和元数据信息,通过解析语法树对SQL节点进行新增、删除、修改从而形成可执行SQL,整个过程对配置员来说没有任何感知,从而解决配置灵活性的问题。为了解决学习其他语法的难度,本发明实施例基于配置化DataAPI的思路,在配置方面更进一步简化,未借助任何模板语言、方言DSL等常规化技术手段,基于变量占位符配置方式和SQL语法树解析自动将配置SQL转为关系数据库管理系统(RelationalDatabase Management System,RDBMS)可执行的SQL,即可以直接以常规SQL+参数占位符的形式来编写可执行的SQL,对熟悉SQL的开发人员而言,基本无感。
可选地,JSqlParser库能解析sql成为AST语法树,可导入开源的依赖库,调用其API进行结构解析,示例代码如下:
String sqlText = "select name,id from t where is_deleted=999";
CCJSqlParserManager parser = new CCJSqlParserManager();
Statement stmt = parser.parse(new StringReader(sqlText));
if (stmtinstanceof Select) {
// 数据服务只对SELECT语句做处理,其余的CUD操作禁止
System.out.println(JSON.toJSONString(stmt));
可选地,基于已经解析成功的语法树,获取本次执行SQL所涉及的表信息和字段信息,同时,基于SQL配置对应的数据源,获取对应字段信息的数据类型(即元数据信息),表信息、字段信息的元数据信息置于执行上下文中。
语法树中可以解析出本次执行所涉及的表、字段,示例代码如下:
String sqlText = "select a.name,a.id from a t where a.is_deleted=999";
CCJSqlParserManager parser = new CCJSqlParserManager();
Statement stmt = parser.parse(new StringReader(sqlText));
if (stmtinstanceof Select) {
TablesNamesFindertnf = new TablesNamesFinder();
/**
* 获取查询中所有相关的表
*/
System.out.println("获取SQL中关联的表名 ==>" + JSON.toJSONString(tnf.getTableList(stmt)));
}
SimpleNode node = (SimpleNode) CCJSqlParserUtil.parseAST(sqlText);
node.jjtAccept(new CCJSqlParserDefaultVisitor() {
@Override
public Object visit(SimpleNode node, Object data) {
if (node.getId() == CCJSqlParserTreeConstants.JJTCOLUMN) {
System.out.println("获取列 ==>" + node.jjtGetValue());
}
return super.visit(node, data);
}
}, null);
进一步地,本示例的执行结果如下:
获取SQL中关联的表名 ==>["a"]
获取列 ==>a.name
获取列 ==>a.id
获取列 ==>a.is_deleted
需要说明的是,此时只获取到所涉及的表、列信息,列的数据类型的元数据信息,以及通过JDBC连接对应的数据源获取元数据信息。
需要说明的是,语法树的解析和SQL节点的修正基于开源的JSqlParser开源项目实现。
作为一种可选的实施例,确定结构化查询语句SQL,包括:获取统一资源标识符URI地址,其中,每个URI地址与一个SQL相对应;基于URI地址路由到对应的SQL。
RESTful API使用URI进行资源定位,基于终端的请求的URI地址路由到具体所配置的SQL,将SQL传递入JSqlParser中,解析成为完整的语法树。
需要说明的是,RESTful API使用 URI 来标识资源,并通过 HTTP 动词来定义操作方法,使得不同系统之间的交互变得更加简单和直观,同时也提高了可伸缩性和可重用性。
作为一种可选的实施例,基于语法树中条件表达式所在的位置和字段信息对应的元数据信息对待查询数据进行类型转换,得到转换后的待查询数据,包括:基于语法树中条件表达式所在的位置对待查询数据的参数进行转换,得到参数转换后的待查询数据;基于字段信息对应的元数据信息对待查询数据的参数类型进行转换,得到参数类型转换后的待查询数据;根据参数转换后的待查询数据和参数类型转换后的待查询数据,生成转换后的待查询数据。
可选地,基于SQL语法树和字段元数据信息,对待查询数据进行类型转换,适配成RDBMS支持的数据类型或者JDBC协议所支持的数据类型,数据类型的定位需要基于语法树上下文(例如,语法树中条件表达式所在的位置)和字段数据类型(对应于上述字段信息对应的元数据信息)。
进一步地,基于语法树中条件表达式所在的位置对待查询数据的参数进行转换;例如,参数前置操作符为IN,而GET请求传递的多个参数使用逗号分隔,则在本步骤中将基于逗号进行切分,将字符串参数转换为字符串数组。
进一步地,基于字段信息对应的元数据信息(例如,字段数据类型)对待查询数据的参数类型进行转换;例如,数据字段类型为日期时间,则参数值将逐级适配格式化字符串(yyyy-MM-dd HH:mm:ss、yyyyMMddHHmmss、yyyy-MM-dd)和毫秒时间戳,适配其中一种则直接转换为JDBC协议所对应的Date类型。
作为一种可选的实施例,修正语法树的节点,包括:针对第一类型参数的节点,将第一类型参数的节点从语法树的节点中移除,其中,第一类型参数为非必填且未传递的参数;和/或,针对第二类型参数的节点,将语法树中第二类型参数的节点替换为恒非等表达式,其中,第二类型参数为空数组。
可选地,基于执行上下文,对非必填且未传递的参数,在语法树的节点中进行节点移除;对特殊节点进行参数替换,如IN操作符,传递值为空数组,则将语法树中相应的节点替换为 1<>1这样的恒非等表达式;
进一步地,在移除节点时,对于or、and、小括号等连接操作符,在为空的情况需要级联进行移除,以及在移除完之后无过滤条件的场景,自动移除where子句。
例如,在SQL中某些非必填的参数没有传递,如以下示例代码中的param1未传递,则需对过滤条件进行移除,示例代码如下:
String sqlText = "select a.name,a.id from a where a.is_deleted=999and a.age>${param1}";
CCJSqlParserManager parser = new CCJSqlParserManager();
Statement stmt = parser.parse(new StringReader(sqlText));
if (stmtinstanceof Select) {
Select select = (Select) stmt;
PlainSelect body = (PlainSelect) select.getSelectBody();
AndExpression expr = (AndExpression) body.getWhere();
// 可以移除右侧的条件
body.setWhere(expr.getLeftExpression());
System.out.println(select.toString());
}
此时where中不需要参与过滤的条件被移除,以上示例的结果为:
SELECT a.name, a.id FROM a WHERE a.is_deleted = 999
在本发明实施例中,对于非必填参数,若在执行上下文中未包含该参数,则通过将SQL解析成语法数的方式,通过程序自动移除不需要参与条件过滤的SQL节点。
作为一种可选的实施例,将修正后的语法树转化成可执行的SQL,包括:将修正后的语法树转化成目标SQL;将目标SQL中的占位符替换为预定的占位符,并将转换后的待查询数据转化成具有次序的数组,得到可执行的SQL。
可选地,基于执行上下文参数,对语法树节点进行修正,移除非必要节点,参数部分替换为 ?,并生成顺序的参数列表。
可选地,对于执行上下文中的参数,将目标SQL中的占位符替换为JDBC协议中PreparedStatement中所支持的?占位符(对应于上述预定的占位符),并将执行参数顺序化为数组(对应于上述具有次序的数组),从而得到可执行的SQL,示例代码如下:
stmt = conn.prepareStatement(context.getProcessedSqlText());
// 设置参数
for (int i = 0; i<context.getParamValueList().size(); i++) {
Object object = context.getParamValueList().get(i);
stmt.setObject(i + 1, object);
}
rs = stmt.executeQuery();
可选地,生成最终可执行的SQL和顺序化参数,拉起对应的JDBC驱动包,获取java.sql.Connection连接信息,创建java.sql.PreparedStatement对象,并将执行参数以顺序化的方式进行设置,通过JDBC协议进行执行,返回java.sql.ResultSet对象,转换为RESTful协议支持的JSON格式返回给终端。
解析的结果中包含列信息和数据表格信息,示例代码如下:
rs = stmt.executeQuery();
result.setCostTime(System.currentTimeMillis() - sTime);
/**
* 获取表头信息
*/
ResultSetMetaDatametaData = rs.getMetaData();
for (int i = 0; i<metaData.getColumnCount(); i++) {
ApiInvokeResult.ApiInvokeResultColumn column = new ApiInvokeResult.ApiInvokeResultColumn();
column.setIndex(i);
column.setColumnName(metaData.getColumnName(i + 1));
column.setColumnTypeId(metaData.getColumnType(i + 1));
column.setColumnTypeName(metaData.getColumnTypeName(i + 1));
columnList.add(column);
}
while (rs.next()) {
List<Object>rowDataList = new LinkedList<>();
for (int i = 0; i<metaData.getColumnCount(); i++) {
rowDataList.add(rs.getObject(i + 1));
}
dataList.add(rowDataList);
}
result.setColumnList(columnList);
result.setRecords(dataList);
在本发明实施例中,基于执行上下文,替换配置SQL中的占位符,在执行SQL时动态参数转换成JDBC执行中的参数。
作为一种可选的实施例,上述方法还包括:获取分页参数;构建分页参数的节点;将分页参数的节点将插入到修正后的语法树。
上述分页参数包括但不限于页码、每页返回多少条数据。
可选地,若需要自动分页,则基于SQL方言在修正后的语法树的合适位置插入分页参数,并生成最终可执行的SQL。
需要说明的是,SQL方言为用于访问数据库的结构化查询语言的变体,根据具体的数据库系统不同,也可能会支持不同的方言。简单而言,某种RDBMS不只会支持SQL标准,而且还会有一些自己独有的语法,这就称之为方言。例如,LIMIT语句只能在MySQL中使用。
在本发明实施例中,对配置的SQL,根据数据源类型自动添加分页节点,即基于解析的SQL,结合不同RDBMS不同分页方言的特点,在SQL节点自动插入分页参数,从而解决调用时数据量时的分批数据传送问题。
进一步地,对于分页而言,需要生成对应的count语句和limit查询语句,对于count语句而言,则是将select ... from中的语句替换为count(*)即可,示例代码如下:
// 创建一个包含 count(*) 的语句
SelectExpressionItemcountItem = new SelectExpressionItem();
countItem.setExpression(SelectUtils.createFunction("count(*)"));
// 创建一个新的PlainSelect包含 count(*)
PlainSelectcountSelect = new PlainSelect();
countSelect.addSelectItems(countItem);
// 将原始查询作为子查询
countSelect.setFromItem(SelectUtils.buildSubSelect(originalSelect, "count_alias"));
// 生成 COUNT 查询
Select countQuery = new Select();
countQuery.setSelectBody(countSelect);
而对于limit语句而言,则是插入limit节点,示例代码如下:
PlainSelectplainSelect = (PlainSelect) selectBody;
plainSelect.setLimit(new Limit(limit));
plainSelect.setOffset(new Offset(offset));
作为一种可选的实施例,上述方法还包括:确定待查询数据的请求方式,其中,请求方式用于指示数据传输的形式;根据请求方式获取待查询参数;将待查询参数转换成具有预定键值对结构的参数,得到待查询数据,其中,预定键值对结构中的每一个键对应至少一个值。
可选地,通常使用RESTful API进行数据交换,HTTP协议支持GET请求和POST请求;也就是,上述请求方式包括GET请求和POST请求,其中,GET请求用于简单数据的传递,POST请求用于复杂数据的传递,GET请求以KV(键值对)的形式传递,POST请求以JSON的方式传递。
进一步地,将待查询参数全部转化为通用的KV结构(对应于上述具有预定键值对结构的参数),置入执行的上下文中,从而形成待查询数据。如果是POST 请求直接取Body,如果是GET 请求则转换为JSON,示例代码如下:
GET请求:key1=value1&key1=value2 ==>key1 = [value1,value2];
POST请求:{key1:value1,key2:value2} ==>key1 = value1 , key2 = value2;
GET select * from t where column1 in (value1, value2);
进一步地,对于执行上下文中的参数,需要进行必要性校验,比如必填参数的未传递等。
在具体实施过程中,如果基于SpringGateway网关,这需要自定义Filter,在Filter获取HttpRequest对象,再从请求报文、请求参数和请求头中获取对应的参数信息,解析之后置入执行上下文中,示例代码如下:
/**
* 如果是GET请求,则将其请求参数进行转换
*/
if (HttpMethod.GET.equals(request.getMethod())) {
MultiValueMap<String, String>queryParams = request.getQueryParams();
Iterator<Map.Entry<String, List<String>>>ltr = queryParams.entrySet().iterator();
while (ltr.hasNext()) {
Map.Entry<String, List<String>>entry = ltr.next();
paramValueList.put(entry.getKey(), entry.getValue().stream().collect(Collectors.joining(",")));
}
} else {
/**
* 如果是POST请求,则解析Body
*/
Object object = exchange.getAttribute(ApiGatewayConsts.GW_REQUEST_BODY);
if (Objects.nonNull(object)) {
ObjectNodejson = JSONs.object(object.toString());
Iterator<Map.Entry<String, JsonNode>>ltr = json.fields();
while (ltr.hasNext()) {
Map.Entry<String, JsonNode>node = ltr.next();
paramValueList.put(node.getKey(), node.getValue().asText());
}
}
}
/**
* 将解析出来的内容信息放入执行的上下文中
*/
context.put(ApiGatewayConsts.ATTRIBUTE_CONTEXT, new ApiBuildFactory().build(apiId, paramValueList));
作为一种可选的实施例,上述方法还包括:确定语法树的返回类型;基于返回类型对语法树进行结构转换,得到语法树的转换结果,其中,语法树的转换结果用于反映语法树的结构化程度。
可选地,如果语法树的返回类型为JSON结构,则基于JSON结构对语法树进行结构转换,从而得到语法树的转换结果,示例代码如下:
{
"selectBody": {
"fromItem": {
"fullyQualifiedName": "t",
"name": "t"
},
"selectItems": [
{
"expression": {
"columnName": "name",
"fullyQualifiedName": "name"
}
},
{
"expression": {
"columnName": "id",
"fullyQualifiedName": "id"
}
}
],
"where": {
"leftExpression": {
"columnName": "is_deleted",
"fullyQualifiedName": "is_deleted"
},
"rightExpression": {
"bigIntegerValue": 0,
"stringValue": "0",
"value": 0
},
"stringExpression": "="
}
},
}
进一步地,可知文本SQL依据已经结构化,之后的一些操作都将基于此结构化结构进行。
在本发明实施例中,通过解析SQL中表、字段的关系,结合获取字段的元数据信息,将RESTful传递的弱类型数据转换成RDBMS需要的强类型数值,自动解决RESTful API中JSON字段的弱数据类型与RDMS的强数据类型不适配的问题。
根据本发明实施例的另一个方面,提供了一种API的生成装置。图2为本发明实施例提供的一种API的生成装置的示意图,如图2所示,该API的生成装置包括:第一处理模块202、第二处理模块204、第三处理模块206、第四处理模块208和第五处理模块210。下面对该API的生成装置进行详细说明。
第一处理模块202,用于确定结构化查询语句SQL,并将SQL解析成语法树,其中,SQL用于查询待查询数据;
第二处理模块204,与上述第一处理模块202连接,用于获取SQL关联的表信息和表信息对应的字段信息,并从SQL的数据源中获取字段信息对应的元数据信息;
第三处理模块206,与上述第二处理模块204连接,用于基于语法树中条件表达式所在的位置和字段信息对应的元数据信息对待查询数据进行类型转换,得到转换后的待查询数据;
第四处理模块208,与上述第三处理模块206连接,用于修正语法树的节点,并将修正后的语法树转化成可执行的SQL;
第五处理模块210,与上述第四处理模块208连接,用于基于可执行的SQL生成API,其中,API用于访问转换后的待查询数据。
在本发明实施例中,该API的生成装置的第一处理模块202用于确定结构化查询语句SQL,并将SQL解析成语法树,其中,SQL用于查询待查询数据;第二处理模块204用于获取SQL关联的表信息和表信息对应的字段信息,并从SQL的数据源中获取字段信息对应的元数据信息;第三处理模块206用于基于语法树中条件表达式所在的位置和字段信息对应的元数据信息对待查询数据进行类型转换,得到转换后的待查询数据;第四处理模块用于修正语法树的节点,并将修正后的语法树转化成可执行的SQL;第五处理模块210基于可执行的SQL生成API,其中,API用于访问转换后的待查询数据。也就是,本发明的实施例可以基于扩展的SQL和执行环境的上下文信息(包含待查询数据、语法树和元数据信息等)生成最终可执行的SQL从而形成API,进而解决了相关技术中生成API涉及的SQL较为繁琐、调试难度大,导致API生成效率低的技术问题,达到了简化SQL配置流程,更加灵活地生成可执行的SQL,进而提高了API生成效率的技术效果。
此处需要说明的是,上述第一处理模块202、第二处理模块204、第三处理模块206、第四处理模块208和第五处理模块210对应于方法实施例中的步骤S102至S110,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述方法实施例所公开的内容。
作为一种可选的实施例,上述第一处理模块202包括:第一获取单元,用于获取统一资源标识符URI地址,其中,每个URI地址与一个SQL相对应;第一处理单元,用于基于URI地址路由到对应的SQL。
作为一种可选的实施例,上述第三处理模块206包括:第一转换单元,用于基于语法树中条件表达式所在的位置对待查询数据的参数进行转换,得到参数转换后的待查询数据;第二转换单元,用于基于字段信息对应的元数据信息对待查询数据的参数类型进行转换,得到参数类型转换后的待查询数据;生成单元,用于根据参数转换后的待查询数据和参数类型转换后的待查询数据,生成转换后的待查询数据。
作为一种可选的实施例,上述第四处理模块208包括:移除单元,用于针对第一类型参数的节点,将第一类型参数的节点从语法树的节点中移除,其中,第一类型参数为非必填且未传递的参数;和/或,替换单元,用于针对第二类型参数的节点,将语法树中第二类型参数的节点替换为恒非等表达式,其中,第二类型参数为空数组。
作为一种可选的实施例,上述第四处理模块208包括:转化单元,用于将修正后的语法树转化成目标SQL;第二处理单元,用于将目标SQL中的占位符替换为预定的占位符,并将转换后的待查询数据转化成具有次序的数组,得到可执行的SQL。
作为一种可选的实施例,上述装置还包括第六处理模块,该第六处理模块包括:第二获取单元,用于获取分页参数;构建单元,用于构建分页参数的节点;插入单元,用于将分页参数的节点将插入到修正后的语法树。
作为一种可选的实施例,上述装置还包括第七处理模块,该第七处理模块包括:第一确定单元,用于确定待查询数据的请求方式,其中,请求方式用于指示数据传输的形式;第三获取单元,用于根据请求方式获取待查询参数;第一转换单元,用于将待查询参数转换成具有预定键值对结构的参数,得到待查询数据,其中,预定键值对结构中的每一个键对应至少一个值。
作为一种可选的实施例,上述装置还包括第八处理模块,该第八处理模块包括:第二确定单元,用于确定语法树的返回类型;第二转换单元,用于基于返回类型对语法树进行结构转换,得到语法树的转换结果,其中,语法树的转换结果用于反映语法树的结构化程度。
根据本发明实施例的另一个方面,提供了一种电子设备,该电子设备包括:处理器,以及存储程序的存储器,程序包括指令,指令在由处理器执行时使处理器执行本发明实施例的API的生成方法。
本发明实施例还提供一种存储有计算机程序的非瞬时机器可读介质,其中,上述计算机程序在被计算机的处理器执行时用于使上述计算机执行本发明实施例的API的生成方法。
本发明实施例还提供一种计算机程序产品,包括计算机程序,其中,计算机程序在被计算机的处理器执行时用于使计算机执行本发明实施例的API的生成方法。
参考图3,现将描述可以作为本发明实施例的服务器或客户端的电子设备的结构框图,其是可以应用于本发明的各方面的硬件设备的示例。电子设备旨在表示各种形式的数字电子的计算机设备,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本发明的实现。
如图3所示,电子设备包括计算单元301,其可以根据存储在只读存储器(ROM)302中的计算机程序或者从存储单元308加载到随机访问存储器(RAM)303中的计算机程序,来执行各种适当的动作和处理。在RAM 303中,还可存储电子设备操作所需的各种程序和数据。计算单元301、ROM 302以及RAM 303通过总线304彼此相连。输入/输出(I/O)接口305也连接至总线304。
电子设备中的多个部件连接至I/O接口305,包括:输入单元306、输出单元307、存储单元308以及通信单元309。输入单元306可以是能向电子设备输入信息的任何类型的设备,输入单元306可以接收输入的数字或字符信息,以及产生与电子设备的用户设置和/或功能控制有关的键信号输入。输出单元307可以是能呈现信息的任何类型的设备,并且可以包括但不限于显示器、扬声器、视频/音频输出终端、振动器和/或打印机。存储单元308可以包括但不限于磁盘、光盘。通信单元309允许电子设备通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据,并且可以包括但不限于调制解调器、网卡、红外通信设备、无线通信收发机和/或芯片组,例如蓝牙设备、WiFi设备、WiMax设备、蜂窝通信设备和/或类似物。
计算单元301可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元301的一些示例包括但不限于CPU、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元301执行上文所描述的各个方法和处理。例如,在一些实施例中,本发明的方法实施例可被实现为计算机程序,其被有形地包含于机器可读介质,例如存储单元308。在一些实施例中,计算机程序的部分或者全部可以经由ROM 302和/或通信单元309而被载入和/或安装到电子设备上。在一些实施例中,计算单元301可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行上述的方法。
用于实施本发明实施例的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得计算机程序当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明实施例的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读信号介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
需要说明的是,本发明实施例使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。本发明实施例中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本发明实施例所提供的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本发明的保护范围在此方面不受限制。
“实施例”一词在本说明书中指的是结合实施例描述的具体特征、结构或特性可以包括在本发明的至少一个实施例中。该短语出现在说明书中的各个位置并不一定意味着相同的实施例,也不意味着与其它实施例相互排斥而具有独立性或可供选择。本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见。尤其,对于装置、设备、系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对专利保护范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明的保护范围应以所附权利要求为准。

Claims (9)

1.一种应用程序编程接口API的生成方法,其特征在于,包括:
确定结构化查询语句SQL,并将所述SQL解析成语法树,其中,所述SQL用于查询待查询数据;
获取所述SQL关联的表信息和所述表信息对应的字段信息,并从所述SQL的数据源中获取所述字段信息对应的元数据信息;
基于所述语法树中条件表达式所在的位置和所述字段信息对应的元数据信息对所述待查询数据进行类型转换,得到转换后的待查询数据;
修正所述语法树的节点,并将修正后的语法树转化成可执行的SQL;
基于所述可执行的SQL生成API,其中,所述API用于访问所述转换后的待查询数据;
所述方法还包括:获取分页参数;构建所述分页参数的节点;将所述分页参数的节点将插入到所述修正后的语法树;其中,所述分页参数包括页码、每页返回多少条数据。
2.根据权利要求1所述的一种应用程序编程接口API的生成方法,其特征在于,确定结构化查询语句SQL,包括:
获取统一资源标识符URI地址,其中,每个所述URI地址与一个所述SQL相对应;
基于所述URI地址路由到对应的所述SQL。
3.根据权利要求1所述的一种应用程序编程接口API的生成方法,其特征在于,基于所述语法树中条件表达式所在的位置和所述字段信息对应的元数据信息对所述待查询数据进行类型转换,得到转换后的待查询数据,包括:
基于所述语法树中条件表达式所在的位置对所述待查询数据的参数进行转换,得到参数转换后的待查询数据;
基于所述字段信息对应的元数据信息对所述待查询数据的参数类型进行转换,得到参数类型转换后的待查询数据;
根据参数转换后的待查询数据和所述参数类型转换后的待查询数据,生成所述转换后的待查询数据。
4.根据权利要求1所述的一种应用程序编程接口API的生成方法,其特征在于,修正所述语法树的节点,包括:
针对第一类型参数的节点,将第一类型参数的节点从所述语法树的节点中移除,其中,所述第一类型参数为非必填且未传递的参数;和/或,
针对第二类型参数的节点,将所述语法树中所述第二类型参数的节点替换为恒非等表达式,其中,所述第二类型参数为空数组。
5.根据权利要求1所述的一种应用程序编程接口API的生成方法,其特征在于,将修正后的语法树转化成可执行的SQL,包括:
将修正后的语法树转化成目标SQL;
将所述目标SQL中的占位符替换为预定的占位符,并将所述转换后的待查询数据转化成具有次序的数组,得到所述可执行的SQL。
6.根据权利要求1所述的一种应用程序编程接口API的生成方法,其特征在于,所述方法还包括:
确定所述待查询数据的请求方式,其中,所述请求方式用于指示数据传输的形式;
根据所述请求方式获取待查询参数;
将待查询参数转换成具有预定键值对结构的参数,得到所述待查询数据,其中,所述预定键值对结构中的每一个键对应至少一个值。
7.根据权利要求1至6任一项所述的一种应用程序编程接口API的生成方法,其特征在于,所述方法还包括:
确定所述语法树的返回类型;
基于所述返回类型对所述语法树进行结构转换,得到所述语法树的转换结果,其中,所述语法树的转换结果用于反映所述语法树的结构化程度。
8.一种API的生成装置,其特征在于,包括:
第一处理模块,用于确定结构化查询语句SQL,并将所述SQL解析成语法树,其中,所述SQL用于查询待查询数据;
第二处理模块,用于获取所述SQL关联的表信息和所述表信息对应的字段信息,并从所述SQL的数据源中获取所述字段信息对应的元数据信息;
第三处理模块,用于基于所述语法树中条件表达式所在的位置和所述字段信息对应的元数据信息对所述待查询数据进行类型转换,得到转换后的待查询数据;
第四处理模块,用于修正所述语法树的节点,并将修正后的语法树转化成可执行的SQL;
第五处理模块,用于基于所述可执行的SQL生成API,其中,所述API用于访问所述转换后的待查询数据;
所述装置还包括第六处理模块,该第六处理模块包括:第二获取单元,用于获取分页参数;构建单元,用于构建所述分页参数的节点;插入单元,用于将所述分页参数的节点将插入到所述修正后的语法树;其中,所述分页参数包括页码、每页返回多少条数据。
9.一种电子设备,包括:处理器,以及存储程序的存储器,其特征在于,所述程序包括指令,所述指令在由所述处理器执行时使所述处理器执行权利要求1至7中任一项所述的API的生成方法。
CN202311657374.6A 2023-12-06 2023-12-06 一种应用程序编程接口api的生成方法、装置和电子设备 Active CN117349332B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311657374.6A CN117349332B (zh) 2023-12-06 2023-12-06 一种应用程序编程接口api的生成方法、装置和电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311657374.6A CN117349332B (zh) 2023-12-06 2023-12-06 一种应用程序编程接口api的生成方法、装置和电子设备

Publications (2)

Publication Number Publication Date
CN117349332A CN117349332A (zh) 2024-01-05
CN117349332B true CN117349332B (zh) 2024-03-01

Family

ID=89367125

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311657374.6A Active CN117349332B (zh) 2023-12-06 2023-12-06 一种应用程序编程接口api的生成方法、装置和电子设备

Country Status (1)

Country Link
CN (1) CN117349332B (zh)

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111651468A (zh) * 2020-05-29 2020-09-11 中国平安财产保险股份有限公司 基于sql解析的数据更新方法、装置、电子设备及存储介质
CN113448985A (zh) * 2021-07-19 2021-09-28 北京自如信息科技有限公司 一种api接口生成方法、调用方法、装置及电子设备
CN114003583A (zh) * 2021-10-28 2022-02-01 建信金融科技有限责任公司 一种目标格式数据请求体的构建方法、装置、介质及设备
CN114764558A (zh) * 2021-01-14 2022-07-19 京东科技控股股份有限公司 一种sql方言转换方法、装置、系统及存储介质
CN116185391A (zh) * 2023-01-16 2023-05-30 杭州遥望网络科技有限公司 应用程序编程接口生成方法、装置、设备及存储介质
CN116361328A (zh) * 2023-03-31 2023-06-30 北京兰云科技有限公司 一种使用转换sql语句查询数据的方法和装置
CN116483850A (zh) * 2022-01-14 2023-07-25 腾讯科技(深圳)有限公司 数据处理方法、装置、设备以及介质
CN116955399A (zh) * 2023-07-26 2023-10-27 四川新网银行股份有限公司 基于Calcite的统一SQL查询方法、系统及介质
CN117033348A (zh) * 2023-08-23 2023-11-10 中电金信软件有限公司 Sql转换方法、装置、计算机设备和存储介质
CN117093599A (zh) * 2023-08-23 2023-11-21 南京邮电大学 面向异构数据源的统一sql查询方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11188531B2 (en) * 2018-02-27 2021-11-30 Elasticsearch B.V. Systems and methods for converting and resolving structured queries as search queries
CN111897891B (zh) * 2020-06-19 2023-06-13 阿里云计算有限公司 数据处理方法及装置
CN112069201A (zh) * 2020-09-04 2020-12-11 北京百度网讯科技有限公司 目标数据的获取方法和装置
EP4030313A1 (en) * 2021-01-13 2022-07-20 Sage Global Services Limited Sql statement generator

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111651468A (zh) * 2020-05-29 2020-09-11 中国平安财产保险股份有限公司 基于sql解析的数据更新方法、装置、电子设备及存储介质
CN114764558A (zh) * 2021-01-14 2022-07-19 京东科技控股股份有限公司 一种sql方言转换方法、装置、系统及存储介质
CN113448985A (zh) * 2021-07-19 2021-09-28 北京自如信息科技有限公司 一种api接口生成方法、调用方法、装置及电子设备
CN114003583A (zh) * 2021-10-28 2022-02-01 建信金融科技有限责任公司 一种目标格式数据请求体的构建方法、装置、介质及设备
CN116483850A (zh) * 2022-01-14 2023-07-25 腾讯科技(深圳)有限公司 数据处理方法、装置、设备以及介质
CN116185391A (zh) * 2023-01-16 2023-05-30 杭州遥望网络科技有限公司 应用程序编程接口生成方法、装置、设备及存储介质
CN116361328A (zh) * 2023-03-31 2023-06-30 北京兰云科技有限公司 一种使用转换sql语句查询数据的方法和装置
CN116955399A (zh) * 2023-07-26 2023-10-27 四川新网银行股份有限公司 基于Calcite的统一SQL查询方法、系统及介质
CN117033348A (zh) * 2023-08-23 2023-11-10 中电金信软件有限公司 Sql转换方法、装置、计算机设备和存储介质
CN117093599A (zh) * 2023-08-23 2023-11-21 南京邮电大学 面向异构数据源的统一sql查询方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Designing Data Permissions in the Enterprise Application Environment;Ying Yuan 等;2023 4th International Seminar on Artificial Intelligence, Networking and Information Technology (AINIT);20230821;第550-555页 *
树状结构大数据类型的高效支持;陈世敏;;大数据;20180715(04);第35-43页 *

Also Published As

Publication number Publication date
CN117349332A (zh) 2024-01-05

Similar Documents

Publication Publication Date Title
CN110704479A (zh) 任务处理方法、装置、电子设备及存储介质
WO2020233367A1 (zh) 区块链数据存储和查询方法、装置、设备及存储介质
WO2019210758A1 (zh) 数据保护方法、装置及存储介质
US9058360B2 (en) Extensible language framework using data cartridges
CN110555030A (zh) 一种sql语句的处理方法和装置
CN111309751A (zh) 大数据处理方法及装置
CN114090613A (zh) 程序语句转换方法、装置、设备及存储介质
CN111221852A (zh) 基于大数据的混合查询处理方法及装置
US11429428B2 (en) Invoking functions of agents via digital assistant applications using address templates
CN113900944A (zh) 一种应用于Flink SQL的逻辑验证方法和装置
CN116483850A (zh) 数据处理方法、装置、设备以及介质
CN111221888A (zh) 大数据分析系统及方法
CN117349332B (zh) 一种应用程序编程接口api的生成方法、装置和电子设备
WO2023092981A1 (zh) 流式数据处理方法、规则插件、流式数据处理模块及系统
CN112883088A (zh) 一种数据处理方法、装置、设备及存储介质
WO2021259290A1 (zh) 存储过程转换方法、装置、设备和存储介质
CN111221841A (zh) 基于大数据的实时处理方法及装置
CN114281842A (zh) 一种数据库分表查询的方法及设备
CN114003583A (zh) 一种目标格式数据请求体的构建方法、装置、介质及设备
CN115437906A (zh) 测试方法和装置
US10469319B2 (en) Certification tool gap analyzer
CN116089476B (zh) 数据查询方法、装置及电子设备
CN112035416A (zh) 数据血缘分析方法、装置、电子设备及存储介质
CN116795663B (zh) 一种跟踪分析trino引擎执行性能的方法
CN114489682B (zh) nginx配置文件的操作方法、装置和设备

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
GR01 Patent grant
GR01 Patent grant