使用kettle把DMS数据库转换到本地(公司服务器)数据库,帆软报表对数据源的需求从DMS数据库改成这个本地数据库。
据说用帆软直接访问DMS数据库,对DMS可能会造成性能上的影响;就我目前所知,没有这种影响,kettle也是大量select DMS的数据。但是ETL成一个恰当的数据源(中间层),非常有价值。
这是第一次用kettle,所以仅以简单的转换为主,达成能够支持帆软报表的目标即可。更加完善的数仓设计不在本次考虑(维表事实表元数据等)。
1、经销商信息,目标字段:
- 其中授权商圈、营业状态、省、市、县、大区、区域 源于他表,但转换时不做联接处理(不增加耦合);
- 该表还有一些冗余字段,比如大区名称,DMS自身的处理没有级联更新而出现脏数据,所以转换时剔除这些字段。
- 业务日期将转换为Date类型('YYYY-MM-DD'格式);以经销商名称为参照,取最后一条记录(多次入网的仅取最后一次,因为多次入网基本上意味着之前的入网是错误创建;DMS没有删除功能或标识,只有退网再入)。——注意这些都不做转换。
- 但是将范围定在COMAPANY_ID=1001(从总公司的角度),这样会减少一半记录。
所以,这是一次 Data migration ,迁移一些列和一些行。
考虑仅仅是为了FineReports,又减少了一些字段,定为:
我准备用UPDATED_TIME作为更新的标准,但是有不确定项:DMS自身是否真正在维护这个字段?目前看来比较像。
2、源表名称是dt_bb_dealers,目标表是dms_bb_dealers,字段名称不变。
CREATE TABLE IF NOT EXISTS finedb.dms_bb_dealers LIKE another_db.dt_bb_dealers; -- 复制表结构和索引 CREATE TABLE finedb.dms_bb_dealers As SELECT * FROM another_db.dt_bb_dealers LIMIT 0; -- 只复制表结构
以上是同一服务器复制表结构的语句(未测试),但不同服务器的呢?尝试导出表结构:
因导出工具版本5.6低于数据库版本5.7,无法导出。直接创建:
CREATE TABLE IF NOT EXISTS dms_bb_dealers (
DEALER_ID DECIMAL(8,0) NOT NULL,
DEALER_CODE VARCHAR(16), DEALER_NAME VARCHAR(128),
DEALER_SHORT_NAME VARCHAR(128), DEALER_LEVEL DECIMAL(8,0),
AUTHORIZED_BCD DECIMAL(8,0),
JOIN_TIME TIMESTAMP,
BIZ_STATUS DECIMAL(8,0),
PROVINCE DECIMAL(8,0),
CITY DECIMAL(8,0),
COUNTY DECIMAL(8,0),
REGISTERED_CAPITAL DECIMAL(12,2),
MARGIN DECIMAL(10,2),
INCORPORATOR_MOB VARCHAR(32),
DLR_REGION_ID DECIMAL(4,0),
DLR_SECTOR_ID DECIMAL(4,0),
REVOKE_DATE TIMESTAMP,
ADDRESS VARCHAR(128),
CREATED_TIME TIMESTAMP,
UPDATED_TIME TIMESTAMP,
PRIMARY KEY (DEALER_ID)
);
等到维护select文件时再建索引。
3、编辑“转换---表输入”
源表来自DMS连接
4、编辑“输出---插入/更新”
我现在猜测:“提交记录数量”表示流的缓存大小。
现在是全量同步,而非增量同步。
连接输入和输出,保存该转换到一个文件夹(我选择帆软的报表文件夹)
5、新建作业,3分钟转换一次,成功执行,日志为:
首次从源表Input 550 条记录到内存,从内存Write 550 到“表输入”;从表输入Input 550到内存, 从内存Output 550到流, 从流里Read 550, Write 550到目标表, Update 0, Error 0 ?
其后从源表Input 550 条记录到内存,从内存Write 550 到“表输入”;从表输入Input 550到内存, 从内存Output 0到流, 从目标表Read 550到内存, 从内存Write 550到目标表, Update 533, Error 0 ?
上面的推测有点混乱;首次我将缓存设置为10000行,所以日志不同,有可能因此。
【本次使用结束】