首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于数据沿袭的JSqlParser?

用于数据沿袭的JSqlParser?
EN

Stack Overflow用户
提问于 2018-02-02 01:36:13
回答 1查看 527关注 0票数 0

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

查询和简化的谱系输出如下所示:

查询:

代码语言:javascript
复制
SELECT A AS COLUMN_1, B AS COLUMN_2, A+B AS COLUMN_SUM FROM MYTABLE;

输出

代码语言:javascript
复制
COLUMN_1: MYTABLE.A
COLUMN_2: MYTABLE.B
COLUMN_3: MYTABLE.A
COLUMN_3: MYTABLE.B

对于这个目的,JSQLParser是一个好工具吗?任何关于如何使用该工具的指针或经验也将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2018-02-02 15:25:55

JSqlParser执行解析,并为您提供一种结构化的方式来查看您的SQL。顺便说一句,JSqlParser在这方面做得很好。

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

代码语言:javascript
复制
select a, b from table1, table2

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

要进行简单的解析,请执行以下操作

代码语言:javascript
复制
Statement statement = CCJSqlParserUtil.parse(sql);

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

代码语言:javascript
复制
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上提交问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48568647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档