SQLFlow 是用于追溯数据血缘关系的工具,它自诞生以来以帮助成千上万的工程师即用户解决了困扰许久的数据血缘梳理工作。

数据库中视图(View)的数据来自表(Table)或其他视图,视图中字段(Column)的数据可能来自多个表中多个字段的聚集(aggregation)。 表中的数据可能通过ETL从外部系统中导入。这种从数据的源头经过各个处理环节,到达数据终点的数据链路关系称为数据血缘关系(data lineage)。

SQLFlow 通过分析各种数据库对象的定义(DDL)、DML 语句、ETL/ELT中使用的存储过程(Proceudre,Function)、 触发器(Trigger)和其他 SQL 脚本,给出完整的数据血缘关系。

在大型数据仓库中,完整的数据血缘关系可以用来进行数据溯源、表和字段变更的影响分析、数据合规性的证明、数据质量的检查等。

今日根据mysql的一个实例SQL进行进一步介绍该工具的具体操作:

示例语句:

  1. MYSQL SQL:
    CREATE TABLE tmp.tmp_a_supp_achievement_an_mom_001 AS
  2. SELECT a1.dim_day_txdate,
  3. a.a_pin,
  4. Sum(Coalesce(b.amount, 0)) AS total_amount
  5. , Sum(Coalesce(c.refund_amt, 0)) AS refund_amt
  6. , Sum(os_prcp_amt) os_prcp_amt
  7. FROM (SELECT dim_day_txdate
  8. FROM dmv.dim_day
  9. WHERE dim_day_txdate>=concat(cast(Year('2018-05-15')-1 AS string),'-', substring('2018-05-15', 6, 2), '-01')
  10. AND dim_day_txdate<='2018-05-15' )a1
  11. JOIN (SELECT DISTINCT a_pin, product_type
  12. FROM dwd.dwd_as_qy_cust_account_s_d
  13. WHERE dt ='2018-05-15' AND product_type='20288' )a
  14. LEFT OUTER JOIN (SELECT substring(tx_time, 1, 10) AS time, sum(order_amt) AS amount, a_pin
  15. FROM dwd.dwd_actv_as_qy_iou_receipt_s_d
  16. WHERE a_order_type='20096' AND a_pin NOT IN ('vep_test', 'VOPVSP测试')
  17. AND dt='2018-05-15'
  18. GROUP BY substring(tx_time, 1, 10), a_pin )b
  19. ON cast(a.a_pin AS string)=cast(b.a_pin AS string) AND a1.dim_day_txdate=b.time
  20. LEFT OUTER JOIN ( SELECT substring(refund_time, 1, 10) AS refund_time, a_pin, sum(refund_amt)AS refund_amt
  21. FROM dwd.dwd_as_qy_iou_refund_s_d
  22. WHERE refund_status='20090' AND dt='2018-05-15' AND a_order_no <> '12467657248'
  23. AND a_refund_no <> '1610230919767139947'
  24. GROUP BY substring(refund_time, 1, 10), a_pin )c
  25. ON cast(a.a_pin AS string)=cast(c.a_pin AS string) AND a1.dim_day_txdate=c.refund_time
  26. LEFT OUTER JOIN (SELECT dt, a_pin, sum(os_prcp_amt) AS os_prcp_amt
  27. FROM dwd.dwd_as_qy_cycle_detail_s_d
  28. WHERE dt>=concat(substr('2018-05-15', 1, 7), '-01') AND dt<='2018-05-15'
  29. GROUP BY dt, a_pin)e
  30. ON cast(a.jd_pin AS string)=cast(e.a_pin AS string) AND a1.dim_day_txdate=e.dt
  31. GROUP BY a1.dim_day_txdate, a.a_pin;

上述语句是通过一个复合查询结果集创建一个临时表,通过SQLFlow,我们可以清楚的分析复合查询有哪些对象参与,每个对象分别有哪些字段参与结果集,有哪些字段参与对象间关联。

  • SQLFlow是怎么样工作的

SQLFlow通过自动分析SQL逻辑关系,能够快速、准确的识别出SQL语句中各对象的关联关系及每个对象参与运算的列名称,如果存在多级运算,它的展示还包含各级的中间运算集合,让你能够清晰的阅读,非常适合阅读。

如下图,浅绿色代表实体对象,红色代表中间集合对象。

  • 显示SQL语句使用了哪些函数

当你在setting中勾选show function时,会将语句中所有用到的函数以灰色图形展示,如下:

  • 显示对象间的关联关系

下图中虚线pseudorows是说明该结果集是逻辑(条件)运算而来的虚拟结果集,它作为一个标识,不是真正的列,下图中高亮的黑虚线是下述语句中得来的,其中逻辑关系是dt ='2018-05-15' AND product_type='20288' ,所以这个pseudorows是由列dt和product_type一起运算而来,即我们看到的两个虚线一起指向pseudorows。

JOIN (SELECT DISTINCT a_pin, product_type
FROM dwd.dwd_as_qy_cust_account_s_d
WHERE dt ='2018-05-15' AND product_type='20288' )a

  • 血缘关系追踪

从上面的sql中,进行我们的解析可以得到dim_day_txdate字段来源于dmv.dim_day,a_pin来源于dwd.dwd_as_qy_cust_account_s_d,total_amount是 来源于DWD.dwd_actv_as_qy_iou_receipt_s_d中的(order_amt)经过sum之后得到amount 再通过sum和coleace操作得到的,这系列的血缘关系变化我们将用链表方式进行存储,得到最终的血缘关系。

关于当前比较流行的SQLFlow工具是如何分析 mysql 语句,从而得到怎样的表、字段间的数据血缘关系 data lineage的内容就先分享到这里,后续精彩继续~~~

血缘关系分析工具SQLFLOW--实践指南的更多相关文章

  1. 一款好用的数据血缘关系在线工具--SQLFlow

      l  数据血缘关系(data lineage) 数据血缘属于数据治理中的一个概念,是在数据溯源的过程中找到相关数据之间的联系,它是一个逻辑概念.数据治理中经常提到血缘分析,血缘分析是保证数据融合的 ...

  2. SQLFlow——一个强大的可视化SQL关系分析工具

    SQLFlow 摘要 本文主要介绍SQLFlow是什么,以及它的功能及使用场景 SQLFlow是什么 SQLFlow是一个可视化的在线处理SQL对象依赖关系的工具,只需要上传你的SQL脚本,它可以自动 ...

  3. 精通BIRT:Eclipse商务智能报表工具开发实践指南

    http://blog.csdn.net/birtbird/article/details/8935520 [置顶] 精通BIRT:Eclipse商务智能报表工具开发实践指南 分类: BIRT 201 ...

  4. 基于MaxCompute InformationSchema进行血缘关系分析

    一.需求场景分析 在实际的数据平台运营管理过程中,数据表的规模往往随着更多业务数据的接入以及数据应用的建设而逐渐增长到非常大的规模,数据管理人员往往希望能够利用元数据的分析来更好地掌握不同数据表的血缘 ...

  5. Chrome性能分析工具lightHouse用法指南

    本文主要讲如何使用Chrome开发者工具linghtHouse进行页面性能分析. 1.安装插件 非常简单,点击右上角的“添加至Chrome”即可. 2.使用方式 1)打开要测试的页面,点击浏览器右上角 ...

  6. gcc 头文件依赖关系 分析工具

    http://gernotklingler.com/blog/open-source-tools-examine-and-adjust-include-dependencies/

  7. 马哈鱼数据血缘分析器分析case-when语句

    马哈鱼数据血缘分析器是一个分析数据血缘关系的平台,可以在线直接递交 SQL 语句进行分析,也可以选择连接指定数据库获取 metadata.从本地上传文件目录.或从指定 git 仓库获取脚本进行分析. ...

  8. 使用grabit分析mysql数据库中的数据血缘关系

    使用grabit分析mysql数据库中的数据血缘关系 Grabit 是一个辅助工具,用于从数据库.GitHub 等修订系统.bitbucket 和文件系统等各种来源收集 SQL 脚本和存储过程,然后将 ...

  9. App架构师实践指南二之App开发工具

    App架构师实践指南二之App开发工具     1.Android Studio 2.编译调试---条件断点.右键单击断点,在弹出的窗口中输入Condition条件.---日志断点.右键单击断点,在弹 ...

随机推荐

  1. WERTYU UVA - 10082

    ​ A common typing error is to place the hands on the keyboard one row to the right of the correct po ...

  2. 使用defineProperty实现自定义setter, 简化前端Angular的重构工作

    一.问题场景 Angular的双向绑定给我们开发提供了很大的遍历,将父scope的引用变量作为参数传递给子指令,这样就可以方便的在父作用域内进行业务操作,数据变更会自动传递到子指令.但是如果你基于一个 ...

  3. SpringMVC笔记(五)

    1. 拦截器 1.1 拦截器和过滤器 SpringMVC的处理器拦截器类似于Servlet开发过程中的过滤器Filter,用于对处理器进行预处理和后处理.我们可以自定义一些拦截器来实现特定的功能 过滤 ...

  4. 1070 Mooncake

    Mooncake is a Chinese bakery product traditionally eaten during the Mid-Autumn Festival. Many types ...

  5. 858. Mirror Reflection

    There is a special square room with mirrors on each of the four walls.  Except for the southwest cor ...

  6. 功能:Java8新特性steam流

    Java8新特性steam流 一.包装数据类型 @Test public void main22() { List<Integer> list = new ArrayList<Int ...

  7. C实现十进制与十六进制转换

    include <stdio.h> include <stdlib.h> include <string.h> include <locale.h> i ...

  8. Google Hacking的用法

    目录 Google Hacking 基本搜索 高级搜索 Index of inurl Google Hacking Google Hacking 是利用谷歌搜索的强大,来在浩瀚的互联网中搜索到我们需要 ...

  9. Linux系统应急响应

    目录 排查用户相关的信息 排查进程端口相关的信息 查找恶意程序并杀掉 斩草除根 判断入侵方式,修复漏洞 当我们被告知一台Linux服务器被黑客入侵,黑客利用该服务器进行挖矿,并且在该服务器上放置了木马 ...

  10. Linux-鸟菜-5-目录配置-FHS

    Linux-鸟菜-5-目录配置-FHS 这节内容比较休闲,主要就是介绍Linux的目录配置,也就是那些目录通常是干啥的,这个比较重要,需要我们去了解.但是我觉得通常看一遍记不住啥,也就记个大概,主要还 ...