Как получить все таблицы базы данных, на которые есть ссылки в запросе presto, используя presto-parser - PullRequest
0 голосов
/ 22 апреля 2020

Я использую 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 между двумя?

...