資料血緣和元資料有緊密的聯絡,通常我們聊的資料血緣都指的是表與表之間的依賴關係,表a經過了某些操作生成了表b,那麼表a與表b有血緣關係。但資料血緣又不侷限於資料表之間。比如說資料表與離線etl任務的查詢寫入關係,與streaming入庫任務的查詢寫入關係,與儲存引擎的依賴關係等。當我們構建了資料來源、etl平台、排程平台、資料和各儲存引擎之間的關係,打通各系統之間的隔閡,以全域性的視角看資料的時候,是不是有種瞭如指掌的感覺?
回歸正題,如何構建各個系統,各個資料間的血緣?
首先你應該有乙個擴充套件性較好的血緣資料儲存方案,不僅僅是資料上面的可擴充套件,還有業務上面的可擴充套件,不能說後面多了乙個儲存引擎es,原有生成的關係和儲存方式要大改。該模組可以說是整個系統的核心。
其次你應該有乙個好的血緣解析模組。這一塊會比較複雜,不但要解析各種sql中表之間的依賴,還要解析table與平台任務id之間的關係。如果etl平台、排程平台等設計之初沒有考慮到血緣,沒留介面,這裡做起來會非常複雜。
再次你還需要乙個排程平台。一些平台的血緣解析是定時獲取資料解析的,你需要配置定時爬蟲獲取資料。
最後,如果每天新增的資料量很大,你可能需要乙個訊息佇列(kafka)快取血緣資料,起乙個消費任務從kafka同步資料到儲存引擎中。
其架構圖如下所示:
下面挑幾個重要的模組聊下。
這裡的type模仿了atlas中type概念,也像圖資料庫neo4j中的lable概念,是型別的總稱。這麼說可能會比較抽象,舉個例子你可以就懂了。比如說上節我們聊的資料地圖中的一張表,這張表的db是乙個type,字段資訊是乙個type,統計資訊是乙個type,表也是乙個type。如下圖所示:
圖中有5類type:table(表),field(字段),mysql(mysql db),es(elasticserch db),es_stat(es索引的統計資訊),mysql_stat(mysql 表的統計資訊)。
3類關係:hasa(table hasa field),belong(table belong db),stat(the statistics of table)
儲存方式:圖資料庫neo4j
提供的服務:type和其關係的curd
儲存內容:type和type間的關係
剛聊了db用圖資料neo4j儲存,索引模組一般用比較流行那兩個全文檢索引擎solr或elasticsearch(es),這裡以es為例聊下es資料的儲存方式和入庫方式。
這裡說資料同步有點不合適,其實neo4j和es的資料都是從mq(kafka)中消費得到的。同乙個時間二者資料可能會些稍微的差別,但最終會一致。neo4j中的每一類頂點對映到es則為乙個索引,neo4j中的關係也就是圖資料庫中的邊對映到es的邊索引(可以建多個邊索引,指定某一類邊放到乙個索引中)。具體例子如下:
table 索引:
field索引:
mysql db索引:
es db 索引:
es_stat索引:
mysql_stat索引:
edge索引:
這裡這麼拆分索引其實不合適,因為你會發現會有很多索引資料很少,可以將資料少的索引合併成乙個,減少頂點索引的個數。邊索引的拆分規則也是類似,資料多的拆出來,資料少的合併一起。
這裡主要涉及到依賴關係解析。所謂的依賴解析其實就是拿到資料表之間,資料表和各個平台任務的依賴關係。
資料表之間的依賴關係主要通過解析sql和平台任務獲取。
sql依賴解析這裡其實還是比較麻煩的。這裡有兩種方案,一種是用開源的庫,比如說atlas解析hive sql, spark sql的jar包;另一種是自己開發。由於我們這邊sql型別比較多,有mysql,clickhouse,hive等,所以這裡選擇了自己開發sql依賴解析。給大家推薦乙個好用的sql-parser庫moz-sql-parser,該庫可以將乙個sql轉化為json的形式。
json.dumps(parse("select a as hello, b as world from jobs"))
', ], "from": "jobs"}'
後面依據json解析關係就簡單多了。
平台任務解析
這裡的平台任務指的是任何非sql的轉換表的任務。由於各個公司的平台不一樣,但獲取表之間轉換關係的邏輯是相通的。這裡以筆者之前遇到過的分析平台為例。
分析平台有很多節點,比如說過濾節點,匹配節點,關係對計算節點等。使用者可以將不同的節點組成任務流,配置任務流後,平台可以定時排程。這裡以關係對計算節點為例聊下如何解析表之間的關係。
關係對計算節點中的計算邏輯非常複雜,但也是輸入幾張表,輸出一張表。所以我們這裡不管節點的計算邏輯,只管輸入表輸出表即可,也就是只管節點的配置資訊即可。針對於該節點我們開發了乙個外掛程式,只需要查詢節點的配置資訊,解析出輸入表輸出表,將依賴關係傳送到mq中即可。具體的資訊如下:
,
資料表與平台間的依賴解析其實就是記錄平台的哪個任務產生了這個資料表,與資料表再平台上的依賴解析類似。也是針對不同的平台(甚至平台中的節點)開發不同的外掛程式,將解析的資料寫到mq。還是上面的那個例子,關係對計算節點會產生如下的依賴資料:
這裡說的crawer其實就是離線計算血緣的模組。這裡考慮到並不是所有的血緣計算都是實時的,有些場景需要定時離線爬取資料。比如說所有的hive sql不是online hooks的方式實時計算血緣,而是將hive sql寫入db,起乙個定時的離線任務分析血緣,寫到mq。
下一節我們聊下資料質量平台。
sql 沒資料補零 SQL 小白入門小課堂
我老婆前陣子被老闆安排了乙個運營專案,需要寫 sql 分析資料。對於對 sql 一竅不通 甚至從沒接觸過 的我老婆來說,簡直抓瞎。鑑於我是前端工程師,搞全棧的時候也寫過不少 sql,剛好可以給她做乙個 sql 小課堂,專治 sql 小白入門。越來越多的職位要求資料分析能力,比如簡單的查乙個訂單,或複...
Db2資料遷移
db2資料遷移的方法大致有以下幾種 通過db2資料庫的備份和復原進行資料遷移 注意點 進行復原的時候要通過手動選擇備份,復原檔案時間設定要和備份的檔案上的時間戳一致 不能進行跨平台的遷移,如 從linux平台資料庫備份的檔案,不能復原到windows平台資料庫中 通過export to和import...
關於DB2的使用(DB2資料命令)
公司所用的資料庫有金倉和db2 首先要用命令視窗直接開啟db2需要在cmd中輸入 db2cmd 1 啟動db2資料庫 db2start 2 連線資料庫 db2 connect to 資料庫名稱 3 建立資料庫 db2 create db 資料庫名稱 4 刪除資料庫 db2 drop db 資料庫名稱...