1. [置顶]马哈鱼数据血缘分析器介绍

    一、马哈鱼数据血缘分析器( SQLFlow )是什么

    2021/08/05 马哈鱼

  2. 数据血缘的基本概念介绍

    数据血缘的基本概念介绍 概述 直接数据流 间接数据流和伪列介绍 间接数据流中的where-group-by子句 数据流链路 对应的英文版本 Introduction Direct dataflow Indirect dataflow and pseudo column Indirect dataflow: where clause and group by clause Dataflow chain

    2022/02/24 马哈鱼

  3. 马哈鱼数据血缘视化工具在windows上的安装

    Windows上的安装教程 Windows上的安装教程 参考 马哈鱼数据血缘关系分析工具中文网站: https://www.sqlflow.cn 马哈鱼数据血缘关系分析工具在线使用: https://sqlflow.gudusoft.com

    2022/01/19 马哈鱼 教程

  4. 用 Gudu SQLFlow 可视化以CSV格式存储的的数据血缘关系

    马哈鱼数据血缘分析器 作为一个数据血缘关系分析工具, 除了对 SQL 脚本文件进行分析,得到 data lineage,并进行可视化展示外,还可以让用户自己提供CSV格式的数据血缘关系, 并进行可视化展示。 CSV 文件的结构 一种最基本的格式: SOURCE_DB,SOURCE_SCHEMA,SOURCE_TABLE,SOURCE_COLUMN,TARGET_DB,TARGET_SCHEMA,TARGET_TABLE,TARGET_COLUMN 各字段含义 SOURCE_DB:源数据所在数据库,如果没有,请填写 DEFAULT SOURCE_SCHEMA: 源数据所在SCHEMA, 如果没有,请填写 DEFAULT SOURCE_TABLE: 源数据所在表,必须填写。 SOURCE_COLUMN: 源数据所在的字段,必须填写。 TARGET_DB:目标数据所在数据库,如果没有,请填写 DEFAULT TARGET_SCHEMA: 目标数据所在SCHEMA, 如果没有,请填写 DEFAULT TARGET_TABLE: 目标数据所在表,必须填写。 TARGET_COLUMN: 目标数据所在的字段,必须填写。 一个例子 SOURCE_DB,SOURCE_SCHEMA,SOURCE_TABLE,SOURCE_COLUMN,TARGET_DB,TARGET_SCHEMA,TARGET_TABLE,TARGET_COLUMN ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,technical_metadata ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,tu_directmail_consent,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_ONLINE_ACCOUNT_SCVSSP_LINK,tu_directmail_consent ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_SCVECS_SAT_01,enterprise_customer_nk1,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_SCVECS_SAT,enterprise_customer_nk1 ADW_DEV,ADW_CUSTOMER_TRAN,ADW_CUSTOMER_TRAN.FOODSCV_RDV_ENTERPRISE_CUSTOMER_SCVECS_SAT_01,enterprise_customer_nk1,ADW_DEV,ADW_RDV,ENTERPRISE_CUSTOMER_SCVECS_SAT,enterprise_customer_nk1 可视化以后的效果 通过创建 job 递交 CSV 文件 可视化的血缘关系 参考 马哈鱼数据血缘关系分析工具中文网站: https://www.sqlflow.cn 马哈鱼数据血缘关系分析工具在线使用: https://sqlflow.gudusoft.com

    2022/01/18 马哈鱼 教程

  5. 马哈鱼数据血缘分析器合作伙伴

    马哈鱼数据血缘分析器合作伙伴 马哈鱼数据血缘分析器是一款业内领先的数据血缘分析工具,拥有众多国外大企业客户。 为进一步开拓国内市场,邀请软件开发、系统集成、数据治理领域的厂商成为我们的合作伙伴,分享国内大数据治理市场快速增长的机遇。 经认证合格,你可以: 获得我们的客户资源,协助我们进行项目实施。 获得开发团队的直接技术培训和支持。 优惠的合作价格支持。 和国内大数据治理领先企业的合作机会。 联系我们 Email: support@sqlflow.cn

    2021/11/30 马哈鱼

  6. 利用马哈鱼来分析Case-When语句中的字段依赖关系

    马哈鱼数据血缘分析器是一个分析数据血缘关系的平台,可以在线直接递交 SQL 语句进行分析,也可以选择连接指定数据库获取 metadata、从本地上传文件目录、或从指定 git 仓库获取脚本进行分析。 本文介绍如果利用马哈鱼来分析SQL的case-when语句中字段依赖关系。 一个简单的Case 考虑如下SQL: select case when a.kamut=1 and b.teur IS null then 'no locks' when a.kamut=1 then b.teur else 'locks' end teur from tbl a left join TT b on (a.key=b.key) SQL的返回字段 teur,它的值直接于case-when的计算结果。 在马哈鱼的设计理念里,case-when被认为是一种特殊的function,但又不同于普通的function,它并没有argument。马哈鱼直接分析case when中的when、then、else子句。 其中,then、else子句的字段直接作为返回结果提供给teur,因此毫无疑问,then、else子句的字段和teur是一个fdd关系。需要考虑的是when子句,teur的结果是间接依赖when子句,满足不同的when子句,会返回不同的then结果,这会影响到最终teur字段的返回值。因此: when --> fdr --> then --> fdd --> resultset column 此处的when子句非常类似where语句,只不过影响的是then子句,而不是直接影响resultset column。 如图所示: teur和两个when子句:a.kamut=1 and b.teur IS null, a.kamut=1,产生了fdr关系,因此 a.kamut --> fdr -->teur, 1 --> fdr --> teur, b.teur --> fdr --> teur teur和2个then子句及else子句产生了fdd关系,因此 'no locks' --> fdd --> teur, b.teur --> fdd --> teur, 'locks' --> fdd --> teur 其中b.teur和teur直接同时存在了fdd和fdr关系,由于fdd关系优先级高于fdr关系,因此在graph中,只显示出了fdd关系。 稍微复杂一些的Case,嵌套case-when语句 CREATE VIEW FACT_PRCU_FLDR AS SELECT PRCU.PRCU_ID AS PRCU_FLDR_ID, CONCAT(PRCU.PRCU_TYP_ID,'^','^') AS PRCU_FLDR_TYP_ID, CONCAT('^',PRCU.BUYR_ID) AS BUYR_STAFF_ID, CONCAT('^',PRCU.MGR_ID) AS MGR_STAFF_ID, CONCAT(PRCU.BUYR_TEAM,'^') AS BUYR_TEAM_STAFF_ID, PRCU.CMPLX_CD AS PRCU_CMPLX_ID, PRCU.RNG_CD AS PRCU_RNG_ID, (CASE WHEN PRCU.NO_ST IS NOT NULL AND PRCU.NO_ST_COMPLETE IS NOT NULL THEN (PRCU.NO_ST - PRCU.NO_ST_COMPLETE) END) AS NO_ORD_ST, (CASE WHEN PRCU.COMPLETE_FL=1 THEN 'Final' WHEN (CASE WHEN PRCU.NO_ST IS NOT NULL AND PRCU.NO_ST_COMPLETE IS NOT NULL THEN (PRCU.NO_ST - PRCU.NO_ST_COMPLETE) END) > 0 THEN 'Alert!' ELSE 'Ok' END) AS FLDR_COMPLETE, PRCU.PRCU_ID, PRCU.PRCU_TYP_ID, PRCU.PRCU_DSCR, PRCU.EXPT_COMPLETE_DT, PRCU.CLSD_DT, PRCU.BUYR_ID, PRCU.MGR_ID, PRCU.BUYR_TEAM, PRCU.CMPLX_CD, PRCU.RNG_CD, PRCU.COMPLETE_FL, COALESCE(PRCU.NO_ST,0) AS NO_ST, COALESCE(PRCU.NO_ST_COMPLETE, 0) AS NO_ST_COMPLETE, CVLST.CVL_PRCU_ST_ID_DV AS "LAST_ST_COMPLETE", COALESCE(PRCU.TOT_AMT, 0) AS TOT_AMT, PRCU.TBL_LAST_DT, PRCU.PRCU_TITLE, (SELECT MIN(CREA_DT) FROM R_PRCU_ST ST WHERE PRCU.PRCU_ID=ST.PRCU_ID AND ST.CREA_DT IS NOT NULL) FLDR_CREA_DT, COALESCE(PRCU.ORGNL_PRCU_TOT_AM, 0) AS ORGNL_PRCU_TOT_AM, CONCAT(PRCU.EXT_STOR_UNID,'^R_PRCU_ID')AS EXT_ID, /*INSIGHT_LITE_COLUMNS_STRT*/ 0 AS REC_ST, PRCU.TBL_LAST_DT AS LAST_PROCESS_DT /*INSIGHT_LITE_COLUMNS_END*/ /*INSIGHT_COLUMNS_STRT PRCU.REC_ST, PRCU.LAST_PROCESS_DT INSIGHT_COLUMNS_END*/ FROM R_PRCU_ID PRCU LEFT OUTER JOIN CVL_PRCU_ST_ID CVLST ON PRCU.LAST_ST_COMPLETE = CVLST.CVL_PRCU_ST_ID_SV 查看其中的case-when语句 (CASE WHEN PRCU.COMPLETE_FL=1 THEN 'Final' WHEN (CASE WHEN PRCU.NO_ST IS NOT NULL AND PRCU.NO_ST_COMPLETE IS NOT NULL THEN (PRCU.NO_ST - PRCU.NO_ST_COMPLETE) END) > 0 THEN 'Alert!' ELSE 'Ok' END) AS FLDR_COMPLETE 可以看到ResultSet Column FLDR_COMPLETE 被一个case-when语句影响,而其中的第二个When子句又包含了一个case-when语句。 当case-when语句整体作为when子句时,这个子句的fdd关系,实际上是外层when子句fdr关系的一部分,即: then -->fdd-->when-->fdr-->FLDR_COMPLETE 因此内层case-when的then子句和resultset column FLDR_COMPLETE的关系是fdr关系,而不是fdd关系。 如图所示,最终影响FLDR_COMPLETE的fdd字段,仅有外层case-when的then语句和else语句,其他的都显示为fdr关系。 以上就是对马哈鱼分析case-when语句的处理流程介绍,关于马哈鱼的等多功能,请参考下面链接: 参考 马哈鱼数据血缘关系分析工具中文网站: https://www.sqlflow.cn 马哈鱼数据血缘关系分析工具在线使用: https://sqlflow.gudusoft.com

    2021/09/15 马哈鱼 教程

  7. 数据治理中Oracle SQL和存储过程的数据血缘分析

    数据治理中的一个重要基础工作是分析组织中数据的血缘关系。有了完整的数据血缘关系,我们可以用它进行数据溯源、表和字段变更的影响分析、数据合规性的证明、数据质量的检查等。 分析数据血缘的方法主要分为四类 自动解析 系统跟踪 机器学习 人工收集 自动解析主要是利用工具解析 SQL 语句、存储过程和 ETL等文件。 本文以 Oracle 为例,来说明如何分析 SQL 和存储过程中的数据血缘。 产生数据血缘的 SQL 语句 SELECT INSERT UPDATE MERGE CREATE VIEW CREATE TABLE 存储过程 SELECT 可能你会感到奇怪, SELECT 语句没有对数据进行增、改操作,如何会产生数据血缘? 秘密就在于 SELECT 语句中的 select list 部分,在这里,可以对数据进行转换。 以下面这个 SELECT 语句为例: select sal + commission as totalSal from emp; 我们可以看到,totalSal 字段的数据来自 emp.sal 和 emp.commission,在这里,数据进行了一次转换。 这种在 SELECT 内部产生的数据血缘是临时性的,但是这个 SELECT 语句和 CREATE VIEW 或者 CREATE TABLE 一结合,这个数据血缘就真正落地形成了。例如: create view v_sal(mySal) as select sal + commission as totalSal from emp; 这个 CREATE VIEW 语句通过 SELECT 形成了 从 emp.sal 和 emp.commission 到 v_sal.mySal 的数据血缘。 因此我们可以知道,分析好 SELECT 语句是对 SQL 语句进行数据血缘分析的基础。总体来说,通过分析 SQL 语句来获得数据血缘是比较直观和简单的,但问题的关键是人工分析的效率太低,对于企业内众多的 SQL 来说,人工分析基本是不可能的。 存储过程 存储过程可以包含比较复杂的逻辑处理,例如条件判断、循环分支等。因此常用来完成数据抽取、转换、加载、清洗等任务。 这其中,就产生了大量的数据血缘关系。为了更好的对企业内数据进行治理,整理存储过程中的数据血缘工作是必不可少的。 分析存储过程中的数据血缘,游标 cursor 是一个关键因素,数据流一般都是围绕着游标进行处理。 在下面这个 Oracle PL/SQL 的存储过程中,首先定义了游标 CURSOR cur_stclerk。 DECLARE CURSOR cur_stclerk IS SELECT employee_id, department_id, first_name, last_name FROM employees WHERE job_id = 'ST_CLERK'; 然后通过这个游标,用 LOOP 进行循环, 把数据从 employees 表中插入到表 emp_temp 和 emp_detls_temp。 INSERT INTO emp_temp (employee_id, department_id, job_id) VALUES (z_empid, z_depid, 'ST_CLERK'); INSERT INTO emp_detls_temp (employee_id, empname) VALUES (z_empid, z_firstname || ' ' || z_lastname); END LOOP; CLOSE cur_stclerk; COMMIT; END; 因此我们可以建立从 employees 表到表 emp_temp 和 emp_detls_temp 的数据血缘。 完整的 PLSQL 存储过程。 DECLARE z_empid employees.employee_id%TYPE; z_depid employees.department_id%TYPE; z_firstname employees.first_name%TYPE; z_lastname employees.last_name%TYPE; CURSOR cur_stclerk IS SELECT employee_id, department_id, first_name, last_name FROM employees WHERE job_id = 'ST_CLERK'; BEGIN OPEN cur_stclerk; LOOP FETCH cur_stclerk INTO z_empid,z_depid,z_firstname, z_lastname; EXIT WHEN cur_stclerk%NOTFOUND; INSERT INTO emp_temp (employee_id, department_id, job_id) VALUES (z_empid, z_depid, 'ST_CLERK'); INSERT INTO emp_detls_temp (employee_id, empname) VALUES (z_empid, z_firstname || ' ' || z_lastname); END LOOP; CLOSE cur_stclerk; COMMIT; END; 自动化数据血缘分析工具 SQLFlow 支持分析多达 20 多种主流数据库的 SQL 语句。 支持的数据库有 bigquery, couchbase, dax, db2, greenplum, hana, hive, impala, informix, mdx, mysql, netezza, odbc, openedge, oracle, postgresql, redshift, snowflake, sparksql, sqlserver, sybase, teradata, vertica。 支持分析存储过程和动态 SQL 语句。 通过 UI 分析 SQL 语句 通过 SQLFlow 的 UI 可以快速的获取一个 SQL 的数据血缘情况, 并可以得到可视化的结果,帮助用户迅速了解一个 SQL 中的数据血缘。 通过 API 方式分析 SQL 的数据血缘 有时,我们需要把分析所得的数据血缘作为元数据存储到我们自己的数据治理平台中,和其它元数据进行整合, 这时,我们可以利用 SQLFlow 提供的 Restful API, 利用 shell, python 等脚本对数据血缘分析工作进行自动化。 这里用 curl 展示如何用 API 访问 SQLFlow 进行数据血缘分析。 准备好用 API 连接 SQLFlow 需要的 userid 和 secret code 利用 userid 和 secret code 来获取 token。注意,用你自己的 userid 和 secret code 来替换掉命令中的对应部分。 curl -X POST "https://api.gudusoft.com/gspLive_backend/user/generateToken" -H "Request-Origion:testClientDemo" -H "accept:application/json;charset=utf-8" -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" -d "secretKey=YOUR SECRET KEY" -d "userId=YOUR USER ID HERE" 把需要分析的 SQL 语句递交给 SQLFlow 进行分析,并返回处理结果。注意,用你自己的 userid 和上面命令中返回的 token 来替换掉命令中的对应部分。 curl -X POST "https://api.gudusoft.com/gspLive_backend/sqlflow/generation/sqlflow?showRelationType=fdd" -H "Request-Origion:testClientDemo" -H "accept:application/json;charset=utf-8" -H "Content-Type:multipart/form-data" -F "sqlfile=" -F "dbvendor=dbvoracle" -F "ignoreRecordSet=true" -F "simpleOutput=false" -F "sqltext=create view v_sal(mySal) as select sal + commission as totalSal from emp;" -F "userId=YOUR USER ID HERE" -F "token=YOUR TOKEN HERE" 返回的 json 包含了如下数据血缘关系。 "relations": [ { "id": "3", "type": "fdd", "effectType": "create_view", "target": { "id": "11", "column": "mySal", "parentId": "9", "parentName": "v_sal", }, "sources": [ { "id": "3", "column": "sal", "parentId": "2", "parentName": "emp", }, { "id": "4", "column": "commission", "parentId": "2", "parentName": "emp", } ], "processId": "10" } ] 更详细的信息见官网 SQLFlow Restful API。 小结 本文介绍了如何通过分析 Oracle 的 SQL 语句和存储过程来获取组织中的数据血缘,从而更好的进行数据治理。 并介绍了如何利用 SQLFlow 工具把分析 SQL 语句中的数据血缘工作自动化, 提高数据自理效率和水平。

    2021/09/11 马哈鱼 教程

  8. 马哈鱼的 userid 和 secret code

    当用户需要使用 Restful API 或 grabit tool 访问马哈鱼时,需要使用用户的 userid 和 secret code。 为获取 userid 和 secret code, 必须先申请成为高级账户。点击这里可以免费申请 30 天体验账户。 userid 和 secret code 的位置 访问 马哈鱼网站, 登录后,点击右上角的账户名。 点击 account 后, 点击 generate 按钮,可以产生 secret code。

    2021/09/10 马哈鱼 教程

  9. 马哈鱼血缘分析器用户体系介绍

    注册

    2021/09/09 马哈鱼 教程

  10. 马哈鱼数据血缘分析器不同版本

    1.马哈鱼数据血缘分析器 马哈鱼数据血缘分析器是一个 SaaS 服务。通过浏览器直接使用,无需安装任何软件。

    2021/09/04 马哈鱼

  11. 马哈鱼数据血缘分析器价格

    1.马哈鱼SaaS版本 使用马哈鱼SaaS版本无需安装任何软件,通过浏览器直接使用。 单用户 使用期从购买之日起一年。 一个用户使用。 可选择最多三个不同种类的数据库。 支持 grabit 工具和 API。 请联系 support@sqlflow.cn 获取保价。 5 用户 使用期从购买之日起一年。 最多 5 个用户使用。 可选择最多三个不同种类的数据库。 支持 grabit 工具和 API。 用户间数据血缘数据可共享。 请联系 support@sqlflow.cn 获取保价。 5 用户以上 使用期从购买之日起一年。 5 个用户起。 可选择最多三个不同种类的数据库。 支持 grabit 工具和 API。 用户间数据血缘数据可共享。 价格按需定制。 2.私有化部署版本 支持企业私有化部署,可部署在隔离内网环境。仅供企业内部人员使用,保证数据的安全。 可永久使用。 指定授权安装的服务器。 指定需要支持的数据库。 支持 grabit 工具和 API。 请联系 support@sqlflow.cn 获取保价。 3.企业版 马哈鱼数据血缘分析器企业版,包含私有化部署版本和 Java 类库,可以方便的把 data lineage 功能集成到你的项目中, 价格按需定制。 4.购买和咨询 请联系 support@sqlflow.cn 获取保价。

    2021/09/04 马哈鱼