JSqlParser for Data Lineage?

时间:2018-02-01 17:36:13

标签: jsqlparser

我们是一个数据仓库开发团队,我们的大部分ETL逻辑都可以表示为一系列SQL select语句。我正在寻找一种工具,通过解析查询以结构化的方式提取数据沿袭。

查询和简化的沿袭输出如下所示:

查询:

ctrl 1

输出

SELECT A AS COLUMN_1, B AS COLUMN_2, A+B AS COLUMN_SUM FROM MYTABLE;

JSQLParser是否是一个很好的工具?任何关于如何使用该工具的指针或经验也将受到赞赏。

1 个答案:

答案 0 :(得分:0)

JSqlParser 进行解析并为您提供一种结构化方式来查看您的SQL。顺便说一句 JSqlParser 非常擅长这个。

但它不了解您的数据库架构,因此无法知道column_1 A是否来自表MYTABLE。一个更明显的例子是

select a, b from table1, table2

这些知识必须以某种方式注入你:)。

要进行简单的解析,请执行

之类的操作
Statement statement = CCJSqlParserUtil.parse(sql);

要提取已使用的列,您可以使用JSqlParser提供的TablesNamesFinder实用程序,如

Select selectStatement = (Select) statement;
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder() {
      @Override
      public void visit(Column tableColumn) {
           System.out.println(tableColumn);
      }
};
System.out.println(" and tables=" + tablesNamesFinder.getTableList(selectStatement));

正如您所看到的,一种浏览数据的方法是某种访问者模式。

如果您有更多问题,请随时使用JSqlParsers gitter room或在github上提出问题。