kettle 循环_Kettle设计发送邮件

一、背景

很多需求是日常用sql手工执行出结果的,有的需求需要周期性去出数据,每天执行固定的sql比较繁琐;设计一个模块就是直接通过sql,生成excel附件并且发送邮件,提供工作效率。

二、数据库设计

be306735621be732e595e808ae30c905.png

数据库设计

两个表组成,邮件发送设置表,sql和excel的sheet的对应关系

一个需求可能需要好几个sql才能产生结果,可以写到同一个sheet也可以写到不同的sheet,自由组合。

建表脚本

drop index idx_exec_sql_id on usys_getsqldata_sendmail;drop table if exists usys_getsqldata_sendmail;/*==============================================================*//* Table: usys_getsqldata_sendmail *//*==============================================================*/create table usys_getsqldata_sendmail(mail_id bigint not null auto_increment comment '编码',cycle_id char(1) not null comment '周期 D W M',exec_day smallint not null comment '执行日期:周期D = -1 W =周几 M=几号',send_type_id smallint not null comment '邮件发送类型:1 附件 2 动态内容 3 静态内容',exec_sql_id bigint not null comment '执行sql编码:无sql -1',excel_path varchar(100) comment '生成excel路径',excel_template varchar(100) comment '模板',to_users varchar(2500) not null comment '收信人 多个人用空格',sto_users varchar(2500) comment '抄送 多个人用空格',mail_subject varchar(255) not null comment '邮件主题',mail_content text comment '邮件内容',state_id smallint not null default 1 comment '记录状态1正常 0不正常',data_date int not null comment '数据日期',creater_name varchar(30) not null comment '创建人',modifier_name varchar(30) not null comment '修改人',gmt_created datetime not null default '1700-01-01 00:00:00' comment '创建时间',gmt_modified datetime not null default '1700-01-01 00:00:00' comment '修改时间',primary key (mail_id));alter table usys_getsqldata_sendmail c/*==============================================================*//* Index: idx_exec_sql_id *//*==============================================================*/create index idx_exec_sql_id on usys_getsqldata_sendmail(exec_sql_id);dmail(exec_sql_id);drop index idx_exec_sql_id on usys_exec_sql_defined;d/*==============================================================*//* Table: usys_exec_sql_defined *//*==============================================================*/create table usys_exec_sql_defined(id bigint not null auto_increment comment '编码',exec_sql_id bigint not null comment 'sql 组编码',step_id int not null comment '步骤',db_id int not null comment '数据库编码',start_sql text comment '预处理sql',getdata_sql text not null comment '出结果sql',end_sql text comment '清理sql',rsheet_name varchar(255) not null comment '生成excel 的sheet名',tsheet_name varchar(255) not null comment '模板的 sheet名',start_position varchar(10) not null comment '写excel单元格位置',gmt_created datetime not null default '1700-01-01 00:00:00' comment '创建时间',gmt_modified datetime not null default '1700-01-01 00:00:00' comment '修改时间',primary key (id)/*==============================================================*//* Index: idx_exec_sql_id *//*==============================================================*/create index idx_exec_sql_id on usys_exec_sql_defined(exec_sql_id=========================*/create index idx_exec_sql_id on usys_exec_sql_defined(exec_sql_id););

需要配置的表:usys_getsqldata_sendmail

mail_id 编码 调用时候需要传输这个id

cycle_id 周期 D W M 这个邮件的发送周期

exec_day 执行日期:周期D = -1 W =周几 M=几号 跟周期有关系

send_type_id 邮件发送类型:1 附件 2 动态内容 3 静态内容 目前支持excel附件 静态内容

exec_sql_id 执行sql编码:无sql -1 静态内容的时候是-1

excel_path 生成excel路径 配置excel生成的路径

excel_template 模板 配置excel的模板

to_users 收信人 多个人用空格

sto_users 抄送 多个人用空格

mail_subject 邮件主题

mail_content 邮件内容

state_id 记录状态1正常 0不正常

data_date 数据日期

creater_name 创建人

modifier_name 修改人

gmt_created 创建时间

gmt_modified 修改时间

需要配置的表 usys_exec_sql_defined

id 编码 主键,其他没有用处

exec_sql_id sql 组编码 关联usys_getsqldata_sendmail

step_id 步骤 一个邮件需要包含多个sheet的时候这个需要往下增

db_id 数据库编码 执行sql连接的数据库对应ganglia.usys_database_info

start_sql 预处理sql 有些sql比较复杂,需要做预处理

getdata_sql 出结果sql

end_sql 清理sql start_sql产生的临时表等可以在这里清除

rsheet_name 生成excel 的sheet名

tsheet_name 模板的 sheet名

start_position 写excel单元格位置

gmt_created 创建时间

gmt_modified 修改时间

三、模块设计

通过kettle来完成两个表的循环取数,写数,程序入口 见j_send_data_bymail_main.kjb

两个主要的流程设计如下:

437f809ab80564d7439e40e06027eba9.png

主入口设计

ba784bba8e82ab694702d8880465df57.png

执行sql生成excel

四、调用

调用入口,并且传递邮件id参数

kitchen.sh j_send_data_bymail_main.kjb -param:mail_id=1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值