您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

什么是 SQLScript?

SQLScript 背后的动机是将数据密集型应用程序逻辑嵌入到数据库中。目前,应用程序使用 SQL 仅将非常有限的功能卸载到数据库中,大多数应用程序逻辑通常在应用服务器上执行。其影响是,需要将要进行操作的数据从数据库复制到应用程序服务器,反之亦然。在执行数据密集型逻辑时,就处理器和数据传输时间而言,这种数据复制可能非常昂贵。此外,使用 ABAP 或 JAVA 等命令语言处理数据时,开发人员倾向于编写遵循一次性语义(例如,对表中的行循环)的算法。但是,与声明性集导向型语言(如 SQL)相比,这些算法很难进行优化和并行化。

SAP HANA 数据库针对现代技术趋势进行了优化,并利用了现代硬件,例如,将数据驻留在主内存中并允许多核 CPU 上大规模并行化。SAP HANA 数据库的目标是通过使用此类硬件来支持应用程序需求。SAP HANA 数据库向应用程序公开了一个非常复杂的界面,由多种语言组成。这些语言的可表达性远远超出了 OpenSQL 所能实现的。SAP HANA 数据库的 SQL 扩展集(允许开发人员将数据密集型逻辑推送到数据库)称为 SQLScript。从概念上讲,SQLScript 与 SQL 标准中定义的存储过程相关,但 SQLScript 旨在提供卓越的优化可能性。SQLScript 应在 SAP HANA 的其他建模结构(例如分析视图或属性视图)不足时使用。有关如何以最佳方式利用不同视图类型的详细信息,请参阅“利用基础引擎”。

SQL 扩展集是避免大量将数据复制到应用服务器以及利用数据库的复杂并行执行策略的关键。SQLScript 可解决以下问题:

  • 只能使用视图执行分解 SQL 查询。但是,当通过使用视图分解复杂查询时,所有中间结果都可见,并且必须显式键入。此外,无法参数化 SQL 视图,这会限制其重用。特别是,它们只能像表一样使用,并嵌入到其它 SQL 语句中。

  • SQL 查询没有表示业务逻辑的功能(例如,复杂的货币转换)。因此,此类业务逻辑无法下推到数据库中(即使它主要基于 SUM(销售)等标准聚合)。

  • SQL 查询一次只能返回一个结果。因此,必须将相关结果集的计算拆分为单独的、通常不相关的查询。

  • 由于 SQLScript 鼓励开发人员使用面向集的范例实施算法,而不使用一次一元范式,因此需要命令逻辑,例如通过迭代近似算法。因此,可以将存储过程中已知的命令构造与声明结构混合。