血緣關系分析工具SQLFLOW--實踐指南


        SQLFlow 是用於追溯數據血緣關系的工具,它自誕生以來以幫助成千上萬的工程師即用戶解決了困擾許久的數據血緣梳理工作。

數據庫中視圖(View)的數據來自表(Table)或其他視圖,視圖中字段(Column)的數據可能來自多個表中多個字段的聚集(aggregation)。 表中的數據可能通過ETL從外部系統中導入。這種從數據的源頭經過各個處理環節,到達數據終點的數據鏈路關系稱為數據血緣關系(data lineage)。

        SQLFlow 通過分析各種數據庫對象的定義(DDL)、DML 語句、ETL/ELT中使用的存儲過程(Proceudre,Function)、 觸發器(Trigger)和其他 SQL 腳本,給出完整的數據血緣關系。

在大型數據倉庫中,完整的數據血緣關系可以用來進行數據溯源、表和字段變更的影響分析、數據合規性的證明、數據質量的檢查等。

       今日根據mysql的一個實例SQL進行進一步介紹該工具的具體操作:

示例語句:

MYSQL 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語句中各對象的關聯關系及每個對象參與運算的列名稱,如果存在多級運算,它的展示還包含各級的中間運算集合,讓你能夠清晰的閱讀,非常適合閱讀。

如下圖,淺綠色代表實體對象,紅色代表中間集合對象。

 

 

  • 顯示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的內容就先分享到這里,后續精彩繼續~~~

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM