如何使用Java API将hive字符串查询转换为抽象语法树?

时间:2015-09-30 21:04:54

标签: java regex hadoop hive abstract-syntax-tree

我知道我可以使用explain extended command获取AST。我的问题是,如何使用Java API获得相同的功能。 我的目标是获取有关查询的以下数据:

  • 数据库源和目标(如果已应用)。
  • 表源和目标(如果应用)。
  • 查询中涉及的字段。

我知道我可以使用Regex直接从查询字符串获取数据,但我想使用Java API。 你还有其他想法怎么做吗?

1 个答案:

答案 0 :(得分:0)

您可以使用Hive Parser。它只需要查询并将其转换为AST,这与解释命令类似。这是一个简单的例子:

ParseDriver pd = new ParseDriver();
ASTNode tree = pd.parse("Select * from table1");
System.out.println(tree.dump());

此输出将为

 nil
   TOK_QUERY
      TOK_FROM
         TOK_TABREF
            TOK_TABNAME
               table1
      TOK_INSERT
         TOK_DESTINATION
            TOK_DIR
               TOK_TMP_FILE
         TOK_SELECT
            TOK_SELEXPR
               TOK_ALLCOLREF
   <EOF>