# druineage **Repository Path**: HZHurt/druineage ## Basic Information - **Project Name**: druineage - **Description**: 解析SQL语句,分析血缘。不是table-table的关系,是column-column关系。 - **Primary Language**: Java - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-04-20 - **Last Updated**: 2023-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Druineage ## 描述 解析SQL语句,分析血缘。不是table-table的关系,是column-column关系。 ## 版本历史记录 0.4.9 * 舍去部分功能,减轻核心负担(完全可以使用后自行结果调整) * 强制转换为大写后解析 * 取消是否展示未知字段开关,使用标识代替 * 去除清理中间表开关(可以解析结果之后再清理) * 星号逆推时,过滤外部的常量字段 * 优化case when中的null过滤规则 * 函数多层嵌套时,计算血缘作用 0.4.8 * case when中的is null和is not null的null不作为血缘 * 不支持的*仅提示,不停断 * 完善支持一表多血缘 * 优化代码 0.4.7 * 支持子查询无别名 * 支持子查询中常量字段无别名 0.4.6 * 优化字段功能标记逻辑 * 数据(外部)+数据(内部) -> 数据 * 数据(外部)+判断(内部) -> 判断 * 数据(外部)+数据,判断(内部) -> 数据,判断 * 判断(外部) -> 判断 * 数据,判断(外部)+数据(内部) -> 数据,判断 * 数据,判断(外部)+判断(内部) -> 判断 * 数据,判断(外部)+数据,判断(内部) -> 数据,判断 * 重新整理部分特殊函数 * 屏蔽dbType=oracle时’’转null的情况 0.4.5 * 血缘字段全展示,并且标记用途(判断还是数据) * 解析结果去重 0.4.4 * 目标表常量血缘字段全展示 0.4.3 * 修正目标表常量血缘字段展示,并且仅无变量字段才展示常量 0.4.2 * 目标表支持常量血缘字段展示 0.4.1 * 修正了同级多次使用同一张表导致的bug 0.4.0 * 支持同表内外使用多次 ## 使用 只有一个功能 DB db = new Lineage(数据库类型) .setUnknownColumnPrefix(未知字段前缀) //默认:UNKNOWN_ .setBlankTempReplacement(代替空字符的字符串) //dbType=oracle时,’’会被转换成null,设置临时替换字符可解析后再替换回’’ .analysis(sql语句); //sql语句可为String、String[]、Collection ## 规范(局限) ### 全局 * 尽量不要用“*” * 如果字段不参与血缘,尽量不要被“count”,尽量用“count(*)” * 所有字段格式(尽量):别名.字段名 * 尽量设置数据库类型 ### select * 绝对不要嵌“子查询” ### from * 所有表格式:schema.表名 [as] 别名 * 所有表尽量有“别名” * 有schema的一定要加schema * 子查询即使是内外嵌套,别名最好也不要相同 * 关联查询尽量用“join”,不用其他 ### create * create table schema.表名 [(字段名[,…])] as select … * as必须得加 ### insert * insert into schema.表名 [(字段名[,…])] select … * select前的字段可不加 ### 注 * 默认drop语句表示该表是临时表,最终血缘中不予以展示 * 本工具解析sql的读取功能使用druid实现,所以解析血缘的前提是sql能被druid读取,druid读取出错,就别提下一步解析了。 * 事实上create规范中as必须加中也是druid的要求。 * 有些注释方式跟数据库类型有关