简单使用kettle转换经销商信息表

使用kettle把DMS数据库转换到本地(公司服务器)数据库,帆软报表对数据源的需求从DMS数据库改成这个本地数据库。

据说用帆软直接访问DMS数据库,对DMS可能会造成性能上的影响;就我目前所知,没有这种影响,kettle也是大量select DMS的数据。但是ETL成一个恰当的数据源(中间层),非常有价值。

这是第一次用kettle,所以仅以简单的转换为主,达成能够支持帆软报表的目标即可。更加完善的数仓设计不在本次考虑(维表事实表元数据等)。

 

1、经销商信息,目标字段:

简单使用kettle转换经销商信息表

  • 其中授权商圈、营业状态、省、市、县、大区、区域 源于他表,但转换时不做联接处理(不增加耦合);
  • 该表还有一些冗余字段,比如大区名称,DMS自身的处理没有级联更新而出现脏数据,所以转换时剔除这些字段。
  • 业务日期将转换为Date类型('YYYY-MM-DD'格式);以经销商名称为参照,取最后一条记录(多次入网的仅取最后一次,因为多次入网基本上意味着之前的入网是错误创建;DMS没有删除功能或标识,只有退网再入)。——注意这些都不做转换。
  • 但是将范围定在COMAPANY_ID=1001(从总公司的角度),这样会减少一半记录。

所以,这是一次 Data migration ,迁移一些列和一些行。

考虑仅仅是为了FineReports,又减少了一些字段,定为:

简单使用kettle转换经销商信息表

  我准备用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;  -- 只复制表结构

以上是同一服务器复制表结构的语句(未测试),但不同服务器的呢?尝试导出表结构:

简单使用kettle转换经销商信息表

  因导出工具版本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、编辑“转换---表输入”

简单使用kettle转换经销商信息表

 源表来自DMS连接 

 

4、编辑“输出---插入/更新”

简单使用kettle转换经销商信息表

我现在猜测:“提交记录数量”表示流的缓存大小。

现在是全量同步,而非增量同步。

连接输入和输出,保存该转换到一个文件夹(我选择帆软的报表文件夹)

 

5、新建作业,3分钟转换一次,成功执行,日志为:

简单使用kettle转换经销商信息表

简单使用kettle转换经销商信息表

首次从源表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行,所以日志不同,有可能因此。 

【本次使用结束】

 

上一篇:在网上找的一个处理数字四舍五入保留小数点后的函数


下一篇:python TypeError: Object of type 'Decimal' is not JSON serializable