使用SQLFlow分析一段mysql的SQL脚本,得其中的表以及字段间的数据血缘关系data lineage。
分析的SQL:
CREATE TABLE tmp.tmp_a_supp_achievement_an_mom_001 AS
SELECT a1.dim_day_txdate,
a.a_pin,
Sum(Coalesce(b.amount, 0)) AS total_amount
, Sum(Coalesce(c.refund_amt, 0)) AS refund_amt
, Sum(os_prcp_amt) os_prcp_amt
FROM (SELECT dim_day_txdate
FROM dmv.dim_day
WHERE dim_day_txdate>=concat(cast(Year('2018-05-15')-1 AS string),'-', substring('2018-05-15', 6, 2), '-01')
AND dim_day_txdate<='2018-05-15' )a1
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
LEFT OUTER JOIN (SELECT substring(tx_time, 1, 10) AS time, sum(order_amt) AS amount, a_pin
FROM dwd.dwd_actv_as_qy_iou_receipt_s_d
WHERE a_order_type='20096' AND a_pin NOT IN ('vep_test', 'VOPVSP测试')
AND dt='2018-05-15'
GROUP BY substring(tx_time, 1, 10), a_pin )b
ON cast(a.a_pin AS string)=cast(b.a_pin AS string) AND a1.dim_day_txdate=b.time
LEFT OUTER JOIN ( SELECT substring(refund_time, 1, 10) AS refund_time, a_pin, sum(refund_amt)AS refund_amt
FROM dwd.dwd_as_qy_iou_refund_s_d
WHERE refund_status='20090' AND dt='2018-05-15' AND a_order_no <> '12467657248'
AND a_refund_no <> '1610230919767139947'
GROUP BY substring(refund_time, 1, 10), a_pin )c
ON cast(a.a_pin AS string)=cast(c.a_pin AS string) AND a1.dim_day_txdate=c.refund_time
LEFT OUTER JOIN (SELECT dt, a_pin, sum(os_prcp_amt) AS os_prcp_amt
FROM dwd.dwd_as_qy_cycle_detail_s_d
WHERE dt>=concat(substr('2018-05-15', 1, 7), '-01') AND dt<='2018-05-15'
GROUP BY dt, a_pin)e
ON cast(a.jd_pin AS string)=cast(e.a_pin AS string) AND a1.dim_day_txdate=e.dt
GROUP BY a1.dim_day_txdate, a.a_pin;
使用SQLFlow进行分析
- 进入SQLFlow页面。SQLFlow
- 选择左侧第一个简单分析SQL菜单,将要分析的SQL脚本粘贴到编辑器内,并选择数据库类型为MySQL。
- 点击分析按钮,分析后得到右侧的data lineage。
从图中可知:
1,tmp_a_supp_achievement_an_mom_001
表由dim_day_txdate,a_pin,total_amount, refund_amt,prcp_amt这五个字段构成。
2,tmp_a_supp_achievement_an_mom_001
的各个字段的数据来源流向,其中dim_day_txdate字段是来源于dim_day_txdate
表;a_pin字段是来源于dwd_as_qy_cust_account_s_d
表;total_amount字段是来源于dwd_actv_as_qy_iou_receipt_s_d
表,经过Sum(Coalesce(b.amount, 0))得到结果;refund_amt字段是来源于dwd_as_qy_iou_refund_s_d
表经过Sum(Coalesce(c.refund_amt, 0))得到结果;prcp_amt字段是来源于dwd_as_qy_iou_refund_s_d
经过Sum(os_prcp_amt)得到结构结果。
3,dwd_as_qy_cust_account_s_d
表的涉及字段有a_pin,product_type。
4,dwd_as_qy_cycle_detail_s_d
表的涉及字段有a_pin,dt,os_prcp_amt。
5,dwd_as_qy_iou_refund_s_d
表的涉及字段有a_pin,refund_amt,refund_time。
6,dwd_actv_as_qy_iou_receipt_s_d
表的涉及字段有a_pin,tx_time,order_amt。
7,dim_day
表的涉及字段有dim_day。 - 鼠标可以移动到关系图中具体的字段上面看到其数据流向,和左侧的SQL脚本进行对比。
- 左侧的
schema explorer
菜单中可以查看到分析后的表,关系,更加直观的可以看出分析结果。
并且可以进行模糊搜索,使用非常方便。
- 在
summary
菜单中也可以看到分析后的表,关系等数据的统计数据。
- 在
text output
菜单中查看分析结果数据。
- 在
error message
菜单中可以查看SQL脚本分析异常的case,点击后可查看具体分析错误的SQL。
总结
以上就是使用SQLFlow对mysql的SQL继续分析得到表,以及字段间的数据血缘关系data lineage的案例。