看完这章你会学习到以下内容:
1. 尤其在用Excel或者其他非数据库文件传入数据时候,如何做到数据类型同步?
2. 两张表的合并要添加那些字段作为辅助说明?
2.1 ETL时间,数据更新时间 以及 Source_data 数据来源
数据源一 : Excel表格
一共有以下几个字段
![d0da1cfe147c22fa220d2b1415cd1312.png](https://img-blog.csdnimg.cn/img_convert/d0da1cfe147c22fa220d2b1415cd1312.png)
数据源二: MySQL数据 - srcsales数据库的sales_data表
![c255f9a8185675856d36a13516b6623d.png](https://img-blog.csdnimg.cn/img_convert/c255f9a8185675856d36a13516b6623d.png)
第一步: 首先在目标数据库里建立目标表。
因此,我们要在MySQL上面找到相应的创建表和插入语句,操作与Oracle数据库相似。
选中表然后右击,转储SQL文件的仅数据和结构,导出SQL文件到ORACLE数据库
![eb039832d56a27c93067dbde4b6d3374.png](https://img-blog.csdnimg.cn/img_convert/eb039832d56a27c93067dbde4b6d3374.png)
![0c582e36d04bd3f07a0a2f011c3ed6d3.png](https://img-blog.csdnimg.cn/img_convert/0c582e36d04bd3f07a0a2f011c3ed6d3.png)
在打开来自MySQL数据库的创建表语句,修改无用字段,并更改数据类型。
![51dfa2b291da0cac0a8a2d68a03673b5.png](https://img-blog.csdnimg.cn/img_convert/51dfa2b291da0cac0a8a2d68a03673b5.png)
第二步:修改结果如下,全部转化成Varchar2和Number 数据类型。
注意:尽量将所属字段的长度设置大一倍,因为不同的数据库类型字符类型和存储不一,如果少了,则读取不成功。
![0c6bbb10660d481f20139b259f9f34a5.png](https://img-blog.csdnimg.cn/img_convert/0c6bbb10660d481f20139b259f9f34a5.png)
这个就是以MySQL数据库创建表的数据类型,类似其他数据来源,CSV/Excel等可能格式存在不统一,因此,这里建议统一按照数据库格式
第三步:在Kettle的Excel输入空间上,就直接更改数据类型!长度和精度就按照获取来自头部数据类型后,默认便可。
![bd992e35024faa92f9f0826f994d27b4.png](https://img-blog.csdnimg.cn/img_convert/bd992e35024faa92f9f0826f994d27b4.png)
然后字段的名字,或许里面可以能一一对应(英文对照中文)
但是,Excel表里面的所有字段名字都转换为跟数据库的一致!
目的:就是在最后表输出的时候,能自动地匹配得到相应的字段,而不需要手动映射。
![36e9825ed76328e3457cb21e1336e467.png](https://img-blog.csdnimg.cn/img_convert/36e9825ed76328e3457cb21e1336e467.png)
第四步:两个数据源都需要去重,但前提必须要排序。
因此 先排序后去重!
![2fcc640d334f73184f2e483021aa2fb5.png](https://img-blog.csdnimg.cn/img_convert/2fcc640d334f73184f2e483021aa2fb5.png)
如果不排序,则会出现以下提示或者报错信息。
![590b3478c4ad2a67d3bd6153a91e1c04.png](https://img-blog.csdnimg.cn/img_convert/590b3478c4ad2a67d3bd6153a91e1c04.png)
第五步:然后两个数据源都增加一个默认字段,数据来源Source_DATA.请注意:这个名称一定要和最后在ODS层建立的字段名字一致(可以忽略大小写),要不然会出现SOURCE_DATA无法识别。
![655aa988ab745acb91027201e2fd57b9.png](https://img-blog.csdnimg.cn/img_convert/655aa988ab745acb91027201e2fd57b9.png)
![9548c1aa4500084ae992c10551b9774c.png](https://img-blog.csdnimg.cn/img_convert/9548c1aa4500084ae992c10551b9774c.png)
第六步:因为两张表都是上下形式叠加的,就像SQL语句里面的Union all。
数据来源要指定紧接上一步的操作,而不是刚输入进来的数据源。
![40dab6b5bfd13a136c3090064784fe44.png](https://img-blog.csdnimg.cn/img_convert/40dab6b5bfd13a136c3090064784fe44.png)
最后一步,设置T,表输出。
这里就包括,输出到那一个数据库下那一张表(前提已经要建立好)。
注意: 第一次输入的话,就勾选裁剪表(确保在输入进去前,先清空所有的数据)
然后选择获取字段,将多余的标志字段删去,原本用作标识共同连接的
![133a515217274e951c1e10fed5a68e4c.png](https://img-blog.csdnimg.cn/img_convert/133a515217274e951c1e10fed5a68e4c.png)
把表字段和流字段下的d,用del键删除即可。
之所以要删除原因:因为在ODS层建立的目标表并没有建立这一列。
![8337c82a83edc8ae884b77f758ffb365.png](https://img-blog.csdnimg.cn/img_convert/8337c82a83edc8ae884b77f758ffb365.png)