Я использую presto-parser , чтобы выяснить, какие таблицы базы данных запрашиваются в любом заданном запросе Presto. Я реализовал класс, который расширяет DefaultTraversalVisitor следующим образом
public class ProcessTables extends DefaultTraversalVisitor<Void, Void> {
private Set<String> tables;
ProcessTables() {
this.tables = new LinkedHashSet<>();
}
Set<String> getTables() {
return tables;
}
@Override
protected Void visitTable(Table node, Void context) {
this.tables.add(node.getName().toString());
return visitQueryBody(node, context);
}
}
Однако я считаю, что концептуальные таблицы (я не уверен в правильности термина здесь) также обрабатываются как таблицы без способ отличить guish их от реальных таблиц базы данных. Например,
with RANDOMNAME as (
select column_a, column_b
from db.tablename
where condition
)
будет visitTable
для RANDOMNAME
и db.tablename
. Есть лучший способ сделать это? Я что-то упускаю, например, другой метод, который я должен переопределить, чтобы различать guish между двумя?