对增量数据是否如期ETL的监控

五一的三天假期期间,ETL逻辑上出现了一些问题,导致每天需要装入DW的增量数据没有按设计装入。所以需要在ETL后对产生的增量数据进行检查,避免出现某天的增量数据出现丢失后自己被动的处理问题。

需求:如当天ETL的增量数据出现问题,需要让两方面的人或程序(DBA与BI)知晓并及时处理。

1. 在ODS服务器上建立如下库、表:

CREATE   DATABASE  `imm`  /* !40100 DEFAULT CHARACTER SET utf8  */ ;

--  item_info记录不同项目名称与项目内的抽查表(前提:此表每天均有数据产生),以后如有新项目,只需在此表中添加记录
CREATE   TABLE  `item_info` (
  `id` 
int ( 11 DEFAULT   NULL ,
  `itemname` 
varchar ( 64 DEFAULT   NULL ,
  `tabNameChk` 
char ( 32 DEFAULT   NULL
) ENGINE
= InnoDB  DEFAULT  CHARSET = utf8;

--  icc表记录每个项目的检查时间与是否成功ETL的状态标志
CREATE   TABLE  `icc` (
  `id` 
int ( 11 NOT   NULL  AUTO_INCREMENT,
  `entertime` 
datetime   DEFAULT   NULL ,
  `itemname` 
varchar ( 64 DEFAULT   NULL ,
  `flag` 
smallint ( 6 DEFAULT   NULL ,
  
PRIMARY   KEY  (`id`)
) ENGINE
= InnoDB   DEFAULT  CHARSET = utf8;


 2.建立定时检查的procedure与event:

CREATE   PROCEDURE  cc_pro()
BEGIN
DECLARE  v_max  smallint ;
DECLARE  v_title  bigint ;
DECLARE  v_itemN  char ( 32 );
DECLARE  v_tab  char ( 64 );
DECLARE  i  smallint ;
SET  i = 1 ;
SELECT   max (id)  INTO  v_max  FROM  imm.item_info;
WHILE  i  <=  v_max DO
SELECT  itemname,tabNameChk  INTO  v_itemN,v_tab  FROM  imm.item_info  WHERE  id = i;
SET   @dbname = v_itemN;
SET   @tabname = v_tab;
SET   @s_name   =  CONCAT( @dbname , ' . ' , @tabname );
SET   @tempsql   =  concat( ' SELECT count(db_id) INTO @v_title FROM  ' , @s_name , ' ; ' );
PREPARE  _stmt  FROM   @tempsql ;
EXECUTE  _stmt;
DEALLOCATE   PREPARE  _stmt;
IF ( @v_title   >   0 THEN
INSERT   INTO  imm.icc(entertime,itemname,flag)  VALUES (now(),v_itemN, 1 );
ELSE
INSERT   INTO  imm.icc(entertime,itemname,flag)  VALUES (now(),v_itemN, 0 );
END   IF ;
SET  i = i + 1 ;
END   WHILE ;
END

定时调用procedure,在此之前检查事件调度器是否开启:

+ -- ---------------+-------+
|  Variable_name    |  Value  |
+ -- ---------------+-------+
|  event_scheduler  |   ON      |
+ -- ---------------+-------+

CREATE  EVENT `ccpro_exec`  ON  SCHEDULE
        EVERY 
1   DAY  STARTS  ' 2011-05-05 07:00:00 '
    
ON  COMPLETION  NOT  PRESERVE
    ENABLE
    COMMENT 
' 在ETL执行完成后进行增量数据质量检查 '
    DO 
BEGIN
call imm.cc_pro2;
END

 

以上事件的作用是每天7点钟检视一次各项目的增量情况


3.接下来可以随便写个shell脚本,作用是对当天的检查结果进行邮件发送(以前我喜欢发送到移动139邮箱,不过时下有太多的邮箱提供手机绑定功能。所以象我这样偷懒的可以只发封邮件。)

#!/bin/bash
#scriptname:icc_result.sh
#author:liuming
#datetime:
2011 - 05 - 05

function send_message(){
mysql -u$dbuser -p$passwd -D$dbname -e'select * from icc where date(entertime)=date(now());' > $r_txt
mail -s  " `date +%Y-%m-%d_%H:%M` ETL(increment data) status  "  $to_email <$r_txt
}

function main(){
r_txt
= " `pwd`/icc_result.txt "
dbuser
= 'xxxx'
passwd
= 'xxxx'
dbname
= 'imm'
tabname
= 'icc'
to_email
= 'xxxx@xxx .com'

send_message
}

main

 

4.对于app方面,可提供相关表名,让其在计算之前进行判断。此处省去N个字... 

 

 

转载于:https://www.cnblogs.com/minglog/archive/2011/05/05/2037566.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值