領域團隊如何將(jiāng)他們的運營數據引入數據平台?根據領域驅動設計原則設計的軟件系統包含作爲可變實體/聚合和不可變領域事(shì)件的數據。
領域事(shì)件非常适合被攝取到數據平台中,因爲它們代表了相關的業務事(shì)實。如果有一個消息傳遞系統,則可以通過(guò)附加一個額外的消息消費者將(jiāng)域事(shì)件轉發(fā)到數據平台。數據可以實時采集、處理并轉發(fā)到數據平台。通過(guò)這(zhè)種(zhǒng)流式攝取,數據在到達時以小批量發(fā)送,因此可立即用于分析。由于領域事(shì)件已經(jīng)被很好(hǎo)地定義,除了 PII 數據的重複數據删除和匿名化之外,在清理和預處理方面(miàn)幾乎沒(méi)有什麼(me)可做的。有時,還(hái)建議定義和攝取包含僅與分析用例相關的信息的内部分析事(shì)件,這(zhè)樣就不必修改域事(shì)件。
流式攝取示例:Kafka Connect、Kafka Streams、AWS Lambda
許多業務對(duì)象作爲實體和聚合保存在 SQL 或 NoSQL 數據庫中。它們的狀态會随着時間而變化,并且最新的狀态隻保存在數據庫中。具有狀态的實體的有力候選者是文章、價格、客戶數據或裝運狀态。對(duì)于分析用例,通常需要同時擁有最新狀态和一段時間内的狀态曆史。有幾種(zhǒng)攝取實體的方法。一種(zhǒng)方法是生成(chéng)并發(fā)布onCreate/onUpdate/onDelete 事(shì)件每次更改實體時都(dōu)使用當前狀态,例如通過(guò)添加 方面(miàn) 或實體監聽器 . 然後(hòu)可以使用流式攝取來攝取上述數據。當更改操作軟件不可行時,可以使用更改數據捕獲 (CDC)直接監聽數據庫更改并將(jiāng)其流式傳輸到數據平台。
CDC 流的示例:Debezium
最後(hòu),可以設置將(jiāng)數據導出到文件并將(jiāng)其加載到平台中的傳統預定ELT 或 ETL 作業,其缺點是沒(méi)有實時數據,在導出之間沒(méi)有所有階段更改,并且需要整合導出的數據再次。但是,對(duì)于大型機等遺留系統來說,它們是一個可行的選擇。
幹淨的數據是有效數據分析的基礎。使用數據網格,域團隊負責執行數據清理。他們了解自己的領域,并且可以确定需要處理其領域數據的原因和方式。
攝取到數據平台中的數據通常以其原始的原始和非結構化格式導入。使用列式數據庫時,這(zhè)可能(néng)是每個包含 CLOB 的事(shì)件的行事(shì)件負載的字段,可能(néng)是 JSON 格式。現在可以對(duì)其進(jìn)行預處理以獲取幹淨的數據:
- 結構化:將(jiāng)非結構化和半結構化數據轉換爲分析數據模型,例如,通過(guò)將(jiāng) JSON 字段提取到列中。
- 緩解結構變化:當數據結構發(fā)生變化時,緩解它們,例如,通過(guò)用合理的默認值填充空值。
- 重複數據删除:由于大多數分析存儲系統都(dōu)是僅追加的,因此無法更新實體和事(shì)件。删除所有重複條目。
- 完整性:确保數據包含約定的時間段,即使在攝取期間存在技術問題。
- 修複異常值:識别并糾正可能(néng)因錯誤而出現的無效數據。
從實現的角度來看,這(zhè)些預處理步驟可以實現爲投影原始數據的簡單 SQL 視圖。查詢可以通過(guò) 公用表表達式 來組織(CTE)并且可以通過(guò)用戶定義的功能(néng) 進(jìn)行增強(UDF),例如,用于 JSON 處理。作爲替代方案,清理步驟可以實現爲對(duì)主題進(jìn)行操作的 lambda 函數。可以使用dbt 等框架構建更複雜的管道(dào)或 Apache Beam 它提供了高級編程模型,但也需要掌握更多技能(néng)。
分析
爲了獲得洞察力,領域團隊查詢、處理和聚合他們的分析數據以及來自其他領域的相關數據産品。
SQL是大多數分析查詢的基礎。它提供了強大的功能(néng)來連接和調查數據。數據平台應該高效地執行連接操作,即使對(duì)于大型數據集也是如此。聚合用于對(duì)數據進(jìn)行分組,窗口函數有助于跨多行執行計算。筆記本有助于建立和記錄探索性發(fā)現。
示例:Jupyter 筆記本、Presto
人類在視覺上感知數據、趨勢和異常時,會更容易理解它們。有許多出色的數據可視化工具可以構建漂亮的圖表、關鍵績效指标概覽、儀表闆和報告。它們提供了一個易于使用的 UI 來向(xiàng)下鑽取、過(guò)濾和聚合數據。
示例:Looker、Tableau、元數據庫、Redash
對(duì)于更高級的見解,可以應用數據科學(xué)和機器學(xué)習方法。這(zhè)些支持相關性分析、預測模型和其他高級用例。需要特殊的方法、統計和技術技能(néng)。
示例:scikit-learn、PyTorch、TensorFlow
自助數據平台可能(néng)因每個組織而異。數據網格是一個新領域,供應商開(kāi)始在其現有産品中添加數據網格功能(néng)。
從所需的能(néng)力來看,您可以區分分析能(néng)力和數據産品能(néng)力: 分析能(néng)力使領域團隊能(néng)夠構建分析數據模型并爲數據驅動的決策執行分析。數據平台需要以自助服務的形式攝取、存儲、查詢和可視化數據的功能(néng)。典型的數據倉庫和數據湖解決方案,無論是内部部署還(hái)是雲提供商,都(dōu)已經(jīng)存在。主要區别在于每個領域團隊都(dōu)有自己的隔離區域。
更高級的數據網格數據平台還(hái)提供了額外的與領域無關的數據産品功能(néng) 用于創建、監控、發(fā)現和訪問數據産品。自助數據平台應該支持領域團隊,以便他們可以快速構建數據産品并在其隔離區域的生産中運行它。該平台應該支持領域團隊發(fā)布他們的數據産品,以便其他團隊可以發(fā)現它們。該發(fā)現需要所有去中心化數據産品的中心入口點。數據目錄可以通過(guò)不同的方式實現:作爲 wiki、git 存儲庫,或者甚至已經(jīng)有供應商針對(duì)基于雲的數據目錄的解決方案,例如 Select Star、Google 數據目錄或 AWS Glue 數據目錄。然而,數據産品的實際使用情況,需要域團隊訪問、集成(chéng)和查詢其他域的數據産品。該平台應支持、監控和記錄數據産品的跨域訪問和使用。
更高級的數據平台支持策略自動化。這(zhè)意味着,與其強制域團隊手動确保不違反全局策略,不如通過(guò)平台自動執行策略。例如,所有數據産品在數據目錄中具有相同的元數據結構,或者 PII 數據在數據攝取期間被自動删除。
有效地組合來自多個域的數據産品,即在幾秒鍾内進(jìn)行大型跨域連接操作,确保開(kāi)發(fā)人員的接受度和幸福感。這(zhè)就是爲什麼(me)查詢引擎對(duì)數據平台的架構影響很大的原因. 具有單一查詢語言并支持分離區域的共享平台是一個很好(hǎo)的開(kāi)始方式,因爲一切都(dōu)是高度集成(chéng)的。這(zhè)可能(néng)是 Google BigQuery,其中包含可通過(guò) Google 數據目錄發(fā)現的多個項目中的表。在更加去中心化和分布式的數據網格中,像 Presto 這(zhè)樣的分布式查詢引擎仍然可以在不導入數據的情況下執行跨域連接,但它們有其自身的局限性,例如,有限的下推要求需要傳輸所有底層列數據。
賦能(néng)團隊
支持團隊在組織内傳播數據網格的想法。在開(kāi)始采用數據網格時,需要進(jìn)行大量的解釋工作,并且支持團隊可以充當數據網格的倡導者。他們幫助領域團隊成(chéng)爲數據網格的正式成(chéng)員。支持團隊由在數據分析、數據工程和自助數據平台方面(miàn)具有廣泛知識的專家組成(chéng)。
支持團隊的成(chéng)員在有限的時間跨度内(例如一個月)作爲 内部顧問臨時加入領域團隊,以了解團隊的需求,建立學(xué)習環境,提升團隊成(chéng)員的數據分析技能(néng),并指導他們如何使用自助數據平台。他們不會自己創建數據産品。
在他們的咨詢活動之間,他們分享學(xué)習材料,例如行走骨架、示例、最佳實踐、教程,甚至播客。