数据质量保障了企业业务决策的准确性与可靠性,提升了运营效率与降低业务成本。本教程旨在通过从简单到复杂的业务场景,指导您如何系统性地创建数据质量监控,将质量保障融入数据生成流程,为数据保驾护航。
前提条件
已购买数据质量功能。
数据准备
创建一个dataphin_v50_dev项目,用于数据校验及创建质量规则。
已发布用户表(user)、订单表(order1)和订单状态表(order_status_history)。
脚本语句如下,可下载样例数据,使用本地文件输入组件和MaxCompute输出组件将数据同步至Dataphin。
样例数据:用户表.csv、订单表.csv、订单状态表.csv
MaxCompute一键建表语句如下:
订单表
create table IF NOT EXISTS `order1` ( `customer_id` string comment '用户ID', `crt_ord_id` double comment 'order_id', `delivery_address_id` double comment '收货地址', `buyer_id` double comment '买家ID', `gmt_create` string comment '创建时间', `gmt_modified` string comment '修改时间', `order_time` string comment '下单时间', `pay_time` string comment '支付时间', `ship_time` string comment '发货时间', `end_time` string comment '交易完成/交易取消 时间', `total_items_amount` double comment '总商品金额,单价*件数', `discount_amount` double comment '总折扣金额,单位分', `delivery_amount` double comment '运费单位分', `total_amount` double comment '实付总金额单位分', `status` double comment '状态:-1已取消1新建2已支付3已发货4确认发货' ) comment 'order1' lifecycle 3600用户表
create table IF NOT EXISTS `user` ( `user_id` string comment '用户ID', `name` string comment '姓名', `gender` string comment '性别', `age` string comment '年龄', `phone_num` string comment '手机号码' ) comment 'user' lifecycle 3600订单状态表
CREATE TABLE IF NOT EXISTS order_status_history ( id Double NOT NULL COMMENT '自增主键', order_id STRING COMMENT '关联的订单ID(外键,指向订单主表)', `status` STRING COMMENT '订单状态(如created/paid/shipped/cancelled等)', update_time STRING COMMENT '状态变更时间(通常按此字段排序)', operator STRING COMMENT '操作人(可能是系统自动触发,如system,或人工操作,如user:1001)', remark STRING COMMENT '变更备注(例如取消原因,“用户主动取消”)' ) STORED AS ALIORC TBLPROPERTIES ( 'columnar.nested.type' = 'true', 'transactional' = 'true' );
规则强度说明
强规则:当质量规则校验的结果为异常时,系统会报警并阻塞下游任务节点。
弱规则:当质量规则校验的结果为异常时,系统会报警但不阻塞下游任务节点。
质量规则配置流程
建议先创建调度配置,告警配置和异常归档表,便于顺利创建质量规则。、和的创建方式与空值质量规则一致,请参见。
基础场景配置示例
空值校验
场景描述:在用户表中,手机号字段是联系用户的关键标识,不允许为空。创建空值校验质量规则,对用户表中的手机号码为空的字段进行检测,识别手机号字段值为空的异常数据。
创建质量规则
在Dataphin首页的顶部菜单栏,选择治理 > 数据质量。
单击左侧导航栏的质量规则,在Dataphin表页签,单击添加监控对象按钮,进入添加监控对象对话框。
在添加监控对象对话框中,配置参数后,单击配置质量规则。
参数
描述
板块/项目
选择项目dataphin_v50_dev。
数据表
选择user。
质量负责人
默认SuperAdmin。
质量分权重
默认1。
在质量规则详情页面,单击新建质量规则按钮,选择自定义配置,在新建质量规则对话框中,配置质量规则。
参数
描述
基本信息
规则名称
输入手机号不为空。
规则强度
选择强规则。
描述
可以填写对质量规则的简单描述。例如:检测user表手机号为空,则校验不通过。
配置方式
选择模板创建。
规则模板
选择完整性/字段空值校验。
规则类型
根据规则模板默认填充。
模板配置
参数配置
根据规则模板默认展示,无需填写。
规则配置
校验字段
选择phone_num。
数据过滤
输入
phone_num is null。校验配置
规则校验
选择异常率<=0,只要有一条异常数据,则校验不通过。
归档配置
异常归档
开启异常归档。
归档模式
选择归档完整记录。
归档位置
选择自定义异常归档表(dataphin_v50_dev.user1_exception_data)。
调度属性配置
调度方式
选择定时调度。
质量分配置
计分方式
默认质量校验状态。
质量分权重
默认为1。
单击确定,完成空值校验质量规则创建。
在规则配置列表,选择phone_num对象,单击操作列下的更多,选择试跑,在试跑对话框中,选择自定义校验范围,单击确定。
试跑结束后,因user表中有手机号码为空的数据,故试跑不通过。

异常数据都记录在dataphin_v50_dev.user1_exception_data异常归档表中,可在研发 > 数据研发 > 计算任务,创建MAX_COMPUTE_SQL任务查看异常数据。
select dataphin_quality_rule_id,user_id,phone_num from dataphin_v50_dev.user1_exception_data where dataphin_quality_validate_date = '20251120';
调度配置
在调度配置页签,单击新建调度按钮,进入新建调度对话框。
在新建调度对话框中,配置参数。
参数
描述
调度配置
调度名称
输入定时调度。
调度类型
选择定时调度。
调度日期
选择日6:00。
调度条件
打开调度条件,选择业务日期在普通日历的月份属于1月到12月。如图:

校验范围
校验范围表达式
选择full table。
单击确定,完成调度创建。
告警配置
在告警配置页签,单击新建告警配置按钮,进入新建告警配置对话框。
在新建告警配置对话框中,配置参数。
参数
描述
覆盖范围
选择所有强规则。
告警配置名称
输入所有强规则告警。
告警接收人
选择质量负责人,告警方式选择电话、邮件、短信、钉钉、飞书、企业微信。
单击确定,完成告警配置的创建。
异常归档表
在异常归档表页签,单击添加异常归档表按钮,进入添加异常归档表对话框。
在添加异常归档表对话框中,选择新建表添加方式,创建dataphin_v50_dev.user1_exception_data异常归档表。
单击确定,完成异常归档表创建。
唯一值校验
场景描述:订单号作为订单表的唯一标识符,必须保证全局唯一。创建唯一值校验质量规则,对订单表中订单ID不唯一的字段进行检测,识别订单ID字段值不唯一的异常数据。
创建质量规则
在Dataphin首页的顶部菜单栏,选择治理 > 数据质量。
单击左侧导航栏的质量规则,在Dataphin表页签,单击添加监控对象按钮,进入添加监控对象对话框。
在添加监控对象对话框中,配置参数后,单击配置质量规则。
参数
描述
板块/项目
选择项目/dataphin_v50_dev。
数据表
选择order1。
质量负责人
默认SuperAdmin。
质量分权重
默认1。
在质量规则详情页面,单击新建质量规则按钮,选择自定义配置,在新建质量规则对话框中,配置质量规则。
参数
描述
基本信息
规则名称
输入订单号唯一值校验。
规则强度
选择强规则。
描述
可以填写对质量规则的简单描述。例如:检测order1表订单号不唯一,则校验不通过。
配置方式
选择模板创建。
规则模板
选择唯一性/字段唯一性校验。
规则类型
根据规则模板默认填充。
模板配置
参数配置
根据规则模板默认展示,无需填写。
规则配置
校验字段
选择crt_ord_id。
数据过滤
关闭数据过滤。
校验配置
规则校验
选择异常率<=0,只要有一条异常数据,则校验不通过。
归档配置
异常归档
开启异常归档。
归档模式
选择归档完整记录。
归档位置
选择自定义异常归档表(dataphin_v50_dev.order1_exception_data)。
调度属性配置
调度方式
选择定时调度。
质量分配置
计分方式
默认质量校验状态。
质量分权重
默认为1。
单击确定,完成唯一值校验质量规则创建。
在规则配置列表,选择crt_ord_id对象,单击操作列下的更多,选择试跑,在试跑对话框中,选择自定义校验范围,单击确定。
试跑结束后,因order1表中有手机号码为空的数据,故试跑不通过。

异常数据都记录在dataphin_v50_dev.order1_exception_data异常归档表中,可在研发 > 数据研发 > 计算任务,创建MAX_COMPUTE_SQL任务查看异常数据。
select crt_ord_id, COUNT(1) as cnt from dataphin_v50_dev.order1_exception_data where dataphin_quality_validate_date = '20251120' GROUP BY crt_ord_id HAVING COUNT(1) > 1;
稍复杂场景配置示例
两表字段值一致性校验
场景描述:订单表中的用户ID必须是用户表中存在的有效ID。如果订单表引用了不存在的客户ID,则该条数据为脏数据。创建两表字段值一致性校验质量规则,对订单表中用户ID在用户表中不存在的字段进行检测,识别用户ID字段值不存在的异常数据。
创建质量规则
在Dataphin首页的顶部菜单栏,选择治理 > 数据质量。
单击左侧导航栏的质量规则,在Dataphin表页签,单击添加监控对象按钮,进入添加监控对象对话框。
在添加监控对象对话框中,配置参数后,单击配置质量规则。
参数
描述
板块/项目
选择项目dataphin_v50_dev。
数据表
选择order1。
质量负责人
默认SuperAdmin。
质量分权重
默认1。
在质量规则详情页面,单击新建质量规则按钮,选择自定义配置,在新建质量规则对话框中,配置质量规则。
参数
描述
基本信息
规则名称
输入用户ID一致性校验。
规则强度
选择强规则。
描述
可以填写对质量规则的简单描述。例如:检测到order1表用户ID在user表不存在,则校验不通过。
配置方式
选择模板创建。
规则模板
选择一致性/两表字段值一致性校验。
规则类型
根据规则模板默认填充。
模板配置
参数配置
根据规则模板默认展示,无需填写。
规则配置
校验字段
选择customer_id。
选择比较表
选择表dataphin_v50_dev.user,字段选择user_id。
关联方式
选择left join。
关联表达式
输入
T1.customer_id=T2.user_id。数据过滤
输入
T2.user_id is null。校验配置
规则校验
选择异常率<=0,只要有一条异常数据,则校验不通过。
归档配置
异常归档
开启异常归档。
归档模式
选择归档完整记录。
归档位置
选择自定义异常归档表(dataphin_v50_dev.order2_exception_data)。
调度属性配置
调度方式
选择定时调度。
质量分配置
计分方式
默认质量校验状态。
质量分权重
默认为1。
单击确定,完成空值校验质量规则创建。
在规则配置列表,选择customer_id对象,单击操作列下的更多,选择试跑,在试跑对话框中,选择自定义校验范围,单击确定。
试跑结束后,因检测到order1表中的用户ID在user表中不存在的数据,故试跑不通过。

异常数据都记录在dataphin_v50_dev.order2_exception_data异常归档表中,可在研发 > 数据研发 > 计算任务,创建MAX_COMPUTE_SQL任务查看异常数据。
select dataphin_quality_rule_id,customer_id,crt_ord_id from dataphin_v50_dev.order2_exception_data where dataphin_quality_validate_date = '20251120'
字段值域校验
场景描述:用户表中的年龄需在合理的范围内,如:20岁~99岁。超出此范围可能是录入错误、测试数据等,属于异常数据。创建字段值域校验质量规则,对用户表中年龄不在20~99范围的数据进行检测,识别年龄字段值不在合理范围的异常数据。
创建质量规则
在Dataphin首页的顶部菜单栏,选择治理 > 数据质量。
单击左侧导航栏的质量规则,在Dataphin表页签,单击添加监控对象按钮,进入添加监控对象对话框。
在添加监控对象对话框中,配置参数后,单击配置质量规则。
参数
描述
板块/项目
选择项目dataphin_v50_dev。
数据表
选择user。
质量负责人
默认SuperAdmin。
质量分权重
默认1。
在质量规则详情页面,单击新建质量规则按钮,选择自定义配置,在新建质量规则对话框中,配置质量规则。
参数
描述
基本信息
规则名称
输入年龄值域校验。
规则强度
选择强规则。
描述
可以填写对质量规则的简单描述。例如:检测到user表中年龄不在20岁到99岁之间,则校验不通过。
配置方式
选择模板创建。
规则模板
选择有效性/字段值域校验。
规则类型
根据规则模板默认填充。
模板配置
参数配置
根据规则模板默认展示,无需填写。
规则配置
校验字段
选择age。
值域类型
选择文本。
值域范围
区间选择>=20,<=99。
数据过滤
关闭数据过滤。
校验配置
规则校验
选择异常率<=0,只要有一条异常数据,则校验不通过。
归档配置
异常归档
开启异常归档。
归档模式
选择归档完整记录。
归档位置
选择自定义异常归档表(dataphin_v50_dev.user2_exception_data)。
调度属性配置
调度方式
选择定时调度。
质量分配置
计分方式
默认质量校验状态。
质量分权重
默认为1。
单击确定,完成空值校验质量规则创建。
在规则配置列表,选择age对象,单击操作列下的更多,选择试跑,在试跑对话框中,选择自定义校验范围,单击确定。
试跑结束后,因检测到user表中年龄不在20岁到99岁之间,故试跑不通过。

异常数据都记录在dataphin_v50_dev.user2_exception_data异常归档表中,可在研发 > 数据研发 > 计算任务,创建MAX_COMPUTE_SQL任务查看异常数据。
select dataphin_quality_rule_task_id ,user_id ,age from dataphin_v50_dev.user2_exception_data where dataphin_quality_validate_date = '20251121'
复杂场景配置示例
场景描述:发货表的订单支付状态流转有效性校验,当符合下方其中一个规则,则质量校验不会通过。
订单状态不能从已发货直接变为已取消。
订单必须先已支付才能变为已发货。
已退款的订单必须先有支付记录。
已签收的订单必须先有发货记录。
创建质量规则
在Dataphin首页的顶部菜单栏,选择治理 > 数据质量。
单击左侧导航栏的质量规则,在Dataphin表页签,单击添加监控对象按钮,进入添加监控对象对话框。
在添加监控对象对话框中,配置参数后,单击配置质量规则。
参数
描述
板块/项目
选择项目dataphin_v50_dev。
数据表
选择order_status_history。
质量负责人
默认SuperAdmin。
质量分权重
默认1。
在质量规则详情页面,单击新建质量规则按钮,选择自定义配置,在新建质量规则对话框中,配置质量规则。
参数
描述
基本信息
规则名称
输入电商平台订单支付状态流转有效性校验。
规则强度
选择强规则。
描述
可以填写对质量规则的简单描述。例如:
订单状态不能从已取消直接变为已发货。
订单必须先已支付才能变为已发货。
已退款的订单必须先有支付记录。
已签收的订单必须先有发货记录。
配置方式
选择模板创建。
规则模板
选择自定义/自定义数据详情校验。
规则类型
选择有效性。
模板配置
参数配置
根据规则模板默认展示,无需填写。
规则配置
总行数SQL
输入如下SQL。
select count(*) from order_status_history;异常行数SQL/异常数据SQL
输入SQL,详见表格下方SQL语句。
校验配置
规则校验
选择异常率<=0,只要有一条异常数据,则校验不通过。
归档配置
异常归档
开启异常归档。
归档模式
选择归档完整记录。
归档位置
选择自定义异常归档表(dataphin_v50_dev.order_status_history_exception_data)。
调度属性配置
调度方式
选择定时调度。
质量分配置
计分方式
默认质量校验状态。
质量分权重
默认为1。
异常行数SQL
SELECT count(*) FROM ( SELECT id, order_id, status AS current_status, update_time AS current_update_time, operator AS current_operator, remark AS current_remark, -- 获取前一行数据 LAG(id) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_id, LAG(status) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_status, LAG(update_time) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_update_time, LAG(operator) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_operator, LAG(remark) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_remark FROM order_status_history) temp_table WHERE (previous_status = 'cancelled' AND current_status = 'shipped') OR (previous_status <> 'paid' AND current_status = 'shipped') OR (previous_status = 'refunded' AND current_status NOT IN ('created', 'cancelled')) OR (previous_status = 'delivered' AND current_status = 'shipped')异常数据SQL
SELECT previous_id as id, order_id, previous_status AS status, previous_update_time AS update_time, previous_operator AS operator, previous_remark AS remark FROM ( SELECT id, order_id, status AS current_status, update_time AS current_update_time, operator AS current_operator, remark AS current_remark, -- 获取前一行数据 LAG(id) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_id, LAG(status) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_status, LAG(update_time) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_update_time, LAG(operator) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_operator, LAG(remark) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_remark FROM order_status_history) temp_table WHERE (previous_status = 'cancelled' AND current_status = 'shipped') OR (previous_status <> 'paid' AND current_status = 'shipped') OR (previous_status = 'refunded' AND current_status NOT IN ('created', 'cancelled')) OR (previous_status = 'delivered' AND current_status = 'shipped') UNION ALL SELECT id AS id, order_id, current_status AS status, current_update_time AS update_time, current_operator AS operator, current_remark AS remark FROM ( SELECT id, order_id, status AS current_status, update_time AS current_update_time, operator AS current_operator, remark AS current_remark, -- 获取前一行数据 LAG(id) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_id, LAG(status) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_status, LAG(update_time) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_update_time, LAG(operator) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_operator, LAG(remark) OVER (PARTITION BY order_id ORDER BY cast(update_time as TIMESTAMP )) AS previous_remark FROM order_status_history) temp_table WHERE (previous_status = 'cancelled' AND current_status = 'shipped') OR (previous_status <> 'paid' AND current_status = 'shipped') OR (previous_status = 'refunded' AND current_status NOT IN ('created', 'cancelled')) OR (previous_status = 'delivered' AND current_status = 'shipped') ORDER BY order_id, update_time;单击确定,完成空值校验质量规则创建。
在规则配置列表,选择dataphin_v50_dev.order_status_history对象,单击操作列下的更多,选择试跑,在试跑对话框中,选择自定义校验范围,单击确定。
试跑结束后,因检测到发货表中有订单流转状态存在异常,故试跑不通过。

异常数据都记录在dataphin_v50_dev.order_status_history_exception_data异常归档表中,可在研发 > 数据研发 > 计算任务,创建MAX_COMPUTE_SQL任务查看异常数据。
select * from dataphin_v50_dev.order_status_history_exception_data where dataphin_quality_validate_date = '20251121'





