馬哈魚血緣分析工具介紹
- 2022 年 2 月 5 日
- 筆記
- SQLFlow 血緣關係 job 數據流 數據分析, 馬哈魚

1、數據流單元
數據流單元包括源實體、目標實體以及它們之間的數據流類型。
SELECT p.FirstName from Person.Person AS p
這是為上述SQL查詢生成的數據流。
person.persion.FirstName -> direct -> RS-1.FirstName

1.1 源、目標實體
源實體和目標實體通常引用表、視圖和其他關係,例如公共表表達式、查詢執行期間生成的結果集。它也可能指HDFS系統中的文件等。
1.2 數據流類型
數據流有兩種類型:直接數據流(direct )和間接數據流(indirect )。
1.2.1 直接數據流(direct )
直接數據流意味著目標實體的數據直接來自源實體。
在上圖中,RS-1.FirstName。直接來自Person.FirstName。
箭頭用於表示圖表中的直接數據流:

1.2.2 間接數據流(indirect )
間接數據流意味著目標列的數據不是來自源列,而是源列/表的數據影響目標列的結果數據。
虛線箭頭用於表示圖表中的間接數據流:

間接數據流中的源列通常出現在以下子句中:
-
Where 子句
-
Group by 子句
-
Winddows function
-
Join condition
SELECT deptno, COUNT() num_emp, SUM(SAL) sal_sum
FROM scott.emp
GROUP BY deptno
COUNT()和SUM(SAL)的值受group by子句中deptno列的值影響。因此,間接數據流將如下創建:
scott.emp.deptno -> indirect -> COUNT()
scott.emp.deptno -> indirect -> SUM(SAL)

對於其他間接數據流,我們將在後面討論。
1.2.3 Join操作符
Join在聯接條件中的兩個或多個列之間建立鏈接。嚴格地說,這種關係不是數據流類型。
select b.teur from tbl a left join TT b on (a.key=b.key)
分析上述SQL後將創建連接關係。它表示tbl之間的連接關係,在tbl.key和TT.key之間。

2、數據流中的實體
在兩個實體之間構建數據流時:源實體和目標實體。它們可以是列到列、表到列或表到表。
2.1 列對列
這是最常見的情況,數據流中的兩個實體都是列。
2.2 表對列
當我們說一個表影響一列的值時,我們通常指的是一個表的行總數影響一列的值,通常,這個列是從COUNT()函數派生出來的。
SELECT COUNT() num_emp FROM scott.emp
表到列的數據流通過使用表RelationRows的 psedou列來表示,這將從scott構建一個間接數據流,關係行RS-1.num_emp。
scott.emp.RelationRows -> indirect -> COUNT() -> RS-1.num_emp

2.3 表對錶
有時,兩個表之間會有數據流。例如,在 alter table rename SQL 語句, 將創建一個表到表的數據流。實際上,表到表的數據流由使用 RelationRows表 pseudo 列.
alter table t2 rename to t3;

3、數據血緣
數據血緣關係由許多基本的數據流單元組成。
CREATE VIEW vsal
AS
SELECT a.deptno "Department",
a.num_emp / b.total_count "Employees",
a.sal_sum / b.total_sal "Salary"
FROM (SELECT deptno,
Count() num_emp,
SUM(sal) sal_sum
FROM scott.emp
WHERE city = 'NYC'
GROUP BY deptno) a,
(SELECT Count() total_count,
SUM(sal) total_sal
FROM scott.emp
WHERE city = 'NYC') b
數據血緣分析圖:

輸出也可以是XML或JSON格式。
4、參考
馬哈魚數據血緣分析器:
馬哈魚數據血緣分析器中文網站:

