我们是一个数据仓库开发团队,我们的大多数ETL逻辑都可以表示为一系列SQL select语句。我正在寻找一个工具,以提取数据谱系在一个结构化的方式通过解析查询。
查询和简化的谱系输出如下所示:
查询:
SELECT A AS COLUMN_1, B AS COLUMN_2, A+B AS COLUMN_SUM FROM MYTABLE;输出
COLUMN_1: MYTABLE.A
COLUMN_2: MYTABLE.B
COLUMN_3: MYTABLE.A
COLUMN_3: MYTABLE.B对于这个目的,JSQLParser是一个好工具吗?任何关于如何使用该工具的指针或经验也将不胜感激。
发布于 2018-02-02 15:25:55
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上提交问题。
https://stackoverflow.com/questions/48568647
复制相似问题