如何使用JavaAPI将配置单元字符串查询转换为抽象语法树?

piok6c0g  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(270)

我知道我可以使用explain扩展命令获得ast。我的问题是,如何使用javaapi获得相同的结果。我的目标是获取有关查询的以下数据:
数据库源和目标(如果应用)。
表源和目标(如果应用)。
查询中涉及的字段。
我知道我可以使用regex直接从查询字符串获取上面的数据,但是我想使用javaapi。你还有别的办法吗?

fdx2calv

fdx2calv1#

您可以使用配置单元解析器进行此操作。它只需接受查询并将其转换为类似于explain命令的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>

相关问题