天天看點

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

作者:站長之家

關鍵技術及實作

大資料渲染

由于動态探查場景下前端需要支援最大5000條資料的展示和互動,是以在渲染這塊存在比較大的壓力,主要集中在探查卡片和資料預覽兩個部分。

火山引擎DataLeap探查卡片包含了特定列的部分關鍵資訊彙總,比如0值、Null值、枚舉值等,如下圖紅框部分:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

火山引擎DataLeap探查卡片部分由于存在較多定制化内容,是以采用了虛拟清單方案進行渲染,支援收起狀态和展開狀态:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

資料預覽部分展示的是探查的全部資料集合,可以快速檢視原始資料的詳細内容,由于内容同質化比較高,是以火山引擎DataLeap資料預覽采用的是基于團隊内部維護的canvas版本Table方案進行渲染,如下圖紅框部分:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)
火山引擎DataLeap資料品質動态探查及相關前端實作(下)

卡片關聯

由于卡片和資料預覽列的寬度差異較大,并且上下兩部分滑動是獨立的,造成在選擇檢視某個具體列的時候,上下對齊位置會比較麻煩,為了解決這個問題,火山引擎DataLeap這塊增加了自動定位功能,示範效果如下:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

這部分需要解決的問題有兩個:卡片中間點坐标計算和自動定位邏輯。

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

中間點坐标計算邏輯如下:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

擷取到中點坐标後,自動定位需要符合如下規則:

1. 選中卡片後,表格要自動滾動定位到下方居中對齊,無法滿足對齊标準的,盡量靠近選中卡片位置。

2. 選中表格列後,卡片要自動滾動定位到上方居中對齊,無法滿足對齊标準的,盡量靠近選中表格位置。

3. 搜尋選中列後,卡片和表格要自動滿足上面兩個規則,并滾動到可視區域内。

規則中有幾種邊界情況,參考下圖:

居中對齊是對于卡片和列寬在scroll距離允許情況下的理想對齊方式,貼邊對齊是針對卡片在起始和結束位置scroll不足以滿足居中對齊要求時候的對齊方式,除此之外還有一種是卡片的寬度遠大于列寬,并且不是起始或者結束位置的時候所采取的對齊方式,如下如卡片B因為無法滾動,卡片A的寬度又占據了底部第二列的一部分,是以此時卡片B隻能高亮和底部的列進行對齊。

火山引擎DataLeap資料品質動态探查及相關前端實作(下)
火山引擎DataLeap資料品質動态探查及相關前端實作(下)

操作棧

火山引擎DataLeap動态探查支援了對于探查結果的基礎分析能力,比如列删除、過濾、排序等,如下圖紅框部分:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

使用者對于探查結果的每一次操作都會被記作一次操作,多次操作串聯起來形成操作棧,可以自由的修改或者删減操作棧裡的操作,并實時檢視最新結果,以過濾操作示範效果如下:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

操作棧部分需要處理的問題主要有以下幾點:

1.如何管理多種操作進行串行計算

這裡把所有操作都抽象成了Input + Logic = Ouput的結構,Input是輸入參數,此處可以是指某一列的資料、上一步操作的結果或者其他計算值,Logic是操作的具體邏輯,負責根據Input轉換生成Output,Output可以作為最終結果進行渲染,也可以再次進入下一環節參與計算,拿列删除操作舉個栗子,下面是大體代碼實作:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

可以看到ColDelOpt内部有一個run方法,該方法支援傳入一個包含了列資訊columns和資料集dataSourceMap的params對象,此處params即被抽象的外部輸入參數Input,run方法内部的邏輯部分即被抽象的Logic部分,最後方法傳回值包含了最新的columns和dataSourceMap,即為Output部分。基于這種結構,使用者所有的操作都可以被初始化成不同的Opt執行個體,由操作引擎統一調用執行個體的run方法,并傳入所需的參數,最終得到計算結果。

2.某個操作被修改後如何進行二次計算

操作棧的計算是由計算引擎來完成的,引擎負責根據外部事件,來自動執行現有操作的資料處理工作,引擎執行流程和大體代碼如下:

火山引擎DataLeap資料品質動态探查及相關前端實作(下)
火山引擎DataLeap資料品質動态探查及相關前端實作(下)

應用實踐

以一個小例子來示範下動态探查的使用。前端開發過程中,有一個真實的場景,火山引擎DataLeap研發人員為了排查一個豎屏顯示器的bug(1080*1920),想找到關聯的使用者,看其分布情況,就可以很友善的用動态探查去尋找。

火山引擎DataLeap資料品質動态探查及相關前端實作(下)

後續計劃

關注動态探查的操作豐富性以及之後的資料走向,比如離線資料導出,和生成SQL等,火山引擎DataLeap技術方向上主要放在以下幾個方面:

•更多的探查類型和圖表支援

動态探查目前支援空值,枚舉值,零值,資料統計等基礎的探查功能,未來會計劃支援包括map,json,time,sql語句等類型的識别和探查。同時提供更豐富的圖表支援。

•操作棧的編輯器體驗

動态探查目前還是以類Excel的操作為主,未來主要提供編輯器級别的操作體驗,可以提供HSQL支援的大部分函數,包括支援多表join功能。

•操作流程的SQL生成

動态探查目前的SQL能力還未建設完成,會在未來結合編輯器級别的操作,并支援多表,配合詞法解析功能,提供更精準的生成SQL能力。

繼續閱讀