系列:用python+antlr解析hive sql获得数据血缘关系(三)

该博客讲述了如何通过ANTLR和Python解析Hive SQL,以获取AST并解决实际问题,如token大小写、多SQL语句解析和insert-select的处理。作者提供了从AST获取表名和列名的方法,并指出了在处理insert-select时的错误及其修正方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标

系列第二篇里利用了HiveParser.g里的pushMsg输出信息,但还没有得到AST(Abstract Syntax Tree抽象语法树 ),不够实用。除了得到AST之外,第二篇末尾还需要解决下面这3个实用性问题

  1. token的大小写问题, Hive里select 和SELECT都能接受
  2. 分号问题,也就是必须能解析一个字符串里包含多个sql语句的情况
  3. 解析规则,类似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  =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值