java sqlparse ast树,HiveSql解析(基于AST)

本文介绍了一个名为`HiveSqlParse`的类,用于解析Hive SQL语句,通过Apache的Hive `ParseDriver`进行解析并生成抽象语法树(AST)。类中包含了对源表、插入表、最外层列、插入分区信息等关键元素的处理方法,以理解SQL的结构和操作。示例代码展示了如何解析包含插入和分区的复杂SQL语句。
摘要由CSDN通过智能技术生成

1 importcom.google.common.base.Joiner;2 importcom.google.common.collect.Lists;3 importcom.google.common.collect.Maps;4 importlombok.extern.slf4j.Slf4j;5 importorg.apache.commons.collections.CollectionUtils;6 importorg.apache.hadoop.hive.ql.lib.Node;7 importorg.apache.hadoop.hive.ql.parse.ASTNode;8 importorg.apache.hadoop.hive.ql.parse.ParseDriver;9

10 import java.util.*;11 importjava.util.stream.Collectors;12

13 import static org.apache.hadoop.hive.ql.parse.HiveParser.*;14

15 /**

16 *@authorchentiefeng17 * @date 2019/10/21 13:5118 */

19 @Slf4j20 public classHiveSqlParse {21 private ParseDriver pd = newParseDriver();22 /**

23 * 原始表(表名,别名)24 */

25 private List sourceTable =Lists.newArrayList();26 /**

27 * 插入表28 */

29 private List insertTables =Lists.newArrayList();30 /**

31 * 最外层列32 */

33 private List outermostColumns =Lists.newArrayList();34 /**

35 * 插入分区信息(分区列,分区值)36 */

37 private Map partitionMap =Maps.newHashMap();38 /**

39 * 最外层Sel节点40 */

41 private ASTNode outermostSelNode = null;42 /**

43 * 最外层Insert节点44 */

45 private ASTNode outermostInsertNode = null;46 /**

47 * 放置 解析表栈48 */

49 private Stack tableParseInfoSelStack = new Stack<>();50 private Stack tableParseInfoFromStack = new Stack<>();51 /**

52 * 表关系解析信息,不包含原始表53 */

54 private HiveTableParseInfo tableParseInfo = null;55

56 publicHiveSqlParse() {57 }58

59 publicHiveSqlParse(String sql) {60 parse(sql);61 }62

63 /**

64 * sql解析65 *66 *@paramsql67 */

68 public voidparse(String sql) {69 try{70 ASTNode ast =pd.parse(sql);71 log.info("hiveSql={},astTree={}", sql, ast.toStringTree());72 parseNode(ast);73 insert(outermostInse

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值