关键词:
PL/SQL解释器
函数
游标
异常处理
摘要:
构建于传统企业级数据仓库之上的应用系统大都采用SQL结构化查询语言来访问数据,并广泛使用PL/SQL(Procedural Language/SQL,过程化SQL语言)来实现复杂业务逻辑。在大数据时代,基于传统关系型数据库或大规模并行处理架构建设的数据仓库已无法满足企业对于海量数据的处理需求,企业亟需将传统数仓应用平滑迁移至大数据平台。但是大部分现有大数据平台的数仓解决方案对于SQL语言的支持力度不够,更缺乏对PL/SQL语言的支持,这给此类应用的迁移带来了极大的不便。Inceptor是星环公司基于大数据平台开发的面向批量处理和交互式分析的新型数据库,可用于构建PB级数据仓库。作为现有大数据平台的数仓解决方案之一,Inceptor已实现SQL 2003标准的高度支持,并着手开发PL/SQL解释器以实现自身对于PL/SQL语言的支持。但是目前该解释器的开发还处于初步阶段,对于PL/SQL语法的支持尚不完善,因此Inceptor也同样存在对PL/SQL语言支持不足的问题。针对上述问题,本文基于Inceptor PL/SQL解释器设计实现了函数、游标和异常处理及其相关的语法功能。具体语法功能的开发与解释器的整体设计及其使用的技术息息相关。该解释器处理PL/SQL程序的过程可划分为编译和执行两个阶段:编译阶段完成程序的词法、语法和语义解析并生成中间表示,包括语法结构的中间表示和程序的中间代码;执行阶段实现中间代码的解释执行。该解释器借鉴Hive的运行原理对PL/SQL程序的编译执行流程进行设计;采用开源的语言识别工具Antlr构建PL/SQL的词法和语法解析器;选择抽象语法树作为PL/SQL语法结构的中间表示形式;采取解释执行PL/SQL程序的方式并选用树遍历式解释器和执行树结构的中间代码作为具体实现方案;参照包含进程、函数调用栈和栈帧在内的操作系统的相关概念设计解释器的运行时模块。本文主要从PL/SQL解释器总体规划的分析入手,阐述了PL/SQL的中间表示在抽象层次的设计、解释器的整体架构以及构建PLBlock(PL/SQL程序源码的中间代码表示)编译和执行模块的需求,并对笔者重点实现的语法功能进行了需求分析,接着详细描述了PLBlock的编译和执行模块以及前述语法功能的设计与实现,主要包括函数、游标和异常处理及其相关的语法功能。目前这些语法功能已被集成至Inceptor PL/SQL解释器中,经过多次内部迭代测试和POC测试,PL/SQL解释器在功能上更加稳定和完善,可支持企业级数仓应用中PL/SQL程序的运行。对PL/SQL解释器语法功能支持不足的完善提升了Inceptor对于SQL完整度的支持,有利于增强Inceptor在同类型产品市场中的竞争力。