java Apache Calcite在SQL字符串中查找选定的列

iyzzxitl  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(62)

我有一个用例,我想知道在SQL字符串中选择的列。例如,如果SQL是这样的:
SELECT name, age*5 as intelligence FROM bla WHERE bla=bla
然后,在解析了上面的String之后,我只希望输出为:name, intelligence
第一,是否可以通过方解石?
任何其他选择也是受欢迎的。
PS:我想在实际运行数据库查询之前知道这一点。

goqiplq2

goqiplq21#

这是绝对可行的方解石。首先创建一个SqlParser示例并解析查询:

SqlParser parser = SqlParser.create(query)
SqlNode parsed = parser.parseQuery()

从这里开始,您可能会最成功地实现SqlVisitor接口。首先需要找到一个SqlSelect示例,然后通过对getSelectList的每个元素调用visit来访问所选择的每个表达式。
从那里开始,如何继续将取决于您想要支持的表达式的复杂性。但是,递归地访问所有SqlCall节点及其操作数,然后收集您看到的任何SqlIdentifier值可能就足够了。

sf6xfgos

sf6xfgos2#

它可以简单到:

SqlParser parser = SqlParser.create(yourQuery);
SqlSelect selectNode = (SqlSelect) parser.parseQuery();
SqlNodeList list = selectNode.getList();

for (int i = 0; i < list.size(); i++) {
    System.out.println("Column " + (i + 1) + ": " + list.get(i).toString());
}

相关问题