# sqlflow **Repository Path**: jjfinal/sqlflow ## Basic Information - **Project Name**: sqlflow - **Description**: No description available - **Primary Language**: Unknown - **License**: OSL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-08-29 - **Last Updated**: 2025-08-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 功能介绍 **本项目提供一个可视化的数据血缘分析工具,支持对多种结构化查询语言进行数据血缘分析。** #### 什么是数据血缘 数据血缘,是指数据的全生命周期中,数据从产生、处理、加工、融合、流转到最终消亡,数据 之间自然形成一种关系。其记录了数据产生的链路关系,这些关系与人类的血缘关系比较相似, 所以被成为数据血缘关系。 ### 数据血缘可以做什么 **数据溯源**:数据来源、去向追溯,可以用于定位问题、理解业务。 **数据打标**:依据数据血缘,自动为下游表、字段打上相应业务标签 **价值评估**:依据数据血缘出入度密度,为数据标明价值 **失败提示**:上游任务出错时,下游任务关联表负责人得到提示 ### 功能演示 ![data_lineage](doc/data_lineage.gif) ## 环境部署 ### 前端环境 | 框架 | 版本 | 功能 | | -------------- | -------- | ---------------------- | | vue | ^2.6.11 | 前端开发框架 | | @antv/x6 | ^2.3.4 | 血缘图可视化图编辑引擎 | | vue-codemirror | ^4.0.6 | sql语句编辑器 | | npm | v14.18.3 | 包管理工具 | 后端代码在frontend文件夹内 ### 后端环境 | 框架 | 版本 | 功能 | | ------------ | ------ | ---------------- | | springboot | 2.6.13 | 后端开发框架 | | knife4j | 4.0.0 | 文档框架 | ### 部署流程 1、修改``frontend/vue.config.js``中,``devServer.proxy.target``,修改成自己后端地址,默认为https://localhost:7777 2、切换到``frontend``,执行``npm install``, 安装前端相应包资源 3、``npm run serve``, 启动前端, 前端页面链接一般是``http://localhost:8080/dlt/`` 4、启动后端,即运行``DltApplication`` 5、浏览器打开前端页面 ### 原理 函数 表达式 selectElement : fullId '.' '*' #selectStarElement | fullColumnName (AS? uid)? #selectColumnElement | functionCall (AS? uid)? #selectFunctionElement | (LOCAL_ID VAR_ASSIGN)? expression (AS? uid)? #selectExpressionElement ; selectColumnElement selectFunctionElement selectExpressionElement 中是 t1.id+t2.id selectExpressionElement | left=expressionAtom mathOperator right=expressionAtom #mathExpressionAtom dataformat(t1.name_x,'%s') as t3 #selectElement的 selectFunctionElement case xx when s t3 #selectElement的 selectFunctionElement的 (t1.id) as id1 #selectElement的 selectExpressionElement functionCall : specificFunction #specificFunctionCall | aggregateWindowedFunction #aggregateFunctionCall | nonAggregateWindowedFunction #nonAggregateFunctionCall | scalarFunctionName '(' functionArgs? ')' #scalarFunctionCall | fullId '(' functionArgs? ')' #udfFunctionCall | passwordFunctionClause #passwordFunctionCall ;