《數據資產管理核心技術與應用》讀書筆記-第三章:數據血緣

来源:https://www.cnblogs.com/laoqing/p/18355127
-Advertisement-
Play Games

《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,全書共分10章,第1章主要讓讀者認識數據資產,瞭解數據資產相關的基礎概念,以及數據資產的發展情況。第2~8章主要介紹大數據時代數據資產管理所涉及的核心技術,內容包括元數據的採集與存儲、數據血緣、數據質量、數據監控與告警、數據服務、數據許可權 ...


《數據資產管理核心技術與應用》是清華大學出版社出版的一本圖書,全書共分10章,第1章主要讓讀者認識數據資產,瞭解數據資產相關的基礎概念,以及數據資產的發展情況。第2~8章主要介紹大數據時代數據資產管理所涉及的核心技術,內容包括元數據的採集與存儲、數據血緣、數據質量、數據監控與告警、數據服務、數據許可權與安全、數據資產管理架構等。第9~10章主要從實戰的角度介紹數據資產管理技術的應用實踐,包括如何對元數據進行管理以發揮出數據資產的更大潛力,以及如何對數據進行建模以挖掘出數據中更大的價值。

圖書介紹:數據資產管理核心技術與應用

今天主要是給大家分享一下第三章的內容:

第三章的標題為數據血緣

內容思維導圖如下:

 1、獲取數據血緣的技術實現

1.1、如何從Hive中獲取數據血緣

Hive 是典型的數據倉庫的代表,也是大數據中離線數據分層模型設計的代表,並且支持HQL的數據處理和計算,所以Hive為了方便用戶做數據跟蹤,在底層設計時,其實就考慮到了數據血緣跟蹤這個問題。Hive 自身的血緣在其源碼中主要通過org.apache.hadoop.hive.ql.hooks.LineageLogger.java 來輸出,org.apache.hadoop.hive.ql.hooks.LineageLogger.java代碼中主要處理的過程如下圖所示,血緣主要通過edges(DAG圖的流向)和vertices(DAG圖的節點)來進行輸出。《數據資產管理核心技術與應用》讀書筆記

在org.apache.hadoop.hive.ql.hooks.LineageLogger.java的源碼中定義了其支持的4種SQL操作類型,分別為QUERY(查詢)、CREATETABLE_AS_SELECT(將Select 查詢創建為一張表)、ALTERVIEW_AS(修改視圖)、CREATEVIEW(創建視圖)。

org.apache.hadoop.hive.ql.hooks.LineageLogger.java在解析和生成edges(DAG圖的流向)和vertices(DAG圖的節點)信息時,會判斷QueryPlan(查詢計劃)的類型是否是支持的4種SQL操作類型中的一種,如果不是的話,就不會解析和生成edges和vertices。

org.apache.hadoop.hive.ql.hooks.Hook.java是Hive提供的Hook(鉤子)功能,用於在Hive 任務執行前或者執行後,註入自定義的的操作代碼。

具體的代碼實現,可以直接參考紙質書,這裡不再贅述。

1.2、 從Spark 執行計劃中獲取數據血緣

Spark底層生成執行計劃以及處理執行計劃的過程如下圖所示。

從圖中可以看到,

1、 執行SQL語句或者Data Frame時,會先生成一個Unresolved Logical Plan,就是沒有做過任何處理和分析的邏輯執行計劃,僅僅會從SQL語法的角度做一些基礎性的校驗。

2、 之後通過獲取Catalog的數據,對需要執行的SQL語句做表名、列名的進一步分析校驗,從而生成一個可以直接運行的邏輯執行計劃。

3、 但是Spark底層會有個優化器來生成一個最優的執行操作方式,從而生成一個優化後的最佳邏輯執行計劃。

4、 將最終確定下來的邏輯執行計劃轉換為物理執行計劃,轉換為最終的代碼進行執行。

Spark的執行計劃其實就是數據處理的過程計劃,會將SQL語句或者DataFrame 做解析,並且結合Catalog一起,生成最終數據轉換和處理的代碼。所以可以從Spark的執行計劃中,獲取到數據的轉換邏輯,從而解析到數據的血緣。但是spark的執行計劃都是在spark底層內部自動處理的,如何獲取到每次Spark任務的執行計劃的信息呢?其實在Spark底層有一套Listener的架構設計,可以通過Spark Listener 來獲取到spark 底層很多執行的數據信息。

在spark的源碼中,以Scala的形式提供了一個org.apache.spark.sql.util.QueryExecutionListener  trait (類似Java 語言的介面),來作為Spark SQL等任務執行的監聽器。在org.apache.spark.sql.util.QueryExecutionListener  中提供瞭如下表所示的兩個方法。《數據資產管理核心技術與應用》讀書筆記

方法名

描述

def onSuccess(funcName: String, qe: QueryExecution, durationNs: Long): Unit

執行成功時,調用的方法,其中包括了執行計劃參數,這裡的執行計劃可以是邏輯計劃或者物理計劃

def onFailure(funcName: String, qe: QueryExecution, exception: Exception): Unit

執行失敗時,調用的方法,其中同樣也包括了執行計劃參數,這裡的執行計劃可以是邏輯計劃或者物理計劃

因此可以借用QueryExecutionListener  來主動讓Spark在執行任務時,將執行計劃信息推送到自己的系統或者資料庫中,然後再做進一步的解析,如下圖

具體的代碼實現,由於代碼較多,請參考紙質書。

1.3、 從Spark  SQL語句中獲取數據血緣

在Spark任務處理中,通過SQL語句來實現離線的ETL 數據處理是其在大數據中最常見的應用方式,如下圖所示針對這種應用場景,可以直接通過獲取Spark 中運行的SQL語句,然後通過解析SQL語句,並且結合Catalog,來分析出SQL 語句中包含的輸入表和輸出表的數據血緣關係。《數據資產管理核心技術與應用》讀書筆記

有了通過SQL語句來解析血緣的思路後,需要解決的問題就是怎麼自動抓取到Spark中運行的SQL語句。在上面的敘述中,有提到過Spark 有Listener的機制,org.apache.spark.sql.util.QueryExecutionListener只是Listener中的一種,可以通過Listener的方式自動獲取到Spark的相關執行信息。在Spark中提供了org.apache.spark.scheduler.SparkListener這個底層抽象類來供上層代碼監聽Spark在整個生命執行周期中的相關事件消息,如下圖所示。

獲取Spark 執行的SQL 語句的整體流程總結如下圖

具體的代碼實現,由於代碼較多,請參考紙質書。

1.4、 從Flink中獲取數據血緣

FlinkSQL 在底層執行時,大概包含瞭如下的5個步驟,其底層執行過程和SparkSQL非常的類似。

  • 第一步:對即將執行的SQL語句做語法分析,此時會通過Apache Calcite 將SQL語句直接轉換為AST (Abstract Syntax Tree的簡寫,翻譯過來就是抽象語法樹),也就是Calcite 中的SqlNode節點樹。Calcite是一個開源的SQL解析工具,Flink在底層技術實現時,集成了Calcite作為其底層的SQL語句解析器, Calcite的Github 地址為https://github.com/apache/calcite/,相關的更多介紹可以參考官方文檔網址:https://calcite.apache.org/docs/
  • 第二步:根據查詢到的元數據對SQL語句中的語法進行校驗,通過第一步中獲取到的SqlNode節點樹中的信息來獲取SQL語句中包含的表、欄位、函數等信息,然後通過和元數據進行比對來判斷SQL語句中包含的表、欄位等信息在元數據中是否存在。
  • 第三步:通過結合元數據信息對SqlNode節點樹的進一步解析得到關係表達式樹,生成初步的邏輯執行計劃。
  • 第四步:對第三步生成的邏輯執行計划進行進一步優化得到最優的邏輯執行計劃,這一步得到結果還是關係表達式樹。
  • 第五步:將邏輯執行計劃轉變為物理執行計劃,提交給Flink 集群進行執行。《數據資產管理核心技術與應用》讀書筆記

具體的代碼實現,由於代碼較多,請參考紙質書。

1.5、   從數據任務的編排系統中獲取數據血緣

        數據任務的編排系統通常是對不同的數據節點類型的任務進行前後運行順序以及依賴關係的編排,如下圖所示。

具體的代碼實現,由於代碼較多,請參考紙質書。

2、數據血緣的存儲模型與展示設計

從架構設計的角度來看,血緣數據存儲需要註意如下幾點:《數據資產管理核心技術與應用》讀書筆記

  • 可擴展性:支持對數據血緣的源端進行擴展,比如當前只需要支持 Hive、Spark執行計劃、Spark SQL等,但是未來可能會新增其他數據血緣來源。如果出現新的數據血緣來源時,要做到對現有的設計不做改動便可支持。
  • 可跟蹤性:需要記錄數據血緣的變更記錄,方便將來做追蹤,比如數據血緣出現變更時,需要將其變更的過程記錄下來,而不是在數據血緣發生變化後,直接替換現有的已經採集入庫的數據血緣關係。
  • 可維護性:支持手動維護,比如支持人工維護數據血緣或者數據血緣採集錯誤時,支持人工修改。

數據血緣的採集和處理的過程通常如下圖所示,實時獲取原始數據,然後發送到類似Kafka這樣的消息隊列中,然後對原始數據進行解析,生成血緣數據,然後入庫保存。

在血緣數據解析入庫後,就可以對數據血緣做展示了,關於數據血緣的展示設計參考如下圖所示,一般需要註意如下幾點:

  • 支持表級血緣,預設展示表級血緣關係,選擇單個表時,還可以點擊查看該表的上游血緣或者下游血緣。
  • 詳情中支持欄位級血緣展示,點擊圖中表的欄位詳情時,可以繼續展開顯示欄位級的血緣關係。
  • 血緣關係中,支持點擊查看血緣的解析來源,比如SparkSQL語句、Spark執行計劃等。

從下圖可以看到表與表之間以及欄位與欄位之間的血緣關係展示。當某一張表發生變更時,很容易的就知道對下游或者上游的哪些表和欄位產生影響,從而可以加快很多問題的處理和定位。在使用某張表的數據時,也能追溯到該表的原始數據表以及經過了哪些中間表的處理,數據的鏈路變得非常清晰,對數據的使用者來說,產生了極大的幫助。《數據資產管理核心技術與應用》讀書筆記

作者的原創文章,轉載須註明出處。原創文章歸作者所有,歡迎轉載,但是保留版權。對於轉載了博主的原創文章,不標註出處的,作者將依法追究版權,請尊重作者的成果。
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是i.MXRT1050在GPIO上增加RC延時電路後導致邊沿中斷誤觸發問題探析。 前段時間有一個 RT1052 客戶反饋了一個有趣的問題,他們設計得是一個帶 LCD 屏交互的應用,應用以官方 SDK 里的 lvgl_demo_widget ...
  • 家裡的機頂盒淘汰下來,博主想要物盡其用,看看是否能將其改造為一臺Linux"開發機",為其安裝Ubuntu系統,故開始倒騰 ...
  • 寫在前面 本隨筆是非常菜的菜雞寫的。如有問題請及時提出。 可以聯繫:[email protected] GitHhub:https://github.com/WindDevil (目前啥也沒有 本節重點 主要是對 任務 的概念進行進一步擴展和延伸:形成 任務運行狀態:任務從開始到結束執行過程中所處的 ...
  • 第十八章 machine.Timer類實驗 1)實驗平臺:正點原子DNK210開發板 2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0 3)購買鏈接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套實驗源碼+手冊+ ...
  • 導讀 還是要先看官方手冊. 學過DMA的同志可能比較好理解,一句話, 釋放CPU匯流排 : 如果把應用程式執行的整個過程進行進一步分析,可以看到,當程式訪問 I/O 外設或睡眠時,其實是不需要占用處理器的,於是我們可以把應用程式在不同時間段的執行過程分為兩類,占用處理器執行有效任務的計算階段和不必占用 ...
  • 最近在Mac上想要遠程一臺Linux伺服器,結果不知怎麼的就不能使用以前的ssh登錄了 iot@ios-iMac ~ % ssh [email protected] Unable to negotiate with 192.168.1.230 port 22: no matching host k ...
  • 文件上傳到伺服器先 一般傳到伺服器目錄 mkdir /usr/local/install_package 資料庫 版本:Postgresql 9.5.20 檢查依賴環境 gcc-c++環境,有日誌列印就是有安裝,新伺服器一般都只有gcc沒有g++ gcc -v g++ -v rpm -qa | gr ...
  • Apache Doris設計思想介紹與應用場景 MPP ( Massively Parallel Processing ),即大規模並行處理,在資料庫非共用集群中,每個節點都有獨立的磁碟存儲系統和記憶體系統,業務數據根據資料庫模型和應用特點劃分到各個節點上,每台數據節點通過專用網路或者商業通用網路互相 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...