You are on page 1of 7

Kettle 笔记 5 复杂的案例 作者:张孟志

日期:2014-03-18

联系方式:zhangmengzhi2005@126.com

Kettle 笔记 5 复杂的案例

在《Kettle 笔记 4 简单的案例》中介绍了 CSV2XMLDB2DB 两个简单的案 例。本文将介绍一个稍微复杂的例子——关联查询,根据客户,帐户,交易表中 的数据,生成对应的数据文件。

1.创建案例用的表。

//命令行 input 用户登录 @>mysql -u input -p @>密码 //使用 inputdb 数据库 use inputdb; -- 创建客户表 create table cust (

custno

int not null,

-- 客户号

custname

varchar(200) null,

-- 客户姓名

custid

varchar(50) not null, -- 客户身份 ID

custtype

char(1) not null

-- 客户类型,1 对公,2 对私

) default charset=utf8;

-- 创建帐号表 create table account (

acctno

int not null,

--

帐号

custno

int not null,

-- 帐号对应客户号

amt

double(20,2) not null -- 帐号余额

) default charset=utf8;

-- 创建交易表 create table trade (

tradeid

int not null,

-- 交易号

acctno

int not null,

--

帐号

amt

double(20,2) not null -- 交易余额

) default charset=utf8;

-- 插入客户信息 set names gb2312; insert into cust values(1,'李四','123456789','2'); insert into cust values(2,'李四科技有限公司','123456789','1'); insert into cust values(3,'随便食品加工厂','3345433322','1'); insert into cust values(4,'可靠互联网集团','453423422','1'); insert into cust values(5,'张三丰','776454544','2'); insert into cust values(6,'牛大','1534676789','2');

-- 插入帐号信息 insert into account values(1,2,'4334.35'); insert into account values(2,1,'41134.23'); insert into account values(3,4,'6434.13'); insert into account values(4,6,'89434.73'); insert into account values(5,3,'434.33'); insert into account values(6,5,'1212434.01'); insert into account values(7,4,'84434'); insert into account values(8,2,'4834.33');

-- 插入交易信息 insert into trade values(1,2,'834.33'); insert into trade values(2,3,'4.33'); insert into trade values(3,2,'34'); insert into trade values(4,5,'8.93'); insert into trade values(5,6,'83'); insert into trade values(6,8,'12.3'); insert into trade values(7,7,'45.8'); insert into trade values(8,1,'113'); insert into trade values(9,4,'65.2');

2. 新建一个转换 Retail,保存(到资源库)。 3.分别将多个组件拖到主工作台上,按住 Shift 键,同时,点击一个组件, 形成被选中的状态,拖动到目标组件上。于是,形成一个数据流向的箭头(hop)。 显示效果如下图所示。

3.1 表输入(输入) 3.2 数据库查询(查询) 步骤名称写入 account 表查询,数据库连接选择 inputdb 数据库连接,查询 的表写入 account ,查询所需的关键字中,表字段写入 acctno ,比较操作符写入 “ =
  • 3.1 表输入(输入)

3.1 表输入(输入) 3.2 数据库查询(查询) 步骤名称写入 account 表查询,数据库连接选择 inputdb 数据库连接,查询 的表写入 account ,查询所需的关键字中,表字段写入 acctno ,比较操作符写入 “ =
  • 3.2 数据库查询(查询)

步骤名称写入 account 表查询,数据库连接选择 inputdb 数据库连接,查询

的表写入 account,查询所需的关键字中,表字段写入 acctno,比较操作符写入 “=”,字段 1 写入 acctno。在查询表返回的值里面写入 custno,确定完成。

3.1 表输入(输入) 3.2 数据库查询(查询) 步骤名称写入 account 表查询,数据库连接选择 inputdb 数据库连接,查询 的表写入 account ,查询所需的关键字中,表字段写入 acctno ,比较操作符写入 “ =
  • 3.3 数据库查询(查询)

再创建一个数据库查询,命名为 cust 表查询,查询的表写入 cust,查询所 需的关键字写入 custno=custno,查询表返回的值写入 custnamecustidcusttype

再创建一个数据库查询,命名为 cust 表查询,查询的表写入 cust ,查询所 需的关键字写入 custno=custno ,查询表返回的值写入 custname , custid , custtype 。 3.4 过滤记录(

3.4 过滤记录(Flow)和两个 Modified Java Script Value(脚本) 点击左侧的过滤记录(Flow),拖动到主窗口释放鼠标。点击左侧的 Modified Java Script Value(脚本),拖动两个到主窗口释放鼠标。分别双击打开,重命 名为“对公类型修改”和“对私类型修改”。同时,分别创建“过滤记录”和“对 公类型修改”,“对私类型修改”的连接。 过滤记录(Flow)设置,在条件设置框中,条件选择字段“custtype”,条

件为“=”,比较条件为常量“1”。

再创建一个数据库查询,命名为 cust 表查询,查询的表写入 cust ,查询所 需的关键字写入 custno=custno ,查询表返回的值写入 custname , custid , custtype 。 3.4 过滤记录(

“对公类型修改”只配置一个变量。在里面写入 javascript 脚本语句“var custtype_cn='对公客户交易'”,在字段中写入 custtype_cn,类型选为 string

确定。

确定。 “对私类型修改”只配置一个变量。在里面写入 javascript 脚本语句“ var custtype_cn=' 对私客户交易 ' ”,在字段中写入 custtype_cn ,类型选为 string 。 确定。 3.5 两个增加常量(转换)

“对私类型修改”只配置一个变量。在里面写入 javascript 脚本语句“var custtype_cn='对私客户交易'”,在字段中写入 custtype_cn,类型选为 string。 确定。

确定。 “对私类型修改”只配置一个变量。在里面写入 javascript 脚本语句“ var custtype_cn=' 对私客户交易 ' ”,在字段中写入 custtype_cn ,类型选为 string 。 确定。 3.5 两个增加常量(转换)

3.5 两个增加常量(转换) 选中两个增加常量(转换),拖动到主窗口释放鼠标。分别双击打开,重命 名为“增加对公常量”和“增加对私常量”。分别建立“对公类型修改”和“对 私类型修改”与“增加对公常量”和“增加对私常量”的连接。

确定。 “对私类型修改”只配置一个变量。在里面写入 javascript 脚本语句“ var custtype_cn=' 对私客户交易 ' ”,在字段中写入 custtype_cn ,类型选为 string 。 确定。 3.5 两个增加常量(转换)

双击“增加对公常量”,名称写入 value,类型选择 string,值写入“这是

一笔对公客户发生的交易”,确定保存。

一笔对公客户发生的交易”,确定保存。 同理,双击“增加对私常量”,名称写入 value ,类型选择 string ,值写入 “这是一笔对私客户发生的交易”,确定保存。 3.6 文本文件输出(输出) 双 击 打 开 “ 文 本

同理,双击“增加对私常量”,名称写入 value,类型选择 string,值写入 “这是一笔对私客户发生的交易”,确定保存。

一笔对公客户发生的交易”,确定保存。 同理,双击“增加对私常量”,名称写入 value ,类型选择 string ,值写入 “这是一笔对私客户发生的交易”,确定保存。 3.6 文本文件输出(输出) 双 击 打 开 “ 文 本

3.6 文本文件输出(输出)

双 击 打 开 “ 文 本 文

件 输

文 件 名

称 写 入

F:\kettle4.4\distrib\test\Retail。点击内容标签,根据需要进行修改,这里

不修改。点击字段标签,名称依次写入 tradeidacctnoamtcustnocustname

custidcusttype_cnvalue,类型根据各个字段实际类型进行选择。确定保存。

一笔对公客户发生的交易”,确定保存。 同理,双击“增加对私常量”,名称写入 value ,类型选择 string ,值写入 “这是一笔对私客户发生的交易”,确定保存。 3.6 文本文件输出(输出) 双 击 打 开 “ 文 本
一笔对公客户发生的交易”,确定保存。 同理,双击“增加对私常量”,名称写入 value ,类型选择 string ,值写入 “这是一笔对私客户发生的交易”,确定保存。 3.6 文本文件输出(输出) 双 击 打 开 “ 文 本

4.

保存转换后运行。

F9,或选择“Action-->“执行”,在执行转换界面“Launch”转换。

  • 5. 查看日志与结果。

执行转换过程会有信息输出到控制台。重点查看“步骤度量”、“日志”。

4. 保存转换后运行。 按 F9 ,或选择“ Action ” --> “执行”,在执行转换界面“ Launch ”转换。 5. 查看日志与结果。 执行转换过程会有信息输出到控制台。重点查看“步骤度量”、“日志”。 查看新生成的文件。 tradeid;acctno;amt;custno;custname;custid;custtype_cn;value
4. 保存转换后运行。 按 F9 ,或选择“ Action ” --> “执行”,在执行转换界面“ Launch ”转换。 5. 查看日志与结果。 执行转换过程会有信息输出到控制台。重点查看“步骤度量”、“日志”。 查看新生成的文件。 tradeid;acctno;amt;custno;custname;custid;custtype_cn;value

查看新生成的文件。

tradeid;acctno;amt;custno;custname;custid;custtype_cn;value 2; 3; 4.33; 4;可靠互联网集团;453423422;对公客户交易;这是一笔对公客户发生的交易 4; 5; 8.93; 3;随便食品加工厂;3345433322;对公客户交易;这是一笔对公客户发生的交易 6; 8; 12.3; 2;李四科技有限公司;123456789;对公客户交易;这是一笔对公客户发生的交易 7; 7; 45.8; 4;可靠互联网集团;453423422;对公客户交易;这是一笔对公客户发生的交易 8; 1; 113.0; 2;李四科技有限公司;123456789;对公客户交易;这是一笔对公客户发生的交易 1; 2; 834.33; 1;李四;123456789;对私客户交易;这是一笔对私客户发生的交易 3; 2; 34.0; 1;李四;123456789;对私客户交易;这是一笔对私客户发生的交易 5; 6; 83.0; 5;张三丰;776454544;对私客户交易;这是一笔对私客户发生的交易 9; 4; 65.2; 6;牛大;1534676789;对私客户交易;这是一笔对私客户发生的交易