我正在尝试使用presto-parser 。我需要知道的是如何分析和提取创建的 Statement
的查询正文:
SqlParser SQL_PARSER = new SqlParser();
Statement statement = SQL_PARSER.createStatement(query);
似乎没有任何方法可以从 Statement
getters/setters 中获取它。我调试了 Statement 对象,我可以从调试 View 中看到我需要获取的值。
参见:
我需要获取由 SqlParser 提取的 select、from、where、groupBy、orderBy 和 limit 值。
最佳答案
从sql字符串中,您可以通过向下转换Statement
来获取Query
(它扩展了Statement)。 Query.getQueryBody
返回一个 QueryBody
,您可以将其转换为 QuerySpecification
(它扩展了 QueryBody
)。现在,您可以通过 QuerySpecification
获取您要查找的内容。这是一个简单的例子:
public class PrestoParserTest {
public static void main(String[] args) {
SqlParser parser = new SqlParser();
String sql = "select * from xyz where x=y group by x order by y limit 10";
Query query = (Query)parser.createStatement(sql);
QuerySpecification body = (QuerySpecification)query.getQueryBody();
Select select = body.getSelect();
System.out.println("Columns = " + select.getSelectItems());
System.out.println("From = " + body.getFrom().get());
Optional<Expression> where = body.getWhere();
System.out.println("Where = " + where.get());
System.out.println("Group by = " + body.getGroupBy());
System.out.println("Order by = " + body.getOrderBy());
System.out.println("Limit = " + body.getLimit().get());
}
}
运行此命令会返回:
Columns = [*]
From = Table{xyz}
Where = ("x" = "y")
Group by = ["x"]
Order by = [SortItem{sortKey="y", ordering=ASCENDING, nullOrdering=UNDEFINED}]
Limit = 10
关于java - 使用 Facebook presto 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29449768/