有没有适用于Hive的SQL查询解析器?

3

我有一个非常复杂的查询,包含多个子句,例如"group by"、"order by"、子查询等。是否有任何Hive SQL解析器可以用来捕获查询中的这些标记?我找不到任何适当的库来实现这一点。感谢您的建议!


Hive接受SQL查询。你遇到了什么问题? - Gordon Linoff
我知道这点,而且我已经有一个 SQL 查询了。但是我想对它进行标记化并提取例如按列分组的部分,我该如何提取呢? - A srinivas
2个回答

3
请查看 tobymao/sqlglot,特别是关于 #Metadata 的部分。
例如,
from sqlglot import parse_one, exp
for gb in parse_one("SELECT foo, count(bar) FROM baz GROUP BY foo").find_all(exp.Group):
  print(gb)

打印

按照 foo 分组


它可以完美地打印表名,但是它没有打印数据库名称。例如,如果查询是“select ff from db.tb”,它只会返回tb。它会忽略数据库db。 - A srinivas
@Asrinivas,对象模型确实包含数据库。parse_one("select ff from db.tb").find_all(exp.From)将返回一个对象生成器。它们的类型为sqlglot.expressions.Table,并且如果指定了数据库,则它们包含数据库。for from_clause in parse_one("select ff from db.tb").find_all(exp.From): print(from_clause)
FROM db.tb
- Walt Elder

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接