最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

揭秘|來看看袋鼠云數(shù)棧內(nèi)部的資產(chǎn)血緣方案設(shè)計(jì)與實(shí)現(xiàn)

2023-07-20 14:51 作者:袋鼠云  | 我要投稿

數(shù)據(jù)資產(chǎn)現(xiàn)在需要接入數(shù)棧內(nèi)部相關(guān)應(yīng)用的時(shí)候,支持查看血緣的類型從表、離線任務(wù)增加到需要表、離線任務(wù)、實(shí)時(shí)任務(wù)、API任務(wù)、指標(biāo)、標(biāo)簽等,需要支持?jǐn)?shù)?,F(xiàn)有的所有應(yīng)用任務(wù),最終實(shí)現(xiàn)在數(shù)據(jù)資產(chǎn)平臺(tái)查看任務(wù)的完整應(yīng)用鏈路。

雖然增加不同的任務(wù),現(xiàn)階段資產(chǎn)實(shí)現(xiàn)的血緣大體上能夠滿足需求,但是也會(huì)出現(xiàn)問題,因此需要進(jìn)行技術(shù)革新。本文將聚焦資產(chǎn)血緣的實(shí)現(xiàn)方案,并介紹袋鼠云數(shù)棧在數(shù)據(jù)血緣建設(shè)過程中所遇到的挑戰(zhàn)和技術(shù)實(shí)現(xiàn)。

資產(chǎn)血緣的當(dāng)前問題

現(xiàn)階段血緣展示內(nèi)容重復(fù)高

在資產(chǎn)的 A 任務(wù)血緣鏈路中,C/D 任務(wù)下游均為 E 任務(wù),當(dāng)我們同時(shí)打開了 C/D 任務(wù)的下游節(jié)點(diǎn),就會(huì)發(fā)現(xiàn)大量的重復(fù)節(jié)點(diǎn)出現(xiàn),但本質(zhì)上他們是一模一樣的任務(wù)節(jié)點(diǎn),如下圖。

當(dāng)一條血緣上的任務(wù)越多,出現(xiàn)上述問題的概率增大,會(huì)導(dǎo)致畫布內(nèi)容顯示的都是重復(fù)節(jié)點(diǎn),查看血緣關(guān)系效率低下。

期望能夠做到同一個(gè)節(jié)點(diǎn)只在畫布中展示一次,在這個(gè)節(jié)點(diǎn)存在于畫布中時(shí),后續(xù)再有相同節(jié)點(diǎn)就做共用,如下圖。

逆向血緣的展示

先簡(jiǎn)單介紹一下,何為逆向血緣?用 API 任務(wù)舉例子來說:

在 API 平臺(tái)中,通過 DQL 模式使用兩張表創(chuàng)建一個(gè) API,在資產(chǎn)平臺(tái)以 API 任務(wù)進(jìn)入血緣就會(huì)展示如下圖的血緣關(guān)系。如果 Table A 已經(jīng)同步到了資產(chǎn)平臺(tái),以 Table A 表進(jìn)入血緣,希望展示如下圖的血緣關(guān)系。

由于 API 是由 Table A/B 共同生成的,因此需要在 API 左側(cè)展示加號(hào),能夠?qū)?Table B 加載出來,這就是逆向血緣,也是全鏈路實(shí)現(xiàn)的重要一環(huán)。

相似數(shù)據(jù)源

當(dāng)同一個(gè)數(shù)據(jù)源被不同的引擎連接之后,會(huì)產(chǎn)生不同的數(shù)據(jù)源A或數(shù)據(jù)源A1,但是實(shí)際上底層是同一個(gè)數(shù)據(jù)源,被我們稱之為相似數(shù)據(jù)源。

此時(shí)任務(wù)1和任務(wù)2并不會(huì)有相關(guān)聯(lián)系,但其實(shí)它兩用的是相同的底層表,展示是不符合期望的,希望能夠在血緣展示上將其視為同一張表,相關(guān)的任務(wù)也能關(guān)聯(lián)展示。

上述問題成為資產(chǎn)實(shí)現(xiàn)全鏈路血緣需要去實(shí)現(xiàn)或者優(yōu)化的當(dāng)前血緣方案的理由,下文將給出對(duì)應(yīng)問題的解決方案。

資產(chǎn)血緣實(shí)現(xiàn)解決方案

前置內(nèi)容了解

● 任務(wù)血緣數(shù)據(jù)結(jié)構(gòu)

● 字段血緣數(shù)據(jù)結(jié)構(gòu)

● 血緣關(guān)系圖

· 初始化時(shí)默認(rèn)展示3層:即只展示以數(shù)據(jù)表本節(jié)點(diǎn)為中心,上下游分別的一個(gè)節(jié)點(diǎn),共3層

· 節(jié)點(diǎn)可擴(kuò)展:點(diǎn)擊“+”按鈕,在節(jié)點(diǎn)前方或后方再展示出3個(gè)節(jié)點(diǎn);點(diǎn)擊“-”按鈕,斷開該“-”按鈕對(duì)應(yīng)的連線

· 右鍵:在非中心節(jié)點(diǎn)上,添加右鍵菜單“查看此節(jié)點(diǎn)血緣”;鼠標(biāo)右鍵可查看當(dāng)前節(jié)點(diǎn)血緣,以該節(jié)點(diǎn)為中心的血緣

整體思路

● 實(shí)現(xiàn)節(jié)點(diǎn)共用

我們想要去實(shí)現(xiàn)節(jié)點(diǎn)共用,就會(huì)去判斷當(dāng)前節(jié)點(diǎn)是否已經(jīng)存在于 graph 中,如果存在我們就不再渲染節(jié)點(diǎn),否則就去渲染節(jié)點(diǎn),這樣就可以實(shí)現(xiàn)節(jié)點(diǎn)只被渲染一次。

對(duì)于每一個(gè)節(jié)點(diǎn)信息來說,tableKey 都是唯一的,因此我們將 tableKey 作為每一個(gè) vertex 的唯一標(biāo)識(shí),在創(chuàng)建 vertex 時(shí),傳入 tableKey 作為唯一標(biāo)識(shí)。

如果我們采用上述的想法,那這個(gè)節(jié)點(diǎn)可以同時(shí)成為中心節(jié)點(diǎn)的上游節(jié)點(diǎn)和下有節(jié)點(diǎn),甚至就是中心節(jié)點(diǎn)。因此我們需要更改我們存儲(chǔ)節(jié)點(diǎn)的結(jié)構(gòu),需要存儲(chǔ)節(jié)點(diǎn)作為上游節(jié)點(diǎn)的信息以及作為下有節(jié)點(diǎn)的信息。

當(dāng)從后端請(qǐng)求來數(shù)據(jù)之后,我們需要對(duì)數(shù)據(jù)做一個(gè)整理,不再存放在 state 中,而是將其存在以 tableKey 為 key,名為 vertexMap 的 Map 對(duì)象中。后續(xù)的渲染對(duì)象,也根據(jù) vertexMap 去做渲染。

vertexMap 的定義如下,主要用于存儲(chǔ) tableKey 為鍵值的節(jié)點(diǎn)信息。

通過 checkData 方法來將后端給的數(shù)據(jù)處理到 vertexMap 中,重點(diǎn)是需要整合同為上游節(jié)點(diǎn)或者同為下游節(jié)點(diǎn)的數(shù)據(jù)。

上述是對(duì)血緣數(shù)據(jù)的處理,對(duì)于整個(gè)血緣圖節(jié)點(diǎn)如下圖:

● 如何控制節(jié)點(diǎn)擴(kuò)展

當(dāng)我們的每一個(gè)節(jié)點(diǎn)被渲染出來的時(shí)候,可能會(huì)存在按鈕,可以展開上下三層的更多節(jié)點(diǎn)。由于節(jié)點(diǎn)共用以及需要支持逆向血緣的需求,因此按鈕的狀態(tài)會(huì)發(fā)生變化:

· 中心節(jié)點(diǎn)不會(huì)有按鈕

· 中心節(jié)點(diǎn)下游節(jié)點(diǎn)有下游血緣時(shí),有右側(cè)按鈕;存在逆向血緣時(shí),有左側(cè)按鈕

· 中心節(jié)點(diǎn)上游節(jié)點(diǎn)有上游血緣時(shí),有左側(cè)按鈕;存在逆向血緣時(shí),有右側(cè)按鈕

注意是否存在逆向血緣,通過后端接口的 isOpen 標(biāo)識(shí)來做判斷。

對(duì)于普通的 + 號(hào)來說,點(diǎn)擊 + 號(hào)時(shí),一次性會(huì)請(qǐng)求三層數(shù)據(jù);對(duì)于逆向血緣的 + 號(hào)來說,一次性請(qǐng)求一層數(shù)據(jù);點(diǎn)擊 - 號(hào)來說,會(huì)將其后續(xù)的節(jié)點(diǎn)都收起來。

對(duì)于每一個(gè)節(jié)點(diǎn)來說,我們會(huì)添加 isParentShow/isChildShow 來表示當(dāng)前節(jié)點(diǎn)上下游是否展開。

· 收起操作:如果點(diǎn)擊的按鈕處于展開狀態(tài),則將相關(guān)聯(lián)節(jié)點(diǎn)收起。點(diǎn)擊右邊按鈕時(shí),對(duì)當(dāng)前節(jié)點(diǎn)設(shè)置 isChildShow = false;點(diǎn)擊左邊按鈕時(shí),對(duì)當(dāng)前節(jié)點(diǎn)設(shè)置isParentShow = false。

· 展開操作:如果點(diǎn)擊的按鈕處于收起狀態(tài),則將相關(guān)聯(lián)節(jié)點(diǎn)展開。點(diǎn)擊右邊按鈕時(shí),如果不存在 sonLineage 說明尚未獲取過血緣節(jié)點(diǎn)信息,向后端發(fā)起請(qǐng)求;否則對(duì)當(dāng)前節(jié)點(diǎn)設(shè)置isChildShow = true。對(duì)于左邊按鈕也是如此。

相關(guān)的判斷流程如下圖:

● 如何處理增加/刪除節(jié)點(diǎn)

我們可以采用右鍵去插入血緣表或者插入影響表。當(dāng)我們?nèi)プ霾迦胙壊僮鞯臅r(shí)候,也分為兩種情況,判斷當(dāng)前節(jié)點(diǎn)是否已經(jīng)加載過上游、下游節(jié)點(diǎn),如果加載過,直接把新血緣數(shù)據(jù)添加到 vertexMap 中;否則,向后端發(fā)起請(qǐng)求,獲取當(dāng)前節(jié)點(diǎn)的血緣數(shù)據(jù)。

對(duì)于刪除節(jié)點(diǎn)來說,不能夠再像之前那樣找到其父級(jí)節(jié)點(diǎn)刪除對(duì)應(yīng)節(jié)點(diǎn)之后再重新渲染畫布,對(duì)于節(jié)點(diǎn)共用來說,這會(huì)出現(xiàn)問題。在資產(chǎn)平臺(tái)來說,血緣節(jié)點(diǎn)分為兩種,一種是通過 sqlParser 解析出來的,不能夠進(jìn)行手動(dòng)刪除;另一種是我們通過右鍵手動(dòng)添加的,是可以刪除的。

當(dāng)我們遇到手動(dòng)添加和解析出來的節(jié)點(diǎn)共用時(shí),我們進(jìn)行刪除就需要特殊處理,將解析出來節(jié)點(diǎn)的相關(guān)信息保留下來。

在我們插入節(jié)點(diǎn)的時(shí)候,我們會(huì)根據(jù)后端標(biāo)識(shí)位 withManual 得知是解析還是手動(dòng)添加的,使用 canDeleteData 維護(hù)手動(dòng)添加的節(jié)點(diǎn)父級(jí)信息。

在最開始我們實(shí)現(xiàn)節(jié)點(diǎn)共用的時(shí)候,我們將同一個(gè)節(jié)點(diǎn)的 sonIds/sonLineage 等信息通過 checkData 方法整合在一起,刪除的時(shí)候應(yīng)該配合 canDeleteData 把對(duì)應(yīng)的數(shù)據(jù)一同清理掉。

刪除操作的大致流程如下圖:

● 處理特殊的類型節(jié)點(diǎn)

由于承接了各個(gè)應(yīng)用的血緣展示,不乏一些特殊的節(jié)點(diǎn),常規(guī)的方案無法滿足節(jié)點(diǎn)展示需求,因此需要做特殊處理。

對(duì)于實(shí)時(shí)的 FlinkSQL 就是需要特殊處理的,虛線框中的是 FlinkSQL 的相關(guān)內(nèi)容,和映射源表、映射結(jié)果表連接的節(jié)點(diǎn)需要用虛線連接。

對(duì)于 FlinkSQL 的相關(guān)數(shù)據(jù)后端存放于 metaDataInfo 中,parentFlinkInfos 表示映射源表,sonFlinkInfos 表示映射結(jié)果表。

因此根據(jù) FlinkSQL 所處的位置不同,會(huì)有不同的渲染邏輯:

· 中心節(jié)點(diǎn)

渲染 parentFlinkInfos 創(chuàng)建 parentFlinkTableNode 與 FlinkSQL 節(jié)點(diǎn)實(shí)線連接,parentFlinkTableNode 再和上游節(jié)點(diǎn)使用虛線連接;渲染 sonFlinkInfos 創(chuàng)建 sonFlinkTableNode 與 FlinkSQL 節(jié)點(diǎn)實(shí)線連接,創(chuàng)建的 sonFlinkTableNode 再和下游節(jié)點(diǎn)使用虛線連接。

· 上游節(jié)點(diǎn)

渲染 sonFlinkInfos 創(chuàng)建 sonFlinkTableNode 與當(dāng)前節(jié)點(diǎn)虛線連接,渲染 FlinkSQL 節(jié)點(diǎn)和 sonFlinkTableNode 實(shí)線連接,渲染 parentFlinkInfos 創(chuàng)建 parentFlinkTableNode 與 FlinkSQL 節(jié)點(diǎn)實(shí)線連接,parentFlinkTableNode 再去和別的上游節(jié)點(diǎn)使用虛線連接。

· 下游節(jié)點(diǎn)

渲染 parentFlinkInfos 創(chuàng)建 parentFlinkTableNode 與當(dāng)前節(jié)點(diǎn)虛線連接,渲染 FlinkSQL 節(jié)點(diǎn)和 parentFlinkTableNode 實(shí)線連接,渲染 sonFlinkInfos 創(chuàng)建 sonFlinkTableNode 與 FlinkSQL 節(jié)點(diǎn)實(shí)線連接,sonFlinkTableNode 再去和別的下游節(jié)點(diǎn)使用虛線連接。

● 相似數(shù)據(jù)源

在相似數(shù)據(jù)源上,前端并沒有對(duì)其做過的處理,均為后端判斷為相似數(shù)據(jù)源給到前端做相關(guān)展示。

● 字段級(jí)血緣

上述講的都是表級(jí)血緣的實(shí)現(xiàn),字段級(jí)血緣也實(shí)現(xiàn)了節(jié)點(diǎn)共用等功能,整體思路和表級(jí)血緣一致。唯一需要注意的是實(shí)時(shí)的字段血緣,如果存在兩個(gè)結(jié)果表時(shí),會(huì)存在多個(gè)中心節(jié)點(diǎn),所以需要遍歷,渲染兩個(gè)中心節(jié)點(diǎn)。

《數(shù)據(jù)治理行業(yè)實(shí)踐白皮書》下載地址:https://fs80.cn/380a4b

《數(shù)棧V6.0產(chǎn)品白皮書》下載地址:https://fs80.cn/cw0iw1

想了解或咨詢更多有關(guān)袋鼠云大數(shù)據(jù)產(chǎn)品、行業(yè)解決方案、客戶案例的朋友,瀏覽袋鼠云官網(wǎng):https://www.dtstack.com/?src=szinfoq

同時(shí),歡迎對(duì)大數(shù)據(jù)開源項(xiàng)目有興趣的同學(xué)加入「袋鼠云開源框架釘釘技術(shù) qun」,交流最新開源技術(shù)信息,qun 號(hào)碼:30537511,項(xiàng)目地址:https://github.com/DTStack


揭秘|來看看袋鼠云數(shù)棧內(nèi)部的資產(chǎn)血緣方案設(shè)計(jì)與實(shí)現(xiàn)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
淮北市| 德阳市| 嘉禾县| 承德县| 玉屏| 额敏县| 寿阳县| 巢湖市| 鲁山县| 满洲里市| 城口县| 大冶市| 湄潭县| 尼玛县| 临高县| 曲麻莱县| 志丹县| 马尔康县| 沅陵县| 夏河县| 古蔺县| 崇礼县| 孟津县| 洪雅县| 民和| 延寿县| 财经| 道孚县| 金华市| 鸡泽县| 彭州市| 同德县| 漳浦县| 镇原县| 江西省| 西贡区| 晋州市| 蒙自县| 鞍山市| 浪卡子县| 临安市|