數據工程101:從批處理到流處理

無論如何,數據如何到達數據科學家和機器學習工程師?

數據工程101:從批處理到流處理

Photo by Science in HD on Unsplash

與軟件工程不同,數據工程沒有很多大學課程。 也沒有大量的新兵訓練營來教授這種做法。

這導致經常在工作中學習最佳實踐,以及在團隊和公司中使用各種技術。

那麼,什麼定義了數據工程師?

尤其是隨著該角色從數據庫管理和BI的源頭髮展而來,它的確發生了變化,並且期望比以前更多。 過去,數據工程師只需要瞭解基本數據倉庫,ETL和數據可視化就可以擺脫困境。

但是,近年來,對理解分佈式計算,DevOps,數據操作和實現機器學習模型的需求對這一概念提出了挑戰。

實際上,從許多方面來說,許多高級DE經常更專門於軟件或DS工作。 必須從頭開始創建與API,流數據服務等交互的系統和框架。

僅僅將管道混在一起不再是基線。

但是,所需的所有技能都是壓倒性的,特別是對於剛畢業的新手或經典數據工程師而言。

您想入門數據工程世界,但您不知道從哪裡開始。 這就是本系列文章和視頻的主題。

首先,本文將向您介紹數據工程師以及我們依賴的一些工具。 所有這些將導致開發數據倉庫和數據管道。

因此,讓我們開始吧。

數據工程詞彙

數據工程101:從批處理到流處理

Photo by Brett Jordan on Unsplash


首先,讓我們列出一些對數據科學來說很重要的詞彙。

我們將在這裡概述基礎知識,因為經常,如果您剛剛輟學,您會聽到很多詞彙,只是點了點頭而沒有完全理解這些可能是什麼。

數據倉庫

數據工程101:從批處理到流處理

source:


數據倉庫是數據分析師和BI專業人員可以訪問的中心位置,以訪問他們的所有數據。 關於數據倉庫,數據集市,Kimball與Inmon以及所有這些含義的爭論很多。

歸根結底,數據倉庫通常是非規範化的數據集,通常從單個應用程序數據庫或內部用於回答業務問題的多個應用程序數據庫中提取數據。

它與應用程序數據庫不同,因為數據倉庫設計用於處理分析查詢和事務查詢。

此外,數據倉庫通常還會容納多個應用程序數據庫。 這是數據倉庫可以提供的價值之一。 將來自多個系統的數據整合在一起。

同樣,在現代時代,諸如BigQuery,Redshift和Snowflake之類的許多數據系統都是專門為管理數據倉庫樣式的查詢而開發的。 這意味著查詢需要運行大量的分析,求和和彙總,並且通常不以事務為重點。

但不僅如此。 它們旨在簡化理解。 一個好的數據倉庫應該讓分析師容易理解,這樣他們就可以將其數據可視化工具與其連接。

最終目標通常是創建某種自助服務分析系統。 這意味著不應有過於複雜的數據模型,而應有一套明確定義的業務邏輯,工程和業務團隊都應在理論上達成共識。

但是,讓我們繼續進行數據管道。

數據管道和ETL

通常,您會聽到數據工程師使用術語"數據管道"。 這通常也可以用術語ETL代替。 兩者之間有些細微差別。 但總體而言,兩者都引用了相似的概念。

ETL是指提取,轉換和加載(有時它實際上可以是ELT),但是我們將避免使事情複雜化。

ETL和數據管道是自動化的工作流程,可將數據從A點傳輸到B點,並按照其方式進行轉換以提高其分析能力。

從應用程序數據庫中提取數據時,通常會將其放入某種形式的CSV或JSON提取物中。 這些摘錄可能來自抓取應用程序數據庫表,從API中提取數據,抓取日誌等。

在提取階段,數據通常仍限於當前時間的數據庫快照或所有歷史數據。 同樣,即使在這裡,也有很多細微之處會改變ETL的設計。 例如,是否允許修改,刪除,複製數據等等。

採用這種方式建立應用程序數據庫的理由很充分,因為它對於保持站點快速響應具有很大的作用,但會限制分析人員獲得的見解。

隨著用戶對配置文件進行更新並編輯各種信息,狀態可能會隨著時間而改變。

因此,ETL也將以跟蹤隨時間變化的方式幫助插入數據。 通常,這種形式的跟蹤變更管理被稱為緩慢變化的維度。

數據轉換後,將被加載到數據倉庫中。

DAG

DAG代表有向無環圖。

ETL只是DAG這一非常複雜的難題的一部分。 轉換數據時,通常會按照特定的順序進行操作。 但是,您如何告訴系統呢? ETL如何知道何時運行哪個部分?

這就是DAG發揮作用的地方。

DAG在數據工程領域一直存在。 長期以來,它們是通過CRON,一些自定義的元數據庫以及Bash,Python和PowerShell腳本的組合進行管理的。

這是非常混亂且耗時的。

如今,有許多現代工具和庫可以幫助您管理ETL管道。 其中包括Airflow,Luigi,petl和Dagster(適用於初學者)。 有數十個(即使不是數百個)針對此主題的工具和庫。

就個人而言,我們非常依賴Airflow,因為它擁有大量的用戶群。 但是有很多很棒的庫,隨著您對數據領域的瞭解越來越多,您可能會使用其中的一些庫。

事實表


現在,ETL將數據加載到哪些表中呢?為什麼它們有這樣的奇數前綴?

當您開始在數據倉庫中工作時,將在表上看到前綴" fact_"或" f_"。

此前綴引用您將在此表中找到的數據類型。 特別地,事實通常是實際的交易類型數據。 這些可能是電子商務網站上的訂單,健康聲明總額等等。

通常,事實將具有某種可彙總的值,例如購買的商品總數或銷售總額,以及所謂的dim_ table鍵,例如store_id,product_type_id等。

通常可以將事實看成是中心表。

例如,在下面的圖像中,您將看到事實表位於所有內容的中心。 同樣,這是因為事實代表了您正在分析和報告的核心思想。 這可能是交易,用戶,打開電子郵件等。

數據工程101:從批處理到流處理

Source:


維度表

數據倉庫中確實有許多不同類型的表。 但是,事實表和維度表可能是最常見的。

維度表是更具描述性的數據。 想想當您分析數據時,您通常希望按商店,地區,網站,辦公室經理等對數據進行分組。


因此,也許您想統計一下公司擁有的每個建築物中有多少名員工。建築物的描述性信息位於尺寸表中,而有關連接到該建築物的員工的實際事實則位於事實表中。

再次看上面的圖片,維度表位於事實表的四周。

它將幫助您描述和分組事實數據。


接下來我們要談論什麼?

這是我們希望有關數據工程的幾篇文章的第一篇。 我們希望通過進行數據管道開發,指標,數據倉庫設計等來繼續本系列文章。

我們希望這會有所幫助,我們將繼續探討這些主題。 如果您有任何疑問或想在本主題的特定部分上尋求幫助,請告訴我們。

謝謝。


(本文翻譯自SeattleDataGuy的文章《Data Engineering 101: From Batch Processing to Streaming》,參考:https://medium.com/better-programming/data-engineering-101-from-batch-processing-to-streaming-54f8c0da66fb)


分享到:


相關文章: