數(shù)據(jù)遷移:高難度帶來高回報(bào)
譯文【51CTO譯文】請(qǐng)?jiān)试S我花幾分鐘向大家解釋整個(gè)轉(zhuǎn)換處理方式,至少是在宏觀上形成概念。在閱讀之后,大家可能會(huì)發(fā)現(xiàn)這方面知識(shí)有助于幫助各位向非技術(shù)人士詳盡闡釋相關(guān)的后端流程。
一切從Excel開始
讓我們先從最困難的常見情況:可怕的Excel電子表格開始。就在前一陣子,某家遠(yuǎn)在他方的企業(yè)打算對(duì)有價(jià)值的業(yè)務(wù)流程數(shù)據(jù)進(jìn)行一番收集與整理,其中包括庫(kù)存、銷售額、客戶資料等等。由于缺乏合適的工具,員工制作了一份Excel電子表格,并利用它承載信息。隨著時(shí)間的推移,其中逐漸積累起數(shù)千條記錄、電子表格本身的功能性缺失也開始暴露出來。最終,企業(yè)管理者決定將這部分?jǐn)?shù)據(jù)轉(zhuǎn)換成到真正的數(shù)據(jù)庫(kù)當(dāng)中。不知道他們當(dāng)時(shí)是選擇聘請(qǐng)咨詢服務(wù)公司還是利用內(nèi)部資源加以處理,總之有人接手了這份工作。
這項(xiàng)任務(wù)的第一步是檢查數(shù)據(jù)本身的純潔度。在理想狀態(tài)下,電子表格本身會(huì)以數(shù)據(jù)庫(kù)的方式對(duì)信息進(jìn)行分類,且每個(gè)數(shù)據(jù)填充區(qū)都處于對(duì)應(yīng)的列之下——例如姓氏、名字、街道、城市等等。然而事情并不總能如此順利,有時(shí)候兩類包含信息交集的單元格會(huì)自上而下位于同一列當(dāng)中。就以聯(lián)系人列為例,其中很可能囊括了全名、公司、地址、電話號(hào)碼等多種獨(dú)立單元。緊隨其后的下一列也可能是對(duì)方最新訂購(gòu)信息或2012年采購(gòu)總額等數(shù)據(jù),這就給轉(zhuǎn)換工作帶來了極大的挑戰(zhàn)。
讓我們先看看第一種情況——即理想情況,這是最易于處理的狀態(tài)。數(shù)據(jù)比較單純且具備良好的排序,我們可以通過CSV將其導(dǎo)出并通過自定義解析器把它翻譯成數(shù)據(jù)庫(kù)內(nèi)容。優(yōu)秀的CSV解析器能夠?qū)⑺羞@些記錄逐一抽離出來匯總成整體數(shù)組,然后插入到新的數(shù)據(jù)庫(kù)當(dāng)中。在整個(gè)過程中,我們可以對(duì)數(shù)據(jù)進(jìn)行檢查及修改,進(jìn)而使數(shù)據(jù)格式更好地適應(yīng)新數(shù)據(jù)庫(kù)的要求。
舉例來說,我們可能會(huì)利用正則表達(dá)式處理電話號(hào)碼信息,旨在將不同格式的電話號(hào)碼轉(zhuǎn)化為同一標(biāo)準(zhǔn)。這要求大家在將內(nèi)容插入新數(shù)據(jù)庫(kù)之前,調(diào)整好表格中包含的一切特殊符號(hào)并對(duì)字符串進(jìn)行格式化處理。操作將把(212)555-1212、212-555-1212、2125551212、212555 1212或者212.555.1212等數(shù)字轉(zhuǎn)化成統(tǒng)一的電話號(hào)碼格式(2120555-1212,這既能提高數(shù)字的可讀性、又便于未來進(jìn)行搜索。
我們會(huì)利用/[^0-9]+/ 這樣的正則表達(dá)式實(shí)現(xiàn)去格式化,然后通過/([0-9]{3})([0-9]{3})([0-9]{4})/表達(dá)式將內(nèi)容重新加工為新的格式,這樣最終結(jié)果才能正確處理組成分段號(hào)碼信息的212、555與1212三部分。只要愿意,我們馬上就可以對(duì)電話號(hào)碼進(jìn)行二次格式化。但請(qǐng)注意,如果我們遇到那些因?yàn)樘L(zhǎng)或太短而不可能是電話號(hào)碼的數(shù)字對(duì)象時(shí),也要想好對(duì)應(yīng)的解決方式。
讓自由格式貫穿始終
然而一旦表格的格式更加自由,處理的難度也就隨之提升。地址就是其中最不容易打理的類型,因?yàn)樗鼈兊母袷奖容^隨意、可能需要通過多種不同方式進(jìn)行格式化。另外大家還需要留意形態(tài)萬(wàn)千的街道與城市名稱。舉例來說,我們必須確保自己能正確識(shí)別“華盛頓哥倫比亞特區(qū)”、“華盛頓特區(qū)”和“華盛頓”這三種縮寫(分別為Washington,DC、Washington, DC以及Washington DC),并弄清楚"Winston-Salem, NC," "King of Prussia, PA," "Scranton, Penn.," "N. Providence RI," "Houston, tx," and "O'Fallon, IL."等令人頭痛的城市名稱與所在州名稱組合。
如果不對(duì)內(nèi)容進(jìn)行嚴(yán)格界定,這些層出不窮的變化完全可能把解析器逼到崩潰,因?yàn)槲覀儫o(wú)法去除其中存在的特殊字符。另外,我們也不能指望通過不同數(shù)量的空格來區(qū)分城市名稱、州名稱、州名稱縮寫或者地名大寫等。因此,我們需要?jiǎng)?chuàng)建一套條件表達(dá)式,以最大程度確定這些數(shù)據(jù)所對(duì)應(yīng)的實(shí)際城市與國(guó)家,甚至必須與包含美國(guó)所有城市與州名稱的標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)進(jìn)行比照。根據(jù)檢測(cè)結(jié)果,我們可能需要對(duì)記錄進(jìn)行重新清查或者至少將對(duì)應(yīng)記錄加以標(biāo)記,以備日后手動(dòng)檢查。
到這里,我們才僅僅剝開問題的表面。光是搞清楚每條記錄中城市、州名與電話號(hào)碼就需要我們投入大量資金與精力,更不要說重新加工并重復(fù)電子表格中的其它文本信息了——具體工作量取決于其實(shí)際內(nèi)容。
為什么會(huì)出現(xiàn)如此被動(dòng)的局面?這是因?yàn)閿?shù)據(jù)項(xiàng)使用了不受約束的自由格式,而它幾乎困擾著世界各地的每一家企業(yè)。需要強(qiáng)調(diào),Excel并不是這一切問題的罪魁禍?zhǔn)?。Access、自主開發(fā)的數(shù)據(jù)庫(kù)或者其它任何應(yīng)用都可能引發(fā)此類難題??梢哉f,除非我們嚴(yán)格把住輸入數(shù)據(jù)的類型與格式關(guān),否則數(shù)據(jù)積累的結(jié)果只會(huì)是一團(tuán)亂麻。很顯然,解決問題的關(guān)鍵在于建立一套合適的數(shù)據(jù)庫(kù)前端來處理數(shù)據(jù)輸入:我們可以在數(shù)據(jù)進(jìn)入的同時(shí)對(duì)其進(jìn)行清理與調(diào)整,這將大大提高數(shù)據(jù)的準(zhǔn)確性與可用性。準(zhǔn)確性與可用性,這是優(yōu)先使用數(shù)據(jù)庫(kù)處理信息的主要優(yōu)勢(shì)之一。
然而我們也不能忽視利用后端處理這些數(shù)據(jù)庫(kù)集類型的努力。目前我們已經(jīng)擁有各類相當(dāng)成熟的工具來簡(jiǎn)化這一流程,但它們?nèi)詿o(wú)法在每個(gè)用例中都切實(shí)生效。盡管它們能在一定程度上讓輸入數(shù)據(jù)保持“標(biāo)準(zhǔn)”,但漏掉的部分同樣會(huì)引發(fā)問題,這種沖突甚至比不進(jìn)行預(yù)處理來得更加嚴(yán)重。
這類工作相當(dāng)乏味,需要技術(shù)人員將全部精力集中在細(xì)節(jié)之上。它要求我們投入大量人工進(jìn)行數(shù)據(jù)檢驗(yàn)、試運(yùn)行、調(diào)整并對(duì)部分項(xiàng)目開發(fā)工作加以前瞻性考量。但總體而言,這一切付出幾乎都能獲得令人滿意的高額回報(bào)。
純潔清爽的數(shù)據(jù)令日常工作變得極富效率,這也是每家企業(yè)所追求的目標(biāo)。但大家也千萬(wàn)不能低估整個(gè)轉(zhuǎn)換過程中可能出現(xiàn)的嚴(yán)峻挑戰(zhàn)。
原文鏈接:http://www.infoworld.com/d/data-center/data-migration-hard-do-216342
原文標(biāo)題:Data migration is hard to do
【編輯推薦】



























