【中云網(wǎng) 譯文】導(dǎo)讀:數(shù)據(jù)改寫與數(shù)據(jù)遷移面臨重大挑戰(zhàn)--但也收獲巨大。
在過(guò)去十年,我經(jīng)常需要面對(duì)無(wú)數(shù)次的數(shù)據(jù)改寫任務(wù),無(wú)論是從舊有的數(shù)據(jù)庫(kù)遷移到新的數(shù)據(jù)庫(kù),還是利用新的程序工具發(fā)掘大量數(shù)據(jù)系列,又或者是其他的大量任務(wù),以某種形式得到數(shù)據(jù)并以新的方式轉(zhuǎn)存為數(shù)據(jù),這樣的事情每時(shí)每刻都會(huì)頻繁發(fā)生。對(duì)包括IT人在內(nèi)的大多數(shù)人,數(shù)據(jù)改寫和遷移都只是個(gè)虛幻的魔法。
讓我們花幾分鐘的時(shí)間來(lái)解釋下整個(gè)過(guò)程是怎么運(yùn)作的。大家可能會(huì)發(fā)現(xiàn),引用這些有助于向那些不太懂技術(shù)的人溝通講解比較微妙的后端技術(shù)流程。
一切先從Excel開(kāi)始
我們選擇一個(gè)不太幸運(yùn)的常見(jiàn)情形:可怕的Excel電子表格。一段時(shí)間以前,有一家很遙遠(yuǎn)的公司,他們確定需要收集涉及到商業(yè)流程的數(shù)據(jù)--庫(kù)存、銷售、客戶等企業(yè)擁有的所有數(shù)據(jù)。由于缺乏合適的工具,有個(gè)人利用Excel電子表格完成了這項(xiàng)工作。隨著時(shí)間的流逝,數(shù)以千計(jì)的記錄大量積聚,Excel表格變得越來(lái)越?jīng)]有用處,最終該公司決定將所有數(shù)據(jù)轉(zhuǎn)到真正的數(shù)據(jù)庫(kù)中,他們聘請(qǐng)了咨詢團(tuán)隊(duì),定義了內(nèi)部資源,最后派一個(gè)人接手了該任務(wù)。
首先要做的就是檢查數(shù)據(jù)本身的干凈度。在一個(gè)完美的世界,電子表格有點(diǎn)類似于數(shù)據(jù)庫(kù),每一列都有公共區(qū)塊--如名字、姓氏、街道、城市等等。然而,運(yùn)作的方法并不總是這樣,布局有可能自上而下,信息包含在同一列下單獨(dú)的行中,如聯(lián)系列下有全稱、公司、地址、手機(jī)號(hào)碼等單獨(dú)的行。下一列則有可能是2012年最后的訂單或銷售或其他數(shù)據(jù),這帶來(lái)了一個(gè)更具挑戰(zhàn)性的問(wèn)題。
讓我們看看第一種情況,這種最為簡(jiǎn)單。數(shù)據(jù)相對(duì)清晰,結(jié)構(gòu)明顯,可以方便地外移到CSV上,通過(guò)自定義的解析器將其轉(zhuǎn)化為一個(gè)數(shù)據(jù)庫(kù)。好的CSV解析器可以將所有記錄拉到一個(gè)數(shù)組中,數(shù)組可以剝離不同的數(shù)據(jù)記錄,并嵌入到新的數(shù)據(jù)庫(kù)中。完成這些流程后,我們能檢查數(shù)據(jù),也能修改數(shù)據(jù),以更好地適應(yīng)新數(shù)據(jù)庫(kù)的格式。
舉例來(lái)說(shuō),我們可能會(huì)在一個(gè)電話號(hào)碼字段中運(yùn)行正則表達(dá)式,將各種各樣的手機(jī)號(hào)碼格式轉(zhuǎn)換成一種標(biāo)準(zhǔn)格式,這需要折騰所有的特殊字符,重新設(shè)定結(jié)果串,然后才能將數(shù)據(jù)嵌入到新的數(shù)據(jù)庫(kù)。這種才做會(huì)將數(shù)字如(212)555-1212、212-555-1212、2125551212、212 555 1212、212.555.1212等轉(zhuǎn)換為類似(212)555-1212的標(biāo)準(zhǔn)格式,有助于可讀性和搜索。
我們可能用類似/[^0-9]+/的正則表達(dá)式卸除這些內(nèi)容,然后用如/([0-9]{3})([0-9]{3})([0-9]{4})/這樣的正則表達(dá)式再將它們重新組合,最后匹配結(jié)果是212、555和1212。我們現(xiàn)在可以我們喜歡的任何格式來(lái)重新設(shè)定手機(jī)號(hào)碼,如果我們碰到一個(gè)數(shù)字,因?yàn)閿?shù)位過(guò)多或過(guò)少而不能成為手機(jī)號(hào)碼數(shù)字時(shí),我們也能擺脫困境。
形式自由一切都自由
當(dāng)我們進(jìn)入到更自由的表單字段后,情況變得更為不確定。確定地址特別麻煩,因?yàn)樵O(shè)定地址格式有各種各樣不同的方法。我們也需要面對(duì)大量的街道和城市名,需要確定我們是否正確地掌握了“Washington, DC” 、“Washington/DC” 、“Washington DC”,以及一些類似“Winston-Salem DC”、“King of Prussia, PA”、“Scranton, Penn” “N. Providence RI”、 “Houston, TX”和“O’Fallon, IL”等古怪的地名。
這些各種各樣的變化能讓解析器犯錯(cuò),因?yàn)槲覀儾荒芟承┨厥獾淖址4送?,我們不能指望一個(gè)城市的數(shù)據(jù)量能跟一個(gè)州,或州內(nèi)現(xiàn)存和擁有的縮寫的數(shù)據(jù)量相比。因此,我們需要構(gòu)造條件表達(dá)式,凝成一股勁來(lái)盡最大努力確定實(shí)際的城市和州,甚至需要對(duì)美國(guó)的每一個(gè)城市和每一個(gè)州的數(shù)據(jù)庫(kù)進(jìn)行核對(duì)。根據(jù)結(jié)果,我們?nèi)匀恍枰谠撚涗浬蠑[脫困境,如果沒(méi)法做出確定的決斷,至少提出一個(gè)需要手動(dòng)檢查的問(wèn)題的記錄。
我們現(xiàn)在才僅僅開(kāi)始發(fā)現(xiàn)事情的表象,還有大量的工作,就是搞清楚每一個(gè)記錄中的城市、州、手機(jī)號(hào)碼等,根據(jù)內(nèi)容,我們需要沖洗并重復(fù)電子表格中的每一個(gè)其他字段。
這種混亂的直接結(jié)果是,不受約束的自由形式的數(shù)據(jù)項(xiàng),無(wú)時(shí)無(wú)刻無(wú)論何地都困擾著每家公司,而且它不一定是Excel形式。數(shù)據(jù)項(xiàng)可以是Access,一個(gè)自主開(kāi)發(fā)的數(shù)據(jù)庫(kù),或者其他任何應(yīng)用程序。除非能檢查輸入的數(shù)據(jù)的有效性和格式,否則這些數(shù)據(jù)很可能只是一個(gè)爛攤子。當(dāng)然,問(wèn)題的關(guān)鍵是建立一個(gè)合適的數(shù)據(jù)庫(kù)前端來(lái)處理數(shù)據(jù)的輸入:我們可以清理修飾數(shù)據(jù)進(jìn)入的方式,這樣能持續(xù)提高數(shù)據(jù)的準(zhǔn)確性和可用性,這是擺在首位的使用數(shù)據(jù)庫(kù)的好處之一。
但是,我們不能忽視在后端處理這種類型的數(shù)據(jù)集所付出的努力,現(xiàn)在也已經(jīng)開(kāi)發(fā)了各種工具來(lái)簡(jiǎn)化流程,但他們并不能適用于所有情況。雖然他們可能對(duì)輸入數(shù)據(jù)的某部分起作用,不能起作用的部分可能導(dǎo)致使用那些工具更加困難重重。
這種性質(zhì)的工作十分乏味,尤其注重細(xì)節(jié),要求大量的手工數(shù)據(jù)檢驗(yàn)、試運(yùn)行、調(diào)試,同時(shí)需要在該項(xiàng)目上工作的部分的開(kāi)發(fā)者具備前瞻性思維。當(dāng)上面說(shuō)到的所有東西都實(shí)現(xiàn)了,結(jié)果肯定是:我們的付出是值得的。
使用干凈的數(shù)據(jù),一切都變得很簡(jiǎn)單,只要?jiǎng)e低估清理數(shù)據(jù)的旅途中可能面臨的巨大挑戰(zhàn)就行。
(轉(zhuǎn)載此文請(qǐng)附上作者、出處(中云網(wǎng))及本頁(yè)鏈接。)