【问题标题】:creating query back from parsed hive ASTNode从解析的配置单元 ASTNode 创建查询
【发布时间】:2015-04-28 09:59:35
【问题描述】:

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

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

【问题讨论】:

  • 我也有同样的要求。你是怎么解决的?

标签: parsing hive antlr


【解决方案1】:

我修改配置单元查询的经验:
我还想以编程方式修改配置单元查询,例如 获取查询中访问的表,更改 where 子句以添加附加条件,引入附加连接等。 在最初尝试使用 antlr3(配置单元解析器使用)并尝试修改 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)

【讨论】:

  • 谢谢!这有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
  • 1970-01-01
  • 2016-05-30
相关资源
最近更新 更多