如何使用 Java API 将配置单元字符串查询转换为抽象语法树?
How to convert a hive string query into abstract syntax tree using Java API?
我知道我可以使用 explain extended command 获得 AST。我的问题是,如何使用 Java API 获得相同的结果。
我的目标是获取以下有关查询的数据:
- 数据库源和目标(如果应用)。
- Table 源和目标(如果应用)。
- 查询涉及的字段。
我知道我可以使用 Regex 直接从查询字符串中获取上面的数据,但我想使用 Java API。
您还有其他想法吗?
您可以为此使用 Hive Parser。它只是接受查询并将其转换为类似于 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>
我知道我可以使用 explain extended command 获得 AST。我的问题是,如何使用 Java API 获得相同的结果。 我的目标是获取以下有关查询的数据:
- 数据库源和目标(如果应用)。
- Table 源和目标(如果应用)。
- 查询涉及的字段。
我知道我可以使用 Regex 直接从查询字符串中获取上面的数据,但我想使用 Java API。 您还有其他想法吗?
您可以为此使用 Hive Parser。它只是接受查询并将其转换为类似于 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>