明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

文本文件導(dǎo)入到數(shù)據(jù)庫中的幾種方法

[摘要]大型的數(shù)據(jù)庫開發(fā)中常常遇到數(shù)據(jù)源是平面文件(如文本文件)的情況,對于這樣的數(shù)據(jù)源,無法使用數(shù)據(jù)庫對其數(shù)據(jù)進(jìn)行有效的管理,另外也無法使用SQL語句對其進(jìn)行查詢和操作,所以當(dāng)務(wù)之急就是將這些平面文件導(dǎo)入到數(shù)據(jù)庫中,然后就可以對其進(jìn)行高效的操作了。   下面介紹幾種常見的數(shù)據(jù)導(dǎo)入的方法,希望能夠給大家啟...
大型的數(shù)據(jù)庫開發(fā)中常常遇到數(shù)據(jù)源是平面文件(如文本文件)的情況,對于這樣的數(shù)據(jù)源,無法使用數(shù)據(jù)庫對其數(shù)據(jù)進(jìn)行有效的管理,另外也無法使用SQL語句對其進(jìn)行查詢和操作,所以當(dāng)務(wù)之急就是將這些平面文件導(dǎo)入到數(shù)據(jù)庫中,然后就可以對其進(jìn)行高效的操作了。
  下面介紹幾種常見的數(shù)據(jù)導(dǎo)入的方法,希望能夠給大家啟迪。另外,本文所涉及到的數(shù)據(jù)庫均為ORACLE數(shù)據(jù)庫,其實(shí)對于其他數(shù)據(jù)庫而言,方法類似。

  一、Sql*:Loader
  該方法是Oracle數(shù)據(jù)庫下數(shù)據(jù)導(dǎo)入的最重要的方法之一,該工具由Oracle客戶端提供,
  其基本工作原理是:首先要針對數(shù)據(jù)源文件制作一個控制文件,控制文件是用來解釋如何對源文件進(jìn)行解析,其中需要包含源文件的數(shù)據(jù)格式、目標(biāo)數(shù)據(jù)庫的字段等信息,一個典型的控制文件為如下形式:
  LOAD DATA
   INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'
   TRUNCATE
   INTO TABLE fj_ipa_agentdetail
   fields terminated ","
   trailing nullcols
  ( AGENT_NO char,
   AGENT_NAME char,
   AGENT_ADDRESS char,
   AGENT_LINKNUM char,
   AGENT_LINKMAN char
  )
  其中,INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'指明所要導(dǎo)入的源文件,其實(shí)源文件也可以直接通過命令行來輸入獲得,fj_ipa_agentdetail為目標(biāo)表的名字,fields terminated ","是指源文件的各個字段是以逗號分隔,trailing nullcols表示遇到空字段依然寫入到數(shù)據(jù)庫表中,最后這5個字段是目標(biāo)數(shù)據(jù)庫表的字段結(jié)構(gòu)。通過上面這個典型的控制文件的格式分析可知,控制文件需要與源文件的格式信息一致,否則導(dǎo)入數(shù)據(jù)會出現(xiàn)異常。
  除了控制以外,sql*loader的還需要數(shù)據(jù)文件,即源文件。根據(jù)格式的不同,源文件可以分為固定字段長度和有分隔符這兩大類,這里將分別說明這兩種情況:
  固定字段長度的文本文件
  就是每個字段擁有固定的字段長度,比如:
  602530005922 1012
  602538023138 1012
  602536920355 1012
  602531777166 1012
  602533626494 1012
  602535700601 1012
  有分隔符的文本文件
  就是每個字段都有相同的分隔符分隔,比如:
  1001,上海長途電信綜合開發(fā)公司,南京東路34號140室
  1002,上海樺奇通訊科技有限公司,武寧路19號1902室
  1003,上海邦正科技發(fā)展有限公司,南京東路61號903室
  對于上述兩種文件格式sql*loader均可以做處理,下面就前面那個固定長度的文本來舉例說明:
  由于該文本只有兩個字段,一個為設(shè)備號,一個是區(qū)局編號,兩者的長度分別為20和5,那么可以編制控制文件如下:
  LOAD DATA
   INFILE '/ora9i/fengjie/agent/data/ipaagent200410.txt'
   TRUNCATE
   INTO TABLE fj_ipa_agent
  ( DEVNO POSITION(1:20) CHAR,
   BRANCH_NO POSITION(21:25) CHAR
  )
  其中,'/ora9i/fengjie/agent/data/ipaagent200410.txt'為該文件的完全路徑,POSITION(M:N)表示該字段是從位置M到位置N。
  對于有分隔符的數(shù)據(jù)文件,前面已經(jīng)有一個例子,這里就不再贅述了?傊,使用Sql*Loader能夠輕松將數(shù)據(jù)文件導(dǎo)入到數(shù)據(jù)庫中,這種方法也是最常用的方法。

  二、 使用專業(yè)的數(shù)據(jù)抽取工具

  目前在數(shù)據(jù)倉庫領(lǐng)域中,數(shù)據(jù)抽取與裝載(ETL)是一重要的技術(shù),這一技術(shù)對于一些大的數(shù)據(jù)文件或者文件數(shù)量較多尤其適合。這里簡單介紹目前一款主流的數(shù)據(jù)抽取工具――Informatica。
  該工具主要采用圖形界面進(jìn)行編程,其主要工作流程是:首先將源數(shù)據(jù)文件的結(jié)構(gòu)(格式)導(dǎo)入為Informatica里,然后根據(jù)業(yè)務(wù)規(guī)則對該結(jié)構(gòu)進(jìn)行一定的轉(zhuǎn)換(transformation),最終導(dǎo)入到目標(biāo)表中。
  以上過程僅僅只是做了一個從源到目標(biāo)的映射,數(shù)據(jù)的實(shí)際抽取與裝載需要在工作流(workflow)里進(jìn)行。
  使用專業(yè)的數(shù)據(jù)抽取工具,可以結(jié)合業(yè)務(wù)邏輯對多個源數(shù)據(jù)進(jìn)行join,union,insect等操作,適合于大型數(shù)據(jù)庫和數(shù)據(jù)倉庫。

  三、 使用Access工具導(dǎo)入
  可以直接在Access里選擇‘打開‘文本文件,這樣按照向?qū)韺?dǎo)入一個文本文件到Access數(shù)據(jù)庫中,然后使用編程的方法將其導(dǎo)入到最終的目標(biāo)數(shù)據(jù)庫中。
  這種方法雖然煩瑣,但是其對系統(tǒng)的軟件配置要求相對較低,所以也是有一定的使用范圍。
  四、 小結(jié)
  總之,平面文件轉(zhuǎn)化為數(shù)據(jù)庫格式有利于數(shù)據(jù)的處理,顯然,數(shù)據(jù)庫強(qiáng)大的數(shù)據(jù)處理能力比直接進(jìn)行文件I/O效率高出很多,希望本文能夠?qū)υ擃I(lǐng)域做一個拋磚引玉的作用。