ETL示例演示

1.创建目的表与中间表

现在需要将MSSQL中的商品、品类等数据抽取到MYSQL的数据仓库中,所以先提前在MYSQL数据仓库中创建好相关的表。为了表示更好理解,这边创建表格只取核心字段(如ID,名称,分类ID)
以下创建脚本在MYSQL数据仓库中执行或者通过一个SQL任务来
— 商品目的表
drop table if exists d_goods;
create table d_goods
(
fid int,
fname nvarchar(150),
fclassid int
);
— 商品中间表
drop table if exists d_goods_temp;
create table d_goods_temp
(
fid int,
fname nvarchar(150),
fclassid int
);
 
— 商品品类目的表
drop table if exists d_goodsclass;
create table d_goodsclass
(
fid int,
fname nvarchar(150),
fparentid int
);
— 商品品类中间表
drop table if exists d_goodsclass_temp;
create table d_goodsclass_temp
(
fid int,
fname nvarchar(150),
fparentid int
);
–门店表
drop table if exists d_department;
create table d_department
(
departmentid int,
departmentname nvarchar(150),
departmentclassid int
);
–门店中间表
drop table if exists d_department_temp;
create table d_department_temp
(
departmentid int,
departmentname nvarchar(150),
departmentclassid int
);
–区域表
drop table if exists d_departmentclass;
create table d_departmentclass
(
departmentclassid int,
departmentclassname nvarchar(150),
parentid int
);
–区域中间表
drop table if exists d_departmentclass_temp;
create table d_departmentclass_temp
(
departmentclassid int,
departmentclassname nvarchar(150),
parentid int
);
–事实表(销售流水账)
drop table if exists f_sale;
create table f_sale
(
fbillno varchar(150),– 编码
fitemid int , — 商品ID
fdeptid int , — 门店ID
fdate datetime, — 单据日期
fqty int , — 数量
famount decimal(20,3), — 销售金额
fcost decimal(20,3),– 销售成本
fprice decimal(20,3) — 销售单价
);
–事实表中间表(销售流水账)
drop table if exists f_sale_temp;
create table f_sale_temp
(
fbillno varchar(150),– 编码
fitemid int , — 商品ID
fdeptid int , — 门店ID
fdate datetime, — 单据日期
fqty int , — 数量
famount decimal(20,3), — 销售金额
fcost decimal(20,3),– 销售成本
fprice decimal(20,3) — 销售单价
);
在MYSQL中执行成功

2.创建数据源

点击数据源连接,进入数据源连接界面添加数据来源库和数据仓库

3.导入元数据

先选择sql数据源,点击批量导入,选择需要用到的来源表勾选,点击确定
如此操作批量导入表:商品表(goods)、品类表(goodsclass)、门店表(department)、区域表(departmentclass)、销售流水表(ICstockbill),效果如图
 
相同操作,选择数据仓库导入相关的中间表与目的表
商品表(d_goods)、商品中间表(d_goods_temp),品类表(d_goodsclass)品类中间表(d_goodsclass_temp)、门店表(d_department)、门店中间表(d_department_temp)区域表(d_departmentclass)、区域中间表(d_departmentclass_temp)、销售流水表(f_sale),销售流水中间表(f_sale),效果如图

4.新建流程

点击作业流程进入流程界面,右键点击主文件夹,新建一下销售文件夹用来存放作业流程,如下图
点击新建流程,输入流程名称、并选择文件夹、点击确定
  • 删除任务:删除中间表的历史数据
打开销售文件夹,选择流程在作业组件中添加任务,选中SQL任务并拖动到展示界面,如下图所示
选中SQL任务,双击或右键打开编辑,在基本信息输入任务名称
在脚本定义中选中数据库为创建的数据仓库,执行方式选择执行sql代码块,在脚本下方输入删除中间表的脚本,输入完成后点击确定。如下图所示
删除脚本:
truncate table d_goods_temp;
truncate table d_goodsclass_temp;
truncate table d_department_temp;
truncate table d_departmentclass_temp;
 
  • 抽取数据任务:从客户的数据源把需要的数据抽取到中间表
同样操作,添加数据流任务,在基本信息界面添加任务名称
点击源,输入如图信息
点击目标,输入如图所示信息
点击字段映射,输入如下信息
商品抽取脚本:
select goodsid as fid,goodsname as fname,goodsclassid as fclassid from goods
品类抽取脚本:
select goodsclassid as fid,goodsclassname as fname,parentid as fparentid from goodsclass
区域抽取脚本:
select departmentclassid as departmentclassid,departmentclassname as departmentclassname,parentid as parentid from departmentclass
门店抽取脚本:
select departmentid as departmentid,departmentname as departmentname,departmentclassid as departmentclassid from department
 
  • 插入任务:把抽取的数据从中间表抽到目的表
同样操作,添加一个SQL任务,输入如下信息
插入目的表脚本:

#商品表
truncate table d_goods;
insert into d_goods(fid,fname,fclassid)
select fid,fname,fclassid from d_goods_temp ;
#品类表
truncate table d_goodsclass;
insert into d_goodsclass(fid,fname,fparentid)
select fid,fname,fparentid from d_goodsclass_temp ;

#区域表
truncate table d_departmentclass;
insert into d_departmentclass(departmentclassid,departmentclassname,parentid)
select departmentclassid,departmentclassname,parentid from d_departmentclass_temp ;
#门店表
truncate table d_department;
insert into d_department(departmentid,departmentname,departmentclassid)
select departmentid,departmentname,departmentclassid from d_department_temp ;

对任务进行连线,如下图所示从START开始,先清除历史数据任务—再到抽取数据任务–插入数据任务

同样的方法,添加完基础资料后增加事实表流程,并对事实表(销售流水账)进行添加任务,如下图所示
清理中间表脚本:
delete from f_sale_temp;
抽取事实表脚本:
–提取销售单据数据
select fdate as fdate, orderid as fbillno,goodsid as fitemid,departmentid as fdeptid,totaldecimal as famount,totalmoney as fcost,quantity as fqty,saleprice as fprice from ICstockbill
插入目的表脚本:
delete from f_sale;
insert into f_sale(fdate,fbillno,fitemid,fdeptid,famount,fcost,fqty,fprice) select fdate,fbillno,fitemid,fdeptid,famount,fcost,fqty,fprice from f_sale_temp;

5.执行监控

添加完任务后,点击执行监控,
在执行监控界面选择基础资料流程,点击执行按钮
选择执行方式,从某点开始选择从START开始,点击执行
执行完毕后,会显示出执行的结果详细信息,如下图所示
执行成功后,在数据库可查询到数据