python解析sql字段血缘_系列:用python+antlr解析hive sql获得数据血缘关系(三)
目标
系列第二篇里利用了HiveParser.g里的pushMsg输出信息,但还没有得到AST(Abstract Syntax Tree抽象语法树 ),不够实用。除了得到AST之外,第二篇末尾还需要解决下面这3个实用性问题
token的大小写问题, Hive里select 和SELECT都能接受
分号问题,也就是必须能解析一个字符串里包含多个sql语句的情况
解析规则,类似insert-select这种hive里接受,但HiveParser.g文件里没有定义的情况
本篇先说清楚如何解决得到AST的问题,然后解决insert-select的实用性
得到AST
上一篇的代码其实已经走到了临门一脚。作为解析入口的parser.statement()这个方法是有返回值的,默认生成的返回类型是自动生成的一个类, HiveParser.statement_return, AST 就藏在这个类里,可以通过这个类的getTree(),得到一个类型为CommonTree 的对象。用python代码拿到这个CommonTree的代码如下
import jnius_config
jnius_config.set_classpath('./','./grammar/hive110/antlr-3.4-complete.jar')
import jnius
StringStream = jnius.autoclass('org.antlr.runtime.ANTLRStringStream')
Lexer = jnius.autoclass('grammar.hive110.HiveLexer')
Parser = jnius.autocla
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
