ETL万岁
提取轉(zhuǎn)換負載是用于從一個數(shù)據(jù)系統(tǒng)中提取數(shù)據(jù)并加載到另一個數(shù)據(jù)系統(tǒng)中的過程。 涉及的數(shù)據(jù)系統(tǒng)稱為源系統(tǒng)和目標系統(tǒng)。
來自源系統(tǒng)的數(shù)據(jù)形狀與目標系統(tǒng)不匹配,因此需要進行一些轉(zhuǎn)換以使其兼容,該過程稱為Transformation 。 轉(zhuǎn)換是由map / filter / reduce操作完成的。
為了處理數(shù)據(jù)系統(tǒng)之間的不兼容性,需要一些元數(shù)據(jù)。 哪種類型的元數(shù)據(jù)會有用?
將源數(shù)據(jù)轉(zhuǎn)換為許多不同的形狀以處理各種業(yè)務(wù)用例是非常普遍的,因此對于源系統(tǒng)使用描述 性元數(shù)據(jù),對于目標系統(tǒng)使用描述性元數(shù)據(jù)是有意義的。
元數(shù)據(jù)在使系統(tǒng)向后和向前兼容方面起著重要作用。
很多時候僅擁有元數(shù)據(jù)是不夠的,因為某些源/目標系統(tǒng)數(shù)據(jù)太大或太小而無法容納。
這是當變換變得有趣的情況。 這意味著某些值必須刪除或設(shè)置為NULL或默認值,對此做出正確的決定對于轉(zhuǎn)換的向后/向前兼容性非常重要。 我想說許多企業(yè)的成功還取決于如何解決這個問題! 如果正確完成,可以避免許多集成夢night。
到目前為止,我們只是在討論單一源系統(tǒng),但是對于許多用例,都需要來自其他系統(tǒng)的數(shù)據(jù)進行一些轉(zhuǎn)換,例如將userid轉(zhuǎn)換為name,派生新的列值,查找編碼等等。
添加多源系統(tǒng)會增加轉(zhuǎn)換的復(fù)雜性,以處理丟失的數(shù)據(jù),陳舊的數(shù)據(jù)等。
隨著數(shù)據(jù)系統(tǒng)的發(fā)展,今天不僅涉及關(guān)系存儲,我們還看到鍵值存儲,文檔存儲,圖形數(shù)據(jù)庫,列存儲,緩存,日志等。
新的數(shù)據(jù)系統(tǒng)也已分發(fā),因此這增加了轉(zhuǎn)換復(fù)雜性的另一個維度。
我們的舊關(guān)系數(shù)據(jù)庫也可以描述為它是使用ETL模式構(gòu)建的,通過使用更改日志作為數(shù)據(jù)庫所做的一切工作的源
關(guān)于ETL的神話之一是它是批處理過程,但是隨著Stream處理器(即Spark Streaming,Flink等)和Pub Sub系統(tǒng)(Kafka,Pulsur等)的超時而變化。 這樣可以在事件推送到源系統(tǒng)后立即進行轉(zhuǎn)換。
流式流行詞不要被太多帶走,不
無論您使用哪個流處理器或發(fā)布子系統(tǒng),但您仍然必須應(yīng)對上述挑戰(zhàn)或利用某些新平臺來解決這一問題。
投資轉(zhuǎn)換/業(yè)務(wù)邏輯,因為它是構(gòu)建可維護和可擴展的成功系統(tǒng)的關(guān)鍵。
使其保持無狀態(tài),元數(shù)據(jù)驅(qū)動,處理重復(fù)/重試等,更重要的是編寫Tests以在快速變化的時間內(nèi)對其進行良好的維護。
下次當您對ETL流程有疑問時
您處理實時還是批量處理?
你的答案應(yīng)該是
這是基于事件的處理。
ETL萬歲
翻譯自: https://www.javacodegeeks.com/2020/04/long-live-etl.html
總結(jié)
- 上一篇: 手提电脑哪个是空格键(手提电脑哪个是空格
- 下一篇: getter/setter_Getter