大型的数据库开发中常常遇到数据源是平面文件的情况对于这样的数据源无法使用数据库对其数据进行有效的管理 本文介绍几种常见的数据导入的方法希望能够给读者以启迪另外本文所涉及到的数据库均为ORACLE数据库其实对于其他数据库而言方法类似
一 Sql*:Loader
该方法是Oracle数据库下数据导入的最重要的方法之一该工具由Oracle客户端提供其基本工作原理是首先要针对数据源文件制作一个控制文件控制文件是用来解释如何对源文件进行解析其中需要包含源文件的数据格式目标数据库的字段等信息一个典型的控制文件为如下形式
LOAD DATA
INFILE /orai/fengjie/agent/data/ipaagentdetailtxt
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 /orai/fengjie/agent/data/ipaagentdetailtxt指明所要导入的源文件其实源文件也可以直接通过命令行来输入获得fj_ipa_agentdetail为目标表的名字fields terminated 是指源文件的各个字段是以逗号分隔trailing nullcols表示遇到空字段依然写入到数据库表中最后这5个字段是目标数据库表的字段结构通过上面这个典型的控制文件的格式分析可知控制文件需要与源文件的格式信息一致否则导入数据会出现异常
除了控制以外sql*loader的还需要数据文件即源文件根据格式的不同源文件可以分为固定字段长度和有分隔符这两大类这里将分别说明这两种情况
固定字段长度的文本文件
就是每个字段拥有固定的字段长度比如
有分隔符的文本文件
就是每个字段都有相同的分隔符分隔比如
上海长途电信综合开发公司南京东路号室
上海桦奇通讯科技有限公司武宁路号室
上海邦正科技发展有限公司南京东路号室
对于上述两种文件格式sql*loader均可以做处理下面就前面那个固定长度的文本来举例说明
由于该文本只有两个字段一个为设备号一个是区局编号两者的长度分别为20和5那么可以编制控制文件如下
LOAD DATA
INFILE /orai/fengjie/agent/data/ipaagenttxt
TRUNCATE
INTO TABLE fj_ipa_agent
( DEVNO POSITION(:) CHAR
BRANCH_NO POSITION(:) CHAR
)
其中/orai/fengjie/agent/data/ipaagenttxt为该文件的完全路径POSITION(M:N)表示该字段是从位置M到位置N
对于有分隔符的数据文件前面已经有一个例子这里就不再赘述了总之使用Sql*Loader能够轻松将数据文件导入到数据库中这种方法也是最常用的方法
二 使用专业的数据抽取工具
目前在数据仓库领域中数据抽取与装载(ETL)是一重要的技术这一技术对于一些大的数据文件或者文件数量较多尤其适合这里简单介绍目前一款主流的数据抽取工具――Informatica
该工具主要采用图形界面进行编程其主要工作流程是首先将源数据文件的结构(格式)导入为Informatica里然后根据业务规则对该结构进行一定的转换(transformation)最终导入到目标表中
以上过程仅仅只是做了一个从源到目标的映射数据的实际抽取与装载需要在工作流(workflow)里进行
使用专业的数据抽取工具可以结合业务逻辑对多个源数据进行joinunioninsect等操作适合于大型数据库和数据仓库
三 使用Access工具导入
可以直接在Access里选择打开文本文件这样按照向导来导入一个文本文件到Access数据库中然后使用编程的方法将其导入到最终的目标数据库中
这种方法虽然烦琐但是其对系统的软件配置要求相对较低所以也是有一定的使用范围
四 小结
总之平面文件转化为数据库格式有利于数据的处理显然数据库强大的数据处理能力比直接进行文件I/O效率高出很多希望本文能够对该领域做一个抛砖引玉的作用