使用Facebook Presto SQL Parser生成SQL语句

问题描述

我正在努力使用Presto Parser生成sql语句。这是用例的详细信息-

  1. 解析使用外部生成的现有sql语句 前端ui(nodejs应用)。
  2. 追加新列和where子句条件。
  3. 重新生成sql语句。这些sql将在Hive / Spark上执行。

到目前为止,我使用Facebook Presto parser在第1步和第2步上取得了成功,还无法弄清楚如何生成sql

我可以使用其他一些库来生成sql吗?任何建议都将不胜感激。

解决方法

您可以使用SqlFormatter类(https://github.com/prestosql/presto/blob/master/presto-parser/src/main/java/io/prestosql/sql/SqlFormatter.java)将已解析的语法树转换回SQL文本:

SqlParser parser = new SqlParser();
Statement statement = parser.createStatement("SELECT * FROM t WHERE v = 0",new ParsingOptions());
String formatted = SqlFormatter.formatSql(statement);

请记住,这些不是Presto中的公共API,并且会随时更改。