请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

快捷登录

搜索

Kettle设计发送邮件

一、背景

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

二、数据库设计
Kettle设计发送邮件-1.jpg
数据库设计



两个表组成,邮件发送设置表,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

两个次要的流程设计如下:
Kettle设计发送邮件-2.jpg
主入口设计


Kettle设计发送邮件-3.jpg
执行sql生成excel



四、调用

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

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

使用道具 举报

大神点评6

渝宝贝 2019-10-9 18:18:23 显示全部楼层
分享了
回复

使用道具 举报

xhqwd159 2019-10-9 18:20:05 显示全部楼层
分享了
回复

使用道具 举报

6585 2019-10-9 18:22:25 显示全部楼层
分享了
回复

使用道具 举报

鼎力支持!!
回复

使用道具 举报

啊啊啊啊啊啊啊啊啊啊啊
回复

使用道具 举报

唉?楼主写完了?不打算多写点么?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册