### 技术QQ群：724424739

##########################################################
### 前言:
##########################################################

1、这里提供一个可以对SQL进行 字段级别 数据血缘解析的能力
2、使用这个功能，需要 链接外网 服务器。在解析sql脚本的时候，会将脚本内容发送至服务器解析
3、解析完毕之后会返回字段级血缘数据，用户可以根据这些数据构建起自己的字段血缘系统




##########################################################
### 脚本使用说明：
##########################################################

1、SQLReader.py 为 SQLReader的远程在线版，使用时需要连接外网

2、SQLReader.py 语言版本为 Python3+，不依赖其他自定义模块，若运行时若提示模块缺失，自行补齐Python相关模块即可

3、SQLReader.py 执行方式：python SQLReader.py + 你的sql文件路径。
    例如解析当前目录下的两个sql文件：
    python SQLReader.py 1-create_table.sql     # 先解析建表语句
    python SQLReader.py 2-codefile.sql           # 再解析ETL脚本


##########################################################
### 执行结果说明：
##########################################################

1、解析成功，会打印“解析成功”字样；

2、解析后SQL图形，可打开地址(https://www.kexuejisuan.com/DataBloodRelationship/)查看，注意：需要登录(用户：sqlreader_test，密码：sqlreader_test)才能看到属于该用户的图形

3、解析后血缘数据，会保存在本地 .log 日志中

4、日志中血缘数据对应的表结构如下，可在你的数据库中创建这些表，并保存日志中的血缘数据：

create table sql_table2table_info
(
  file_name_hash           bigint       COMMENT 'SQL文件名生成的哈希值'
, file_name                varchar(200) COMMENT 'SQL文件名'
, sql_seq                  int          COMMENT 'SQL语句顺序'
, sql_type                 varchar(50)  COMMENT 'SQL类型'
, target_table             varchar(200) COMMENT 'SQL语句目标表'
, source_table             varchar(200) COMMENT 'SQL加工源表' 
, source_table_seq         int          COMMENT 'SQL源表顺序' 
, source_table_join_type   varchar(50)  COMMENT 'SQL加工源表关联方式' 
, source_table_other_name  varchar(50)  COMMENT 'SQL加工源表别名' 
, source_table_condition   varchar(10000) COMMENT 'SQL源表条件' 
, src_tab_seqs_of_cdt_join varchar(100) COMMENT '关联条件的源表顺序'
)
DEFAULT CHARSET=utf8
partition by hash(file_name_hash) 
partitions 197
;

create table sql_table2column_info
(
  file_name_hash           bigint       COMMENT 'SQL文件名生成的哈希值'
, file_name                varchar(200) COMMENT 'SQL文件名'
, sql_seq                  int          COMMENT 'SQL语句顺序'
, target_table             varchar(200) COMMENT 'SQL语句目标表'
, column_name              varchar(200) COMMENT '目标表字段名'
, column_logic             varchar(10000) COMMENT '字段逻辑'
, source_tables            varchar(4000) COMMENT '字段逻辑涉及到的源表和字段' 
)
DEFAULT CHARSET=utf8
partition by hash(file_name_hash)
partitions 197
;

create table sql_table_struct_info
(
  table_name_hash          bigint       COMMENT '表名生成的哈希值'
, table_name               varchar(200) COMMENT '表名'
, column_seq               int          COMMENT '字段顺序'
, column_name              varchar(200) COMMENT '表字段名'
, column_data_type         varchar(200) COMMENT '表字段类型'
, column_comment           varchar(200) COMMENT '表字段注释'
)
DEFAULT CHARSET=utf8
partition by hash(table_name_hash)
partitions 197
;
