数据抽取有好多种kettle作为开源版本还是很好用的。
下面就说说这个小项目的具体实施过程
1、先说这个小项目的由来 这个抽取的小项目其实自己没事找事来的,本公司和一个央企做环保项目,然后涉及到数据抽取这块,人家不给做了但是合同上也还真没明确说让乙方做。
怼了乙方一顿,怎么办自己找事自己做呗,乙方已经建好了需求的表SQLServer数据库,我们的业务数据库oracle,表的结构啊 内容啊 不完全一样但是都是业务数据中有的字段,需要拼凑
2、开干
首先整理业务从sqlserver上创建一个中间表把oracle业务库中的数据直接抽取过来直接增量
这其中要配置数据源,数据源就是连接的数据库的配置等这里就不介绍了。主要是数据字段问题,因为数据字段类型不同的数据库会不同如下:
默认的oracle NUMBER类型 和sqlserver numeric(38, 0) 是一样的如果sqlserver 不指定的话就会一直报错
以下是两种数据量类型的比较:
Oracle和sqlserver数据类型对应
SQL Server 数据类型 | Oracle 数据类型 |
---|---|
bigint | NUMBER(19,0) |
binary(1-2000) | RAW(1-2000) |
binary(2001-8000) | BLOB |
bit | NUMBER(1) |
char(1-2000) | CHAR(1-2000) |
char(2001-4000) | VARCHAR2(2001-4000) |
char(4001-8000) | CLOB |
date | DATE |
datetime | DATE |
datetime2(0-7) | TIMESTAMP(7)(对于 Oracle 9 和 Oracle 10);VARCHAR(27)(对于 Oracle 8) |
datetimeoffset(0-7) | TIMESTAMP(7) WITH TIME ZONE(对于 Oracle 9 和 Oracle 10);VARCHAR(34)(对于 Oracle 8) |
decimal(1-38, 0-38) | NUMBER(1-38, 0-38) |
float(53) | FLOAT |
float | FLOAT |
地理 | BLOB |
geometry | BLOB |
hierarchyid | BLOB |
图像 | BLOB |
int | NUMBER(10,0) |
money | NUMBER(19,4) |
nchar(1-1000) | CHAR(1-1000) |
nchar(1001-4000) | NCLOB |
ntext | NCLOB |
numeric(1-38, 0-38) | NUMBER(1-38, 0-38) |
nvarchar(1-1000) | VARCHAR2(1-2000) |
nvarchar(1001-4000) | NCLOB |
nvarchar(max) | NCLOB |
real | real |
smalldatetime | DATE |
int | NUMBER(5,0) |
smallmoney | NUMBER(10,4) |
sql_variant | N/A |
sysname | VARCHAR2(128) |
text | CLOB |
time(0-7) | VARCHAR(16) |
timestamp | RAW(8) |
tinyint | NUMBER(3,0) |
uniqueidentifier | CHAR(38) |
varbinary(1-2000) | RAW(1-2000) |
varbinary(2001-8000) | BLOB |
varchar(1-4000) | VARCHAR2(1-4000) |
varchar(4001-8000) | CLOB |
varbinary(max) | BLOB |
varchar(max) | CLOB |
xml | NCLOB |
这就实现了从oracle到sqlserver的提取
然后下一步就是sql内部提取
3、kettle的流程如下:
这里其实比上一个更简单就是涉及到两个点一个是时间转字符串和转float类型
时间转字符串如下:Select CONVERT(varchar(100), GETDATE(), 20): 2006-05-16 10:57:47
转float如下图:
这样就做好了两个提取的转换
转换做完了把这两个ktr文件放到服务器上并且data-integration也要放到服务器上并能够运行,我把jdk也和data-integration放到了一起就不用安装jdk了
修改Spoon中的配置修改好了以后就可以拷贝到哪都能用了就是有点小大
这样就可以做完了
4、但是不能总用手点击啊可以用data-integration中自带的job来实现多长时间采集一次但是要开着spoon软件,如果谁误关了 就不执行了,想了想还是用windos自带的定时任务吧。
首先制作bat文件如下方法:
制作完成后点击bat文件测试下是否能够执行,如果能执行则下一步,不能则查找原因。
5、制作windows执行计划
我的电脑-右键-管理
到此任务创建完成 就等着执行吧!!!!!!!!