很重要的一點,“數據工程”正在發展出新一代,與互聯網革命一樣,要發展出新的工具、新的方法,新的套路。也正是這種不斷推陳出新的“新技術”的出現才使互聯網以及計算機技術推動社會的進步和發展。
當商業智能工程師的工作逐漸超越了“經典”的商業智能,就開始創造出了新的的學科——數據工程師。
而新學科的出現,則意味著要開發新技能、新的工作方式、新的工具,而這些往往要背棄傳統方法。
數據科學與數據工程
數據科學(Data Science)當下在經歷“青春期”,自我肯定和定義自身的階段。
數據工程(Data Engineering)比數據科學更為年輕些,也正在經歷類似的事情。(下統稱DE)
DS 與 DE 相同的部分:codeing, 深入分析,數據可視化
但是DE比DS更接近軟件工程(有爭議),DE還需要進行工程建模、基礎設施、框架和服務。
DE還不成熟的理解:可以被視作是商業智能、數據倉庫以及部分軟件工程的超集,同時集成了“大數據”分布式系統、擴展Hadoop生態系統、流處理和大規模計算的概念。
對于較小的公司,沒有數據基礎架構團隊,僅是設置和運營公司的數據,常用的平臺有Hadoop,Hive,HBase,Spark等。
對于大公司而言,對數據基礎架構團隊的需求增長,則開始創建正式的角色來管理此類工作,自動化數據工程流程,解決更高級別的問題。同時,也出現了更好的自助服務工具,不再僅僅是制作和維護報告、儀表板等簡單的任務。
數據倉庫技術(ETL)的變化
代碼允許任意級別的抽象,允許以熟悉的方式的進行所有邏輯操作,與源代碼一起進行良好的集成,易于版本和寫作。
在過往,ETL工具演變為圖形界面,這是數據處理歷史上的一個彎路。抽象“數據處理”,在計算和存儲上都有一定的復雜性,但解決方案不是將ETL的原語(如聚合、過濾等)變成以“拖放方式”展現,而是更加抽象的級別。
比如,在現代數據環境中所需抽象的一個例子是A/B測試框架中的實驗配置:什么是實驗?什么是相關的治療方法?應該暴露多少百分比的用戶?每項實驗預計會影響哪些指標?實驗什么時候生效?
我們現在有一個框架,可以接受高級的、精確的,然后執行復雜的統計計算,并提供計算結果。顯然,這個抽象的輸入參數不是ETL提供的。
所以,對于現代數據工程師來說,傳統的ETL工具在很大程度上已經過時,因為邏輯無法用代碼表示,這導致工具不能直觀的表達所需的抽象。這迫使數據工程師的角色要來重新定義“ETL”,并且建立一套全新的工具、方法和約束等,以及新一代的“數據工程師”。
數據建模發生的變化
經典、傳統的建模技術,定義了我們數據建模方法,進行數據倉庫相關的分析工作。現在,存儲和計算比以往任何時候都便宜,隨著分布式數據庫的出現,線性擴展等,稀缺資源就是“工程時間”。
數據建模技術發生的變化:
1、“非規范化”的進一步發展:維護Surrogate keys(主鍵)可能會很困難,而且會降低事務表(fact tables)的可讀性。使用自然的、人類可讀的鍵和緯度屬性變得越來越普遍,這減少了分布式數據庫鏈接的需求,這個需求是很高昂的。
像ORC,Parquet等序列格式化,或是Vertica等數據庫引擎,支持編碼和壓縮,可以解決“非規范”的大部分性能損失,這些系統已經被教導自行規范數據存儲。
2、blob:現在數據庫通過本機和函數對blob的支持越來越多,這將融入到數據建模中,開啟新的動作,允許事務表在需要時一次存儲多個。
3、動態模式:map的出現減少、文檔存儲日益普及,對數據庫中blob的支持,于是,在不執行DML的情況下,發展數據庫模式變得更容易,采用迭代方法進行存儲更容易,并且無需在開發之前獲得完全的共識和支持。
4、 系統化快照維度:存儲每個ETL調度周期的維度的完整副本,通常在不同的表分區當中。用一種簡單的方法,作為處理緩慢變化的維度(SCD),在編寫ETL和查詢時都很容易掌握。
將維度的屬性反規范化到事實表中,這方便在事務處理時跟蹤其值,也很容易,且相對便宜。
反觀,復雜的SCD建模技術并不直觀,降低了可訪問性。
5、一致性:在數據環境中,一致性一直都是非常重要的,但是數據倉庫需要快速移動,且有更多的團隊被邀請作這項工作,所以不是很必要,更多情況下是進行權衡。
可以說,隨著計算周期的商品化,以及更多的人精通數據,不需要在倉庫中預先計算和存儲結果。比如,我們可以有復雜的Spark,該任務只能按需計算復雜分析,而不能安排成為倉庫的一部分。
角色與責任
數據倉庫是專門用于查詢和分析的事物數據的副本
數據倉庫是面向主題的、集成的、時變的和非易失性的數據集合,以支持管理層的決策過程
數據倉庫與以往一樣重要,數據工程師的焦點是數據倉庫,負責其構建、運營等方方面面,同時還與數據科學家、分析師和軟件工程師參與其建設和運營。
數據工程團隊通常會在數據倉庫中擁有經過認證的高質量區域。比如在Airbnb,有“核心”模式,明確定義和測量服務級別協議(SLA),嚴格遵循命名約定,業務員數據和文檔質量最高,相關的管道代碼遵循一套明確的定義。
通過數據對象的標準、最佳實踐和認證過程的定義,這些成為數據工程團隊很重要的組成部分,成為“卓越中心”。團隊可以發展為分享或領導教育計劃,分享核心競爭力,以幫助其他團隊成為數據倉庫的更好公民。比如,Facebook有一個數據陣營的教育計劃,airbnb在開發一個類似的數據大學的計劃,數據工程師領導會議,教會人們如何熟練掌握數據。
數據工程師也是數據倉庫的“圖書館員”,編目和組織元數據,定義一個文件或從倉庫中提取數據。在快速發展、略微混亂的數據生態系統中,元數據管理和工具成為現代數據平臺的重要組成部分。
性能調優和優化
數據,在當下比以往任何時候都更具有挑戰性,公司的數據基礎設施預算正在不斷增加。這使得數據工程師在性能調優和數據處理、存儲有劃傷,花費周期越來越合理。在這一領域的預算很少收縮,因此優化通常是實現更多的資源,或嘗試線性化資源利用率和成本的指數增長。
數據工程堆棧的復雜性跨度很大,呈爆炸式增長,我們可以假設優化這種堆棧和流程的復雜性,具有同樣變化的挑戰程度。我們只需要很少的努力,就可以輕松獲得巨額的成功,所以這適用遞減收益法。
建議:基礎設施與公司一起擴展,并始終保持資源意識。
數據集成
數據集成是通過數據交換整合業務和系統的實踐,與以往一樣重要,且具有挑戰性。在新的標準方式下,我們希望將服務軟件(如SaaS)生成的數據,也帶入到我們的倉庫,以便可以根據其余數據進行分析。Saas通常擁有自己的分析產品,但缺乏公司其他的數據,因此需要將其產生的分析數據,提取回來。
在這樣的情況,Saas產品重新定義參考數據,而沒有集成和共享。沒有人想在兩個不同的系統中,手動維護兩個員工或客戶列表,而且在提取數據導進倉庫時,必須進行模糊匹配。
但即使這樣,公司高管沒有真正考慮數據集成的挑戰,與Saas提供商簽訂協議,提供商也低估了集成工作量,以促進他們的銷售,使數據工程師陷入大量且混亂的工作中。Saas api通常設計不當,文檔不清晰,而且“敏捷”,也就是說,您可以在不事先通知的情況下,進行更改。
服務
數據工程師在更高的抽象層次上運行,在一些情況下,要提供服務和工具來自動化底層的工作類型,底層的含義是可以手動完成的。
1、數據提取:抓取數據庫,加載日志,從外部存儲或API獲取數據的服務和工具
2、度量計算:用于計算和匯總參與度,增長或細分相關度量的框架
3、異常檢測:自動化數據消耗,提醒人們發生異常事件或趨勢發生顯著變化。
4、元數據管理:允許生成和使用元數據的工具,可以輕松地在數據倉庫內和周圍查找信息。
5、實驗:具有重要的數據工程組件,A/B測試和實驗框架
6、儀表:分析記錄事件和與這些事件相關的屬性,確保上游捕獲高質量數據有既得利益。
7、會話:專門用于及時了解一系列操作的管道,允許分析人員了解用戶行為
就像軟件工程師一樣,數據工程師應該不斷尋求自動化他們的工作,構建抽象參數,然后做更為復雜的內容。雖然自動化的工作流程的性質因環境而異,但自動化他們的需求基本上都是通用的。
技能
1、SQL
2、數據建模技術
3、ETL設計:編寫高效、有彈性、可演化的ETL
4、架構預測
-
數據工程師
+關注
關注
0文章
8瀏覽量
1249
發布評論請先 登錄



硬件工程師手冊(全套)
如何成為一名嵌入式軟件工程師?




談談PCB工程師金字塔分級標準


FPGA算法工程師、邏輯工程師、原型驗證工程師有什么區別?


評論