从解析的配置单元ASTNode创建查询

时间:2015-04-28 09:59:35

标签: parsing hive antlr

以编程方式修改配置单元查询 - 我正在使用ParseDriver.parse()方法解析hive查询以获取解析的ASTNode树。用例为行级安全性添加一些where子句。

现在我已经修改了解析树,是否有任何现有方法将其转换回hive查询字符串?我知道修改解析树可能会产生问题,因为它也存储了原始字符串的索引。一种方法是对树进行手动遍历并构造字符串,

1 个答案:

答案 0 :(得分:4)

我修改配置单元查询的经验:
       我还想以编程方式修改hive查询 获取查询中访问的表,更改where子句以添加其他条件,引入其他连接等。       在最初尝试使用antlr3(hive解析器使用)并尝试修改AST之后,我意识到我想要做的事情可以很容易地用antlr4实现。      所以我开始将现有的hive语法修改为antlr4只是为了意识到一个好的撒玛利亚人已经做到了这一点:https://github.com/apache/tajo/tree/branch-0.8.1/tajo-core/src/main/antlr4/org/apache/tajo/engine/parser。      所以;之后,这是一个得到antlr4书以获得更多东西的问题;使用antlr插件从pom生成源,扩展生成的侦听器并使用TokenRewriteStream来修改查询。      此外,如果您有消失空间的问题,您可能需要稍微修改语法:ANTLR4: TokenStreamRewriter output doesn't have proper format (removes whitespaces)