对一些数据,我们不能直接从数据库抽取到数据仓库,而是以另一种形式存在,如bat文件、txt文本等,那么对于这些文件数据该如何处理。
方法:(1)利用Oracle的SQL plus工具,对数据进行写入到原始的数据表(即再数据从仓库中建的表,用于存储文件的原始数据),然后再对原始的数据进行更新(U)、插入(I)、删除(D)操作即可
注:原始的数据文件中的字段必须要有数据记录的操作类型,即U、I、D标识
例子:
前提:
(1)建立源数据表以INC开头命名,用以存储原始的数据
(2)建立数据仓库的表以ODS命名,用以存储处理过后的数据
过程:
(1)将数据文件通过Oracle的sqlldr导到数据中的INC表中
(2)INC中的数据是没经过处理的,要经过转换成数据格式符合的格式,就需要通过转换,如日期、字符串的转换
(3)将INC的数据经过处理加载到目标的表ODS中
SQL plus导数据进入数据库的方法:
1、编写CTL文件
格式如下:
OPTIONS(errors=5000000,bindsize=33554432,readsize=33554432)----当数据文件过大,用于改变缓存,否则会报错
LOAD DATA
CHARACTERSET UTF8 -----字符的格式
INFILE "D:\INC\data\etl\test.dat" -----数据文件的位置
TRUNCATE INTO table_name ----目标表
Fields terminated by "" -----数据文件字符的分隔符
trailing nullcols
(
id char(4000),
name char(4000)
)
注:若需要将字段拼到一起,给一个新的字段,可以在CTL文件中直接写
如: ID_name char(4000) “:id||:name”
这里的冒号可以理解为变量的赋值,|| 依然是Oracle的拼接字符
2、利用Oracle的sqlldr命令将数据文件导入到INC表中
sqlldr userid=用户名/用户密码 control=D:\test\test.ctl log=D:\test\test.log bad=D:\test\test.bad
3、将INC表中的数据导进ODS中
可以用存储过程,也可以用kettle等ETL工具。