Spark SQL表达式解析器-Scala Parser与Antlr4
版权声明:本文为博主原创文章,未经博主允许不得转载。
手动码字不易,请大家尊重劳动成果,谢谢
Spark SQL之所以能支持如此强大的表达式系统,是因为其包含了一套字符串解析并生成表达式树的模块。
Scala Parser
在Spark 2.0之前,Spark SQL使用Scala Parser功能去解析SQL表达式,其解析类为org.apache.spark.sql.catalyst.SqlParser。
对于没用使用过Scala Parser的人来讲,这个类基本上就可以称为天书了。其中用到的几个基本符号:
~ 连接符,并将左右侧匹配结果保留
~> 连接符,仅保留右侧匹配结果,左侧将丢弃
<~ 连接符,仅保留左侧匹配结果,右侧将丢弃。该连接符优先级低于 ~ 和 ~>
^^ 其左侧为词法表达式,右侧为一个函数
例如:p1 ~ p2 ^^ { case a ~ b => a + b }
这个表达式可以把p1和p2匹配出的结果分别赋值给a和b,
注意:此处的前后两个 ~ 不是同一个函数; ^^ 左右匹配结果的数量必须一致
? 和正则表达式中一样,表示可有可无
* 和正则表达式中一样,表示可以有零个或多个
*(

本文介绍了Spark SQL如何利用Scala Parser和Antlr4解析SQL表达式。在Spark 2.0之前,使用Scala Parser,之后转向Antlr 4。Antlr 4提供Visitor和Listener模式,方便处理解析后的语法树。文中还分享了作者使用Antlr 4创建表达式解析器的经验,并推荐使用Antlr 4的IDEA插件进行测试。
最低0.47元/天 解锁文章
6524

被折叠的 条评论
为什么被折叠?



