实验背景和目标,参考课时6
第一章:实验准备
开通DataWorks服务
本次实验主要使用MaxCompute(DataWorks)客户端进行开发,如已开通相关服务,则直接跳过本章节,进入实验即可。如没有开通过相关服务,则按照如下步骤开通服务。
开通DataWorks服务
打开浏览器,输入阿里云官网地址 www.aliyun.com
使用自己的阿里云官网账号登陆控制台
登陆后进入管理控制台,选择产品与服务菜单,点击DataWorks子菜单,进入 Dataworks 概览页。
在DataWorks的概览页,若当前账号无存在项目,点击创建项目(注意:项目名称全系统唯一),如果已有项目,则直接使用提供的项目空间,进入数据开发。
付费模式
若自行创建项目。则选择地域、计算引擎服务类型以及DataWorks服务类型,点击下一步:
在新的弹出页面,输入项目名称(全局唯一)、项目描述、显示名等,点击“创建项目”按钮,完成项目创建。
进入管理控制台->产品与服务->DataWorks菜单,进入到DataWorks页面,选择对应的项目,点击进入数据开发。
非实验环境自行开通MaxCompute
选择付费方式 (本实例是按量付费)
确认订单
申请MaxCompute资源
请点击页面左侧的 实验资源 ,在左侧栏中,查看本次实验资源信息。
在弹出的左侧栏中,点击 创建资源 按钮,开始创建实验资源。
资源创建过程需要1-3分钟。完成实验资源的创建后,用户可以通过 实验资源 查看实验中所需的资源信息,例如:阿里云账号等。
第二章:实验步骤
实验数据准备
1、此次的数据质量监控实验,主要涉及如下业务表:
订单表:保存客户订购产品所产生的订单信息;
客户表:保存客户的姓名、地址信息;
配送表:保存配送员与订单的对应信息;
产品表:保存产品相关信息;
省份表:保存省份信息;
城市表:保存城市信息。
上述实体之间的主要关系如下:
2、 打开控制台,在产品与服务菜单中,选择Dataworks子菜单,点击后,选择对应的项目,进入工作区。
3、 进入工作区后,选择临时查询,新建一个脚本文件,选择好存放位置。
4、通过编写sql来完成数据表建表。
4.1 新建订单表
drop table if exists ODS_EBUSI_ORDERS;
create table ODS_EBUSI_ORDERS(
ORDER_ID BIGINT COMMENT '订单号',
CUSTOMER_ID BIGINT COMMENT '客户编码',
PRODUCT_ID BIGINT COMMENT '产品编码',
PRODUCT_CNT BIGINT COMMENT '产品数量',
ORDER_AMT DOUBLE COMMENT '产品费用',
SHIPPING_TYPE_ID BIGINT COMMENT '运输类型',
ORDER_TIME STRING COMMENT '订单时间'
)COMMENT '订单表';
将订单信息导入库表ODS_EBUSI_ORDERS内,在屏幕上点击“数据开发”,然后点击导入按钮。
选择对应的文件
打开后,注意相关配置选项,核查无误后,然后点击“下一步”
选择对应的库表, 核查无误后,点击“导入”
导入成功后,对表ODS_EBUSI_ORDERS进行查询,查看是否导数成功。
4.2新建客户表
drop table if exists ODS_EBUSI_CUSTOMERS;
create table ODS_EBUSI_CUSTOMERS(
CUSTOMER_ID BIGINT COMMENT '客户编码',
CUSTOMER_NAME STRING COMMENT '客户名称',
AGE BIGINT COMMENT '年龄',
GENDER BIGINT COMMENT '性别编码',
CITY_ID BIGINT COMMENT '城市编码',
CITY_NAME STRING COMMENT '城市名称',
PROVINCE_ID BIGINT COMMENT '省份编码',
PROVINCE_NAME STRING COMMENT '省份名称',
GEN_DATE STRING COMMENT '出生日期'
)COMMENT '客户表';
将客户信息导入库表ODS_EBUSI_CUSTOMERS内,在屏幕上点击“导入本地数据”按钮。
选择对应的文件
打开后,注意相关配置选项,核查无误后,然后点击“下一步”
选择对应的库表
核查无误后,点击“导入”
导入成功后,对表ODS_EBUSI_CUSTOMERS进行查询,查看是否导数成功。
4.3新建配送表
drop table if exists ODS_EBUSI_DISPATCH;
create table ODS_EBUSI_DISPATCH(
DISPATCH_ID BIGINT COMMENT '配送单号',
ORDER_ID BIGINT COMMENT '订单号',
EXPRESS_STAFF_ID BIGINT COMMENT '配送员编码',
STOREHOUSE_ID BIGINT COMMENT '仓库编码',
EXPECT_TIME DATETIME COMMENT '期望到货时间',
DISPATCH_TIME DATETIME COMMENT '开始送货时间'
)COMMENT '配送表';
将配送信息导入库表ODS_EBUSI_DISPATCH内,在屏幕上点击“导入本地数据”按钮。
选择对应的文件
打开后,注意相关配置选项,核查无误后,然后点击“下一步”
选择对应的库表
核查无误后,点击“导入”
导入成功后,对表ODS_EBUSI_DISPATCH进行查询,查看是否导数成功。
4.4新建产品表
drop table if exists ODS_EBUSI_DIM_PRODUCT;
create table ODS_EBUSI_DIM_PRODUCT(
PRODUCT_ID BIGINT COMMENT '产品编码',
PRODUCT_NAME STRING COMMENT '产品名称',
PRICE DOUBLE COMMENT '产品价格',
PRODUCT_CATEGORY_ID BIGINT COMMENT '产品类别'
)COMMENT '产品表';
将产品信息导入库表ODS_EBUSI_DIM_PRODUCT内,在屏幕上点击“导入本地数据”按钮。
选择对应的文件
打开后,注意相关配置选项,核查无误后,然后点击“下一步”
选择对应的库表
核查无误后,点击“导入”
导入成功后,对表ODS_EBUSI_DIM_PRODUCT进行查询,查看是否导数成功。
4.5新建省份表
drop table if exists ODS_EBUSI_DIM_PROVINCE;
create table ODS_EBUSI_DIM_PROVINCE(
PROVINCE_ID BIGINT COMMENT '省份编码',
PROVINCE_NAME STRING COMMENT '省份名称'
)COMMENT '省份表';
将省份信息导入库表ODS_EBUSI_DIM_PROVINCE内,在屏幕上点击“导入本地数据”按钮。
选择对应的文件
打开后,注意相关配置选项,核查无误后,然后点击“下一步”
选择对应的库表
核查无误后,点击“导入”
导入成功后,对表ODS_EBUSI_DIM_PROVINCE进行查询,查看是否导数成功。
4.6新建城市表
drop table if exists ODS_EBUSI_DIM_CITY;
create table ODS_EBUSI_DIM_CITY(
CITY_ID BIGINT COMMENT '城市编码',
CITY_NAME STRING COMMENT '城市名称',
LNG DOUBLE COMMENT '经度',
LAT DOUBLE COMMENT '维度',
PROVINCE_ID BIGINT COMMENT '省份编码'
)COMMENT '城市表';
将城市信息导入库表ODS_EBUSI_DIM_CITY内,在屏幕上点击“导入本地数据”按钮。
选择对应的文件
打开后,注意相关配置选项,核查无误后,然后点击“下一步”
选择对应的库表
核查无误后,点击“导入”
导入成功后,对表ODS_EBUSI_DIM_CITY进行查询,查看是否导数成功。
配置数据质量核查规则
通过excel模板,配置监控核查规则,主要是针对库表进行监控。
上述数据质量核查规则模板对应的各类内容如下:
核查规则编码:每条监控规则对应的唯一编码
核查规则名称:描述本条监控规则具体监控的内容
核查规则类型编码:具体的监控规则类别编码(1、2、3、4、5、6)
核查规则类型名称:监控类别编码对应的监控规则名称(1:错误值;2:重复值;3:数据不一致;4:数据完整性;5:缺失值;6:异常值)
状态:1:本条监控规则有效;0:本条监控规则已失效,或不再进行监控
负责人:此条监控规则的配置人员及后续处理人员
负责人邮箱:负责人邮箱,主要用于配置告警信息发送
负责人手机:负责人手机,主要用于配置告警信息发送
数据表:此条监控规则对应的后台数据表,即需要在此数据表上创建具体的监控查询语句
监控脚本:具体的监控核查脚本对应的查询SQL。
针对如下场景,配置相关的监控规则
监控场景:订单表内订单时间格式出错。
核查规则编码:check_001
核查规则名称:订单表订单时间格式出错
核查规则内容描述:订单表内订单时间格式出错
核查规则类型编码:1
核查规则类型名称:错误值
状态:1
负责人:小王
负责人邮箱:[email protected]
负责人手机:13900000001
涉及实体表:ODS_EBUSI_ORDERS
监控脚本:
SELECT ORDER_ID,ORDER_TIME
FROM ODS_EBUSI_ORDERS
WHERE NOT(INSTR(ORDER_TIME,'-',1,1) = 5 AND INSTR(ORDER_TIME,'-',1,2) = 8 AND INSTR(ORDER_TIME,'-',1,3) = 0)
or NOT(INSTR(ORDER_TIME,':',1,1) = 14 AND INSTR(ORDER_TIME,':',1,2) = 17 AND INSTR(ORDER_TIME,'-',1,3) = 0)
监控场景:订单表同一客户同一时间下了多次订单。
核查规则编码:check_002
核查规则名称:订单表同一客户同一时间多次订单
核查规则内容描述:订单表同一客户同一时间下了多次订单
核查规则类型编码:2
核查规则类型名称:重复值
状态:1
负责人:小王
负责人邮箱:[email protected]
负责人手机:13900000001
涉及实体表:ODS_EBUSI_ORDERS
监控脚本:
SELECT CUSTOMER_ID, ORDER_TIME, COUNT(DISTINCT ORDER_ID) ORDER_CNT
FROM ODS_EBUSI_ORDERS
GROUP BY CUSTOMER_ID, ORDER_TIME
HAVING COUNT(DISTINCT ORDER_ID) > 1
监控场景:客户信息表省份信息异常。
核查规则编码:check_003
核查规则名称:客户信息表省份信息异常
核查规则内容描述:客户信息表省份信息异常
核查规则类型编码:3
核查规则类型名称:数据不一致
状态:1
负责人:小张
负责人邮箱:[email protected]
负责人手机:13900000002
涉及实体表:ODS_EBUSI_CUSTOMERS\ODS_EBUSI_DIM_PROVINCE
监控脚本:
SELECT A.CUSTOMER_ID,A.PROVINCE_ID,A.PROVINCE_NAME,B.PROVINCE_ID,B.PROVINCE_NAME
FROM ODS_EBUSI_CUSTOMERS A
INNER JOIN ODS_EBUSI_DIM_PROVINCE B ON A.PROVINCE_ID = B.PROVINCE_ID
WHERE A.PROVINCE_NAME <> B.PROVINCE_NAME
监控场景:配送的订单在订单表中不存在。
核查规则编码:check_004
核查规则名称:配送表订单信息异常
核查规则内容描述:配送的订单在订单表中不存在
核查规则类型编码:4
核查规则类型名称:数据完整性
状态:1
负责人:小强
负责人邮箱:[email protected]
负责人手机:13900000003
涉及实体表:ODS_EBUSI_DISPATCH\ODS_EBUSI_ORDERS
监控脚本:
SELECT A.ORDER_ID
FROM ODS_EBUSI_DISPATCH A
LEFT OUTER JOIN ODS_EBUSI_ORDERS B ON A.ORDER_ID=B.ORDER_ID
WHERE B.ORDER_ID IS NULL
监控场景:客户信息表性别信息缺失。
核查规则编码:check_005
核查规则名称:客户信息表性别信息缺失
核查规则内容描述:客户信息表性别信息缺失
核查规则类型编码:5
核查规则类型名称:缺失值
状态:1
负责人:小张
负责人邮箱:[email protected]
负责人手机:13900000002
涉及实体表:ODS_EBUSI_CUSTOMERS
监控脚本:
SELECT *
FROM ODS_EBUSI_ORDERS A
WHERE A.ORDER_AMT IS NULL
监控场景:同客户单月购买次数异常(当月购买次数大于10次)。
核查规则编码:check_006
核查规则名称:同客户单月下订单次数异常
核查规则内容描述:同客户单月购买次数异常(当月购买次数大于10次)
核查规则类型编码:6
核查规则类型名称:异常值
状态:1
负责人:小强
负责人邮箱:[email protected]
负责人手机:13900000003
涉及实体表:ODS_EBUSI_ORDERS
监控脚本:
SELECT SUBSTR(ORDER_TIME,1,10),CUSTOMER_ID,COUNT(1)
FROM ODS_EBUSI_ORDERS A
GROUP BY SUBSTR(ORDER_TIME,1,10),CUSTOMER_ID
HAVING COUNT(1) > 10
将数据质量规则配置至MaxCompute
配置好数据监控规则excel后,我们将相关的监控规则导入库表内。
1、在库内新建数据质量监控规则表
drop table if exists ODS_DATA_CHECK_RULE;
create table ODS_DATA_CHECK_RULE(
CHECK_RULE_ID STRING COMMENT '核查规则编码',
CHECK_RULE_NAME STRING COMMENT '核查规则名称',
CHECK_RULE_DESC STRING COMMENT '核查规则内容描述',
CHECK_RULE_TYPE_ID STRING COMMENT '核查规则类型编码',
CHECK_RULE_TYPE_NAME STRING COMMENT '核查规则类型名称',
CHECK_RULE_STATUS STRING COMMENT '状态',
CHECK_RULE_OWNER STRING COMMENT '负责人',
CHECK_RULE_EMAIL STRING COMMENT '负责人邮箱',
CHECK_RULE_PHONE STRING COMMENT '负责人手机',
CHECK_RULE_TABLE STRING COMMENT '数据表',
CHECK_RULE_SQL STRING COMMENT '监控脚本'
)COMMENT '数据质量监控规则表';
2、 将监控规则信息导入库表ODS_DATA_CHECK_RULE内,在屏幕上点击“导入本地数据”按钮。
3、选择对应的文件
4、打开后,注意相关配置选项(注意分隔符配置),核查无误后,然后点击“下一步”
5、选择对应的库表
6、核查无误后,点击“导入”
7、导入成功后,对表ODS_DATA_CHECK_RULE进行查询,查看是否导数成功。
通过MaxCompute实现数据质量监控
目前已有相关的业务数据,现需通过DataWorks来实现数据质量监控。
此次代码编写中,涉及的几个时间变量如下:
vDate=$[yyyy-mm-dd-1]
vDay=$[yyyymmdd-1]
datetime=$[yyyy-mm-dd]
hour=$[hh24:mi:ss]
1、 首先先创建一张新表,用于保存最终的监控报告。
drop table ifexists DWD_DATA_CHECK_REPORT;
create tableDWD_DATA_CHECK_REPORT(
CHECK_RULE_ID STRING COMMENT '核查规则编码',
CHECK_RULE_NAME STRING COMMENT '核查规则名称',
CHECK_RULE_TYPE_NAME STRING COMMENT '核查规则类型名称',
CHECK_RULE_OWNER STRING COMMENT '负责人',
CHECK_RULE_TABLE STRING COMMENT '数据表',
WARNING_TIME STRING COMMENT '告警时间',
WARNING_CONTENT STRING COMMENT '告警内容'
)COMMENT '数据质量监控报告表'
PARTITIONED BY (
DT STRING COMMENT '时间分区'
);
2、新建一个数据质量监控业务流程
3、配置一个业务流程,定义名称
4、从左侧节点组件中,拖取一个虚节点至右侧空白处,并进行命名。
双击该虚节点组件,点击右侧调度设置 配置根节点
5、将左侧ODPS_SQL控件,拖至右侧空白处,并进行命名。
6、双击刚建好的组件,进入编辑界面。
7、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
----新建临时表1用于存放数据质量是否产生告警
drop table if exists TMP_DWD_DATA_CHECK_REPORT_001_${vDay};
create table TMP_DWD_DATA_CHECK_REPORT_001_${vDay}(
CHECK_RULE_ID STRING COMMENT '核查规则编码',
WARNING_STATUS STRING COMMENT '是否告警'
)COMMENT '数据质量监控规则告警状态';
8、继续拖拽左侧组件,进行编辑,保存监控规则编码check_001是否告警。
9、双击新建的组件后,进入编辑界面。
10、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
insert
into table TMP_DWD_DATA_CHECK_REPORT_001_${vDay}
select
'check_001',
case when A.WARNING_CNT>0 then '1' else '0' end as WARNING_STATUS
from (select
COUNT (1) WARNING_CNT
from ODS_EBUSI_ORDERS
where not(instr(ORDER_TIME,'-',1,1) = 5 and instr(ORDER_TIME,'-',1,2) = 8 and
instr(ORDER_TIME,'-',1,3) = 0)
or not(instr(ORDER_TIME,':',1,1) = 14 and instr(ORDER_TIME,':',1,2) = 17 and
instr(ORDER_TIME,'-',1,3) = 0))as A;
11、继续拖拽左侧组件,进行编辑,保存监控规则编码check_002是否告警。
12、双击新建的组件后,进入编辑界面。
13、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
----插入临时表1监控规则编码check_002是否告警
insert into table TMP_DWD_DATA_CHECK_REPORT_001_${vDay}
select'check_002',
case when B.WARNING_CNT>1 then '1' else '0' end as WARNING_STATUS
from(select SUM(WARNING_CNT) as WARNING_CNT
from(SELECT CUSTOMER_ID,
ORDER_TIME,
COUNT(DISTINCT ORDER_ID) WARNING_CNT
FROM ODS_EBUSI_ORDERS
GROUP BY CUSTOMER_ID,
ORDER_TIME
HAVING COUNT(DISTINCT ORDER_ID) > 1)as A)AS B;
14、继续拖拽左侧组件,进行编辑,保存监控规则编码check_003是否告警。
15、双击新建的组件后,进入编辑界面。
16、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
----插入临时表1监控规则编码check_003是否告警
insert into table TMP_DWD_DATA_CHECK_REPORT_001_${vDay}
select'check_003',
case when A.WARNING_CNT>1 then '1' else '0' end as WARNING_STATUS
from(SELECT count(1) as WARNING_CNT
FROM ODS_EBUSI_CUSTOMERS A
INNER JOIN ODS_EBUSI_DIM_PROVINCE B ON A.PROVINCE_ID = B.PROVINCE_ID
WHERE A.PROVINCE_NAME <> B.PROVINCE_NAME)as A;
17、继续拖拽左侧组件,进行编辑,保存监控规则编码check_004是否告警。
18、双击新建的组件后,进入编辑界面。
19、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
----插入临时表1监控规则编码check_004是否告警
insert into table TMP_DWD_DATA_CHECK_REPORT_001_${vDay}
select'check_004',
case when A.WARNING_CNT>1 then '1' else '0' end as WARNING_STATUS
from(SELECT count(1) as WARNING_CNT
FROM ODS_EBUSI_DISPATCH A
LEFT OUTER JOIN ODS_EBUSI_ORDERS B ON A.ORDER_ID=B.ORDER_ID
WHERE B.ORDER_ID IS NULL)as A;
通过MaxCompute实现数据质量监控-2
20、继续拖拽左侧组件,进行编辑,保存监控规则编码check_005是否告警。
21、双击新建的组件后,进入编辑界面。
22、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
----插入临时表1监控规则编码check_005是否告警
insert into table TMP_DWD_DATA_CHECK_REPORT_001_${vDay}
select 'check_005',
case when A.WARNING_CNT>1 then '1' else '0' end as WARNING_STATUS
from(SELECT count(1) as WARNING_CNT
FROM ODS_EBUSI_CUSTOMERS A
WHERE A.GENDER IS NULL)as A
;
23、继续拖拽左侧组件,进行编辑,保存监控规则编码check_006是否告警。
24、双击新建的组件后,进入编辑界面。
25、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
----插入临时表1监控规则编码check_006是否告警
insert into table TMP_DWD_DATA_CHECK_REPORT_001_${vDay}
select 'check_006',
case when A.WARNING_CNT>1 then '1' else '0' end as WARNING_STATUS
from(SELECT SUBSTR(ORDER_TIME,1,7),
CUSTOMER_ID,
COUNT(1) as WARNING_CNT
FROM ODS_EBUSI_ORDERS A
GROUP BY SUBSTR(ORDER_TIME,1,7),
CUSTOMER_ID
HAVING COUNT(1) > 10)as A
;
26、继续拖拽左侧组件,进行编辑,保存最终的监控报告信息。
27、双击新建的组件后,进入编辑界面。
28、在编辑页面写入执行sql语句,并配置好参数,保存后返回。
----插入目标表监控报告信息
insert overwrite table DWD_DATA_CHECK_REPORT PARTITION(DT)
select A.CHECK_RULE_ID, ----'核查规则编码',
A.CHECK_RULE_NAME, ----'核查规则名称',
A.CHECK_RULE_TYPE_NAME, ----'核查规则类型名称',
A.CHECK_RULE_OWNER, ----'负责人',
A.CHECK_RULE_TABLE, ----'数据表',
concat('${datetime}',' ','${hour}') as WARNING_TIME, ----'告警时间',
concat('监控规则:',A.CHECK_RULE_NAME,',告警内容:',A.CHECK_RULE_DESC,',请登录系统进行核查!') as WARNING_CONTENT, ----'告警内容'
'${vDate}' as DT ----'时间分区'
from ODS_DATA_CHECK_RULE A
inner join TMP_DWD_DATA_CHECK_REPORT_001_${vDay} B on A.CHECK_RULE_ID=B.CHECK_RULE_ID and B.WARNING_STATUS = '1'
;
29、从左侧节点组件中,拖取一个虚节点至右侧空白处,并进行命名。
30、根据上述的顺序,将各个执行空间连接起来。先点击前序节点,在节点上出现“+”号后,按住鼠标不动,拖至后序节点,出现箭头连接后,放开鼠标,即完成连接。
31、所有连接完成后,点击提交。
在提交时选择勾选“忽略输入输出不一致的警告”
配置MaxCompute调度
为了实现我们可周期性的进行数据质量监控,我们可以将程序配置成周期任务。
1、 双击程序开始
2、在调度配置界面,将调度配置成日调度,具体的怕程序时间根据各自需求进行配置。并根据具体的依赖需求,进行上游任务配置。
3、实质上在进行业务流程的配置时,就已经配置了周期调度,如需修改可以在这个位置进行修改
至此,我们可以对数据质量进行周期性的监控。
配置邮件、短信告警
为保证已配置的程序跑数过程中出错,我们可以及时的获取相关信息,对出错的程序进行处理。阿里云在MaxCompute的运维中心中,可配置邮箱、短信告警,对于已配置好的调度程序进行监控,可通过邮箱、短信的方式通知相关负责人。我们可以将已经配置好的调度程序加入到监控报警中。
告警配置方法如下:
进入运维中心模块下,点击左侧报警设置,然后点击右侧的新建报警按钮。
在弹出的配置页面中,填写报警对应的信息:任务名称、报警原因、报警方式、接收人等信息。
完成配置告警信息如下:点击右侧的删除按钮将此条告警删除,亦可以点击修改按钮对此条监控信息进行修改、调整。
负责人的邮箱及短信需提前在用户详情中配置。
如配置的流程在运行的过程中出错\未完成\完成,系统则会通过邮箱、短信的方式进行通知推送。
邮件告警界面:
短信告警界面:
第三章:任务&思考
任务数据集:见附件
任务实体关系:
任务:如上附件是新提供的数据集及实体关系。分析如下场景中可能出现的数据质量问题,并使用MaxCompute技术完成相关场景的数据质量核查:
用户通过业务平台系统进行商品购买,允许用户在同一个订单内购买多种商品,用户每下一次订单就在订单表中增加一条记录,由于网络延迟或系统界面操作有误,可能会在系统内产生多条记录。用户下单后1小时之内,仍未进行付款操作,订单状态变更为取消,由于系统bug可能存在以及付款但是订单状态是取消的相关记录。用户进行付款的同时,可能参加某种抽奖或者优惠活动,减免部分费用。用户支付完成后,生成配送单,结果发现配送员小张和小李分配了同一个订单,而且订单配送商品信息一致,偶尔由于系统原因会出现用户下完单、付完款后没有安排配送的情况。
思考:思考并实现如何实现数据质量邮件、短信告警?
目前我们已实现了程序的调度配置,并对周期性执行的程序调度,增加了邮件、短信告警,此种告警主要是针对程序执行的一种监控,考虑是否可增加数据质量监控的邮件、短信告警,即如果发现数据质量监控规则报错,则进行邮件、短信告警,请思考此种告警是否可通过MaxCompute(DateWorks)来实现,如何实现。