將完整的原始食材送到同一個地方,將資料送到同一個地方。
資料匯入、資料傳輸、資料運送,至今仍沒有一個廣為人使用的中文翻譯,最常使用的專有名詞單字是「ETL」,但實則裡面包含了三個動作:Extract(萃取)、Transform(轉置)、Load(載入)。
這三個單字和它的中文翻譯,彷彿令人敬而遠之的教課書名詞,每個字都看得懂都會念,但第一時間看到時,總是無法理解這些字組合起來,具體來說,到底在幹嘛?不信你可以試著查查看,看有沒有誰具體把Transform這步驟到底在幹嘛給清楚定義。
好吧,我們先很簡單的這樣想:
1. Extract(萃取)
只把需要的完整原始食材從生產地提取出來,例如你需要蘿蔔但不需要蘿蔔旁邊的雜草、需要豬但不需要豬的糞便,接著把豬從農場裡趕上載運車、把蘿蔔從農地裡拔起來。
2. Transform(轉置)
在把蘿蔔和豬送往市場的過程,一方面對這些蘿蔔和豬做了非常多的處理,包括清洗清潔、削皮切塊、還要把豬電宰支解出排骨(在載運車上?)……忙不忙?這是我最有意見、最不認同的一個階段。
3. Load(載入)
把已經可以用的食材,清洗切塊完蘿蔔和乾淨切好排骨,送進…某個地方。
上面的問題,在於ETL中間【Transform(轉置)】做的事情,和另外兩個動作(Extract, Load)相比,Transform要做的事情實在太多太搶鏡太有存在感了。明明是三個動作,Transform的複雜度卻遠高於另外二者。
這麼說吧!如果在車上就已經把豬處理到只剩下排骨,現在客人(老闆)突然說他不只要蘿蔔排骨湯,想加點豬頭皮和豬舌頭,我到哪去生給他?倉庫或市場裡也沒有,因為根本沒有載過來!難道得去載運的道路旁邊撿?這時候就會被大罵:「你為什麼只準備了豬排骨!你明明可以一起準備的,我又不是要吃魚!我的要求不合理嗎?」
資料領域同理,在這個階段若就只為了最初目標(以為只要做到就沒其他事的目標),而處理出【只為了最初目標的資料】,那資料的彈性會變得非常低,也會受限於Transform(轉置)出的狹隘結果,一旦要延伸其他議題,就得必須重新來過(運送新資料進來)。
小馬經驗,真心真誠的建議,這才是正確的作法:
各產地-->E-->L-->Data Warehouse
送進Data Warehouse之前,不要T!
蘿蔔排骨湯
農地和農場-->只需要拔蘿蔔和趕豬上車-->不做任何處理送進…-->同一集中地
資料領域
散落各地資料-->把完整且相關的原始資料-->不做任何處理送進…-->資料倉儲(Data Warehouse)
太好了!我們首先確定了第一個專有名詞(寫到現在三千字了才第一個……):
EDW, Enterprise Data Warehouse, 企業級資料倉庫(資料倉儲)
又稱
EDB, Enterprise Data Base, 企業級資料庫
事實上,若單純看【Transform(轉置)】這個字眼,它所做的事情非常單純,就是欄列位的轉置:
左邊是原始資料長相,右邊是必要的轉置處理(原因很基本在此就不細談,處理的工具和方式也很多種)。因此在我看法,【Transform(轉置)】不應該當作眾多資料處理手法的代名詞,就像是你不會把所有種類的馬都叫做斑馬一樣。
所以容小馬修正一下大家慣用的ETL,僅保留EL,如下圖所示,我們正在討論左邊兩個箭頭。
B-1.資料匯入(Data EL):
在找到所有原料所在之後,只載運完整的原始食材,將其運送到集中地,以利後續處理。
在找到所有原始資料之後,提取完整的原始資料(E),將原料運送(L)到同一存放位置(Data Warehouse)。
接下來,我要清楚區別【資料清洗(Data Cleansing)】和【資料採礦(Data Mining)】這兩種最容易被誤用及混淆的專有名詞。