最近在实时数仓,基本的流程图如下:
我们采用 Antl4 来进行 Mysql 的解析,从效率上来说,解析速度确实有点慢,但简单易于上手,MySqlLexer.g4 和 MySqlParser.g4 都是开源的,所以就可以直接拿来用了。

在这个过程当中遇到了一个问题: antl4 如何返回对象?看到 antl4资料有点少,特地记一下。
我们都知道,Antl4 要想返回值需要采用 visitor 模式,然后定义 MysqlVisitor 类 实现MySqlParserBaseVisitor<T>

在此我们实现MySqlParserBaseVisitor<List<AlterBase> (其中AlterBase,为我们自定义的超类,可以不予关心)。而MySqlParserBaseVisitor 有一个方法叫做 aggregateResult,可以把前后多次对语法树遍历的结果进行 aggregate,示例代码如下:

@Overrideprotected List<AlterBase> aggregateResult(List<AlterBase> aggregate, List<AlterBase> nextResult) {//      return (aggregate==null?"":aggregate)+(nextResult==null?"":nextResult);if (aggregate == null) {aggregate = new ArrayList<>();}if (nextResult == null) {nextResult = new ArrayList<>();}aggregate.addAll(nextResult);return aggregate;}

然后执行,相应代码即可返回 List<AlterBase> 对象。

后记:
Antl4 全称为 Another Tool For Language Recognition 4,语言识别的另外一种工具,为什么叫另外一种工具呢?我的理解,最原生的语言识别工具其实是编译器,通过学习 Antl4 对编译器有一个更加感性的认知,以实时数仓项目为例,Antl4就是一些列的规则组合,把 SQL 语句解析成语法树 ( 编译器也是解析成语法树 ) ,然后通过对语法树的遍历,得到我们自己想要的数据,比如 将 Mysql 的 SQL 解析成 Kudu的 建表、更新、插入等语句。与 Spark SQL 如何转换为 RDD 计算的基本类似,只不过它的转换可能会更加复杂一些 ( Spark SQL 2.x 也是采用 Antl4 解析 SQL 的,这也是我们在项目中采用它的原因之一) ,而 Flink SQL 采用的是 Calcite 来解析 SQL,应该也具有异曲同工之妙。

Antl4 访问者模式返回对象相关推荐

  1. 行为型:设计模式之访问者模式(二十三)

    想必大家都去过医院,虽然没有人喜欢去医院(爱岗敬业的医务工作人员除外,).在医生开具处方单(药单)后,很多医院都存在如下处理流程:划价人员拿到处方单之后根据药品名称和数量计算总价,药房工作人员根据药品 ...

  2. 《JAVA与模式》之访问者模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述访问者(Visitor)模式的: 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要 ...

  3. Java设计模式之行为型:访问者模式

    背景: 去医院看病时,医生会给你一个处方单要你去拿药,拿药我们可以分为两步走: (1)去柜台交钱,划价人员会根据处方单上的药进行划价,交钱. (2)去药房拿药,药房工作者同样根据处方单给你相对应的药. ...

  4. 设计模式--23、访问者模式

    访问者模式是一种较为复杂的行为型设计模式,它包含访问者和被访问元素两个主要组成部分,这些被访问的元素通常具有不同的类型,且不同的访问者可以对它们进行不同的访问操作.例如处方单中的各种药品信息就是被访问 ...

  5. java的visitor模式_java设计模式(二十一)访问者模式(Visitor)

    介绍 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作.访问者模式是一种对象行为型模式. 简单来 ...

  6. Java描述设计模式(23):访问者模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 电竞是游戏比赛达到"竞技"层面的体育项目.利用电子设备作为运动器械进行的.人与人之间的智力对抗 ...

  7. 访问者模式的java语言_Java 设计模式系列(二三)访问者模式(Vistor)

    Java 设计模式系列(二三)访问者模式(Vistor) 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以 ...

  8. 由电脑专卖系统引发的Java设计模式:访问者模式

    访问者模式 定义 意图 解决问题 何时使用 优缺点 结构 电脑专卖系统 定义 访问者模式是对象的行为型模式,它的目的是封装一些施加于某些数据结构元素之上的操作,一旦这些操作需要修改的话,接收这个操作的 ...

  9. 【设计模式】访问者模式

    设计模式总结链接 访问者模式是对象的行为模式.访问者模式的目的是封装一些施加于某种数据结构元素之上的操作.一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变. 一.简解 访问者模式是和向上 ...

最新文章

  1. java bean 绑定,在 Java 应用程序中绑定 Bean 和数据
  2. centos 安装php5.6
  3. r语言如何写入一个excel_R语言如何进行聚类分析?
  4. Mysql基础知识—索引
  5. 小站教育携手神策数据,数据赋能留学语言培训教育的智能化探索
  6. 关于重构之Switch的处理【二】
  7. 《事实:用数据思考,避免情绪化决策》笔记
  8. fpga烧写bin文件_Altera FPGA烧写步骤及注意事项_骏龙科技
  9. mysql sql trace_用MySQL的optimizer_trace进行sql调优
  10. Android蓝牙开发教程(三)——蓝牙设备相互通讯
  11. 很多免费的编程电子书
  12. python字符串str拼接
  13. c语言上机调试步骤,C语言上机环境与上机调试.ppt
  14. Keychain-Dumper的安装,签名与使用
  15. 品牌和爱情,原理是一样的
  16. 使用Selenium爬取网易云音乐的所有排行榜歌曲
  17. 盘符修改后,node重装一顿操作猛如虎
  18. 关于男人女人的经典感悟
  19. 海盗喝啤酒问题Java解法
  20. 越吃越年轻的26种抗衰老食物

热门文章

  1. 分享9条经典的编程语录
  2. Jquery表单插件ajaxForm用法详解
  3. Asus Music Now is not installed
  4. 超低时延交换机,让Infiniband交换机不再是唯一的选择
  5. 数据处理方法整理【目前最全】
  6. python报告的创新点_工作报告之论文开题报告创新点
  7. 【论文阅读】【3d目标检测】FAST pointrcnn
  8. OWIN+WebAPI上传文件
  9. java poi word 复制_Java 使用POI填充Word表格内容和复制模板行属性方法示例代码
  10. 为什么我成为了一名程序员?