质检方案是质检执行的最小单元,可将规则库中任意规则添加进同一个质检方案中进行集中执行。质检方案支持设置手动实时执行,也支持定期计划执行,每个质检方案都可以生成独立的质检结果和分析报告,并内置了抽样质检、质检预警等众多质检策略。
在数据质量模块的左树点击对应质量模型的【质检方案】节点进入质检方案管理页面,点击【新建】进入创建流程
创建质检方案主要分为6个步骤,填写方案基本信息→添加规则→运行参数配置→抽样设置→预警设置→完成。
该流程中我们需要完成质检方案标题、描述等基本信息的填写。模型是否启用Spark引擎所看到的基本信息参数会存在部分差异,模型未启用Spark引擎时,看到的参数内容如下:
方案标题:方案标题,同一模型下方案标题具有唯一性
方案描述:用于描述方案内容的文本信息
整改流程:可设置数据整改流程,但需要预先在"工作流"模块中定义。设置整改流程后,后续才能在【数据整改】模块发起数据整改。
自动发起整改:勾选后每次执行完成质检后自动发起数据整改流程
结果表历史保留期数:当模型设置了数据期字段,执行质检方案时会按数据期过滤数据进行质检并将质检结果存储。当结果表存储的数据期数超出“结果表历史保留期数”的值时,会在执行质检方案时自动清理历史结果数据,清理逻辑为:按执行时间排序,优先清理执行时间早的,当执行时间相同时再按数据期排序,清理数据期小的,当前执行的N期不参与清理,但会参与清理期数统计。(如:历史结果表中有2007/2008/2009,保留期数为2,重新选择2010期执行质检,质检后结果表仅存储2010/2009期的质检结果数据)
默认值为1,默认值配置路径为资源管理器/root/products/edq/schemeconfig.properties,参数为result_bbq_num=1
仅保留错误数据:是否删除质检结果表中正确数据的相关信息,只保留错误数据的质检信息,默认全部保留。勾选可提升质检效率。
记录数据修复状态:勾选后,智能修复或手动整改错误数据后,重新执行质检方案时可记录数据的修复状态,在【质量监控】和【数据整改】中“已修复合计”会有条数记录。
模型启用Spark引擎后,新建质检方案时看到的基本信息如下:
结果表历史保留期数:参数功能基本同未启用Spark模型引擎的模型一致,但当模型启用Spark引擎后,质检结果表的存储方式是一期单独存储在一张表上,所以结果清理时也是按表清理。
仅保留错误数据:是否删除质检结果表中正确数据的相关信息,只保留错误数据的质检信息,默认全部保留。
单规则错误数据保留:填写自然数,表示质检结果表每个规则大约保留错误数据的条数,其中0表示不保留,为空时保留所有,最大值可设置1000万,超过1000万时默认转成1000万。同时受Spark分布式计算引擎的影响,无法准确的控制所有计算节点的错误保留量总和为设定值,最大误差范围为10000*执行器个数的错误数据
默认值配置路径为资源管理器/root/products/edq/schemeconfig.properties,参数为result_per_rule_num=10000
记录数据修复状态:当方案配置仅保留部分错误数据后,每次方案执行保留的错误数据具有随机性,方案不支持记录数据修复状态功能,该参数置灰不允许勾选。
点击添加按钮可从规则库中添加指定规则到质检方案中,执行质检方案时作为质检规则参与数据质检。
注:1.同一规则不允许被重复添加;2.添加到质检方案的规则不允许删除及修改规则代号
可在这一步配置质检方案对对应的调度任务,定义调度任务的启停、执行周期等配置
启用计划任务:勾选则启用方案调度计划任务,默认不启用
数据期类型:模型设置数据期后执行质检方案需要选择一个数据期才能执行。数据期:选择一个固定数据期作为调度方案的执行数据期;最佳数据期:根据算法从模型数据期维表中取离当前服务器时间最近且不大于的一期数据期;数据期表达式:根据表达式内容取对应数据期
同步上期例外:勾选则获取上期质检结果表中例外数据,并自动的将本期相同数据设置为例外数据。(方案配置了仅保留部分错误数据时,每期保留错误数据具有随机性,同步例外功能不生效)
执行周期:方案调度的执行周期,可设置按年、按月、按周、按日、按时执行
TIPS:【最佳数据期】
如数据期类型为“年”,填写格式说明:年,如2022表示2022年。最佳报表期:以每年的9月1日为界,9月1日之前,最佳报表期为上年,从9月1日开始,最佳报表期为本年。如用表达式,则为:str(if(month(today())>= 9,year(today()),year(today())-1))
如数据期类型为“半年”,填写格式说明:年+01或02,如202201表示2022年上半年。最佳报表期:6月以前的最佳报表期是上年的下半年,六月开始到11月30日的最佳报表期是本年上半月,12月份的最佳报表期是本年下半年。如用表达式,则为:if(month(today())<6,str(year(today())-1)^'02',if(month(today())<=11,str(year(today()))^'01',str(year(today()))^'02'))
如数据期类型为“季”,填写格式说明:年+季度,如202202 表示2022年二季度。最佳报表期:1.2两月的最佳报表期是上年第四季度,3,4,5三个月的最佳报表期是本年第一季度,6,7,8三个月的最佳报表期是本年第二季度,9,10,11的最佳报表期是本年第三季度,12月的最佳报表期是本年第四季度。如用表达式,则为:if(month(today())<=2,str(year(today())-1)^'04',if(month(today())<=5,str(year(today()))^'01',if(month(today())<=8,str(year(today()))^'02',if(month(today())<=11,str(year(today()))^'03',str(year(today()))^'04'))))
如数据期类型为“月”,填写格式说明:年月,如202206 表示2022年6月。最佳报表期:以每个月的21号为界,每月21号之前最佳报表期为上月,从21号开始,最佳报表期为本月。如用表达式,则为:if(day(today())>=21,str(year(today()))^format('%2d',month(today())),if(month(today())=1,str(year(today())-1)^'12',str(year(today()))^format('%2d',month(today())-1)))
如数据期类型为“半月”,填写格式说明:年+月+01或02,如20220601表示2022年6月上半月。最佳报表期:以每月的16号为界,16号之前最佳报表期为上月的下半月,从16号开始,最佳报表期为本月的上半月。如用表达式,则为:if(day(today())>=16,str(year(today()))^format('%2d',month(today()))^'01',if(month(today())=1,str(year(today())-1)^'1202',str(year(today()))^format('%2d',month(today())-1)^'02'))
如数据期类型为“旬”,填写格式说明:年+月+01或02或03,如20220602表示2022年6月中旬。最佳报表期:取当天所在旬的上一期为最佳报表期。1-10日取上月的下旬为最佳报表期,11-20日取本月的上旬为最佳报表期,21日-月末取本月的中旬为最佳报表期。如用表达式,则为:if(day(today())<=10,if(month(today())=1,str(year(today())-1)^'1203',str(year(today()))^format('%2d',month(today())-1)^'03'),if(day(today())<=20,str(year(today()))^format('%2d',month(today()))^'01',str(year(today()))^format('%2d',month(today()))^'02'))
如数据期类型为“日”,填写格式说明:年+月+日,如20220628表示2022年6月28日。最佳报表期:每天的17:00之前,最佳报表期是上一天,从17:00开始,最佳报表期就为今天。如用表达式,则为:if(asint(left(now(),2))>=17,str(year(today()))^format('%2d',month(today()))^format('%2d',day(today())),if(day(today())<>1,str(year(today()))^format('%2d',month(today()))^format('%2d',day(today())-1),if(OR(month(today())=2,month(today())=4,month(today())=6,month(today())=9,month(today())=11),str(year(today()))^format('%2d',month(today())-1)^'31',if(OR(month(today())=5,month(today())=7,month(today())=8,month(today())=10,month(today())=12),str(year(today()))^format('%2d',month(today())-1)^'30',if(month(today())=1,str(year(today())-1)^'1231',if(OR(MOD(year(today()),400)=0,AND(MOD(year(today()),4)=0,MOD(year(today()),100)<>0)),str(year(today()))^'0229',str(year(today()))^'0228'))))))
如数据期类型为“自定义”,填写格式说明:要求自定义的脚本是8位 (可以是超过或者少于8位)实际情况匹配例如20220629152119 表示年月日 时分秒。最佳报表期以自定义报表期中定义的为准。
数据质检在实际项目应用场景中存在为了快速、随机的检查数据质量情况,需要支持对质检数据进行抽样质检,为满足需求现质检方案支持随机抽样、分层抽样两种抽样质检的方式。
抽样方式:单选框参数,支持选择随机抽样及分层抽样。
随机抽样:从总数据量中随机抽取指定条数或指定百分比的数据参与质检。
分层抽样:从总数据量中按分层依据字段的层级随机抽取指定条数或指定百分比的数据参与质检。
主题表:方案中可添加多条规则,不同规则可能涉及质检不同主题表的数据,抽样质检时需要选择指定主题表的数据进行抽样质检。
分层依据:仅当抽样方式选择分层抽样时才联动出现。参数为下拉框参数,下拉框展示所有绑定了维表的维度字段,并在对应维度字段下展示维表的层级关系,选择指定层级后,执行质检方案时会抽取指定层级及其所有下级节点维度的数据进行质检。
例如:分层依据选择省,样本数选择100,则抽取每个省级行政区下对应市、县数据总和为100条。
样本量:支持选择样本数、样本占比。样本数是固定数值,不满足则取全部数据;样本占比是半分比取值,随机抽样时基于所有质检数据取百分比的数据,分层抽样时基于每个分层取百分比的数据进行质检。
示例:
质检结果表:XXB_DAY_GUID、XXB_MY_1W
分层依据:UPID中的”省”级
样本量:分层抽10条,随机抽10%
执行质检方案查看质量监控,质检数据会按配置的数据进行抽样。
系统支持对质检结果进行预警,可实现执行质检时,若数据质量评分低于某个分数则短信或邮箱通知。
这里,我们要实现数据质量评分低于60分时短信通知相关人员,新建质检方案,在【预警设置】中新建,具体设置如下:
预警等级:系统内置3个预警等级,用于区别不同程度的预警
预警分数段:设置对应预警等级下数值区间(闭区间),如[0,60]则表示当质检方案所得绩效分在0到60之间时(包含0和60)会发送预警通知,如果绩效分高于60则不发送预警通知
通知消息:是否启用消息通知,默认禁用
通知方式:目前支持的通知方式有邮件、企业微信、钉钉、短信,勾选不同的通知方式会联动展示出多个配置区域,支持同时使用多种方式发送通知。具体配置方法参考其他类型下《消息推送》操作手册文档
注:发送企业微信、钉钉、邮件及短信之前需要先配置相关信息,邮件配置见《发件邮件配置》,短信配置见《手机短信服务商配置》、钉钉配置见《钉钉应用配置》、企业微信见《企业微信应用配置》。
示例:设置一个1级预警,当质检方案绩效得分低于60分时,以邮件的形式发送给指定用户。
首先前往【系统设置】-【企业消息集成】-【邮箱配置】页面确认发件人邮箱配置正确。
然后新建方案时新建一个预警设置,从机构用户中添加具体用户,可自动获取用户绑定的邮件信息。
当质检方案绩效所得分处于预警区间时,会自动发送消息通知到收件人邮箱
创建好质检方案后,接下来就是执行质检方案得到质检结果。这里我们来手动执行刚新建的质检方案。
在质检方案列表中找到刚新建的质检方案,点击 “执行”,在弹出的对话框中选择数据期、数据级次,设置是否同步上期例外,然后点击【确定】开始执行。
数据期:选择指定数据期进行质检,执行时会根据绑定数据期字段进行过滤,仅抽取满足的数据期次进行执行,支持选择多期。
数据级次:选择指定数据级次进行质检,执行时会根据绑定数据级次字段进行过滤,仅抽取满足的数据级次进行执行,默认选择所有级次,可以选择多个指定级次。
检查表:一个质检方案下可能存在多个技术规则,多个技术规则可能来至不同检查表,这里可以选择部分检查进行质检。
质检方案执行时会实时打印执行日志。
执行结束后,点击方案名称或者日志,可查看方案执行日志。
进入方案执行日志列表标签页后,可再选择某行执行记录查看其执行的详情日志。
质检方案成功执行完成后,就可以去质量监控页面查看质检结果。
6.1.同步上期例外
当质量模型设置了数据期,检查表未设置数据期字段时,按模型数据期次执行质检方案,可以将上一期执行质检方案时添加的例外同步到本期。
场景演示:
质量模型配置数据期。
添加检查表仅配置关键字字段不配置数据期字段。
选择该检查表新建规则和方案,执行方案先选择2026年1月这一期执行。
将质检结果中2条错误数据的1条数据添加为例外数据。
重新执行方案,数据期选择2026年2月这一期,并勾选“同步”上期例外按钮,再查看质检结果上一期的例外信息被同步带入本期执行结果里了。
注意1:如果质检方案配置了单规则错误数据保留量,则会导致质检错误数据保留不全,从而导致同步上期例外功能失效。
质检结果表用于存储质检后的结果数据,每个质检方案可能包含多个质检技术规则,不同规则质检的可能是多个不同的检查表,每个检查表都会对应一张质检结果表。
同时模型是否启用Spark引擎对于质检结果表的存储方式有一点差异性。
本文将主要介绍如何管理质检结果表。
查看质检结果表:
进入【质检方案】模块,点击方案操作栏中的【...】,选择【质检结果表】,打开到质检结果表列表页面。不论模型是否启用Spark引擎查看质检结果表的功能入口都不变。
模型未启用Spark引擎
模型未启用Spark引擎,质检结果表主要分为主数据库表、历史数据库表、质检结果主题表。其中质检结果主题表同时映射主数据库表及历史数据库表,即主数据库表和历史数据库表的表结构将和质检主题表同步保持一致。
方案质检后结果数据的存储逻辑是,最新执行的那期质检结果存储在主数据库表,历史时间执行的质检结果存储在历史数据库表。当同时选择N期执行时取N期中数据期最大一期结果数据存储在主数据库表。如此存储的目的是,最新一期质检结果的使用频率最高,提升最新一期质检结果的查看、分析效率。
此时进入到质检结果表标签页后,可以清楚的看到页面分主题表显示了其质检结果表的相关信息。
点击数据库表名,可查看其数据。
点击质检结果主题表名,可查看其表结构
质检结果表中会记录每一条参与检查的数据的通过状态。本例中,字段KEY_GUID_存储的是被检查主题表的主键字段值(这里被检查主题表的主键字段是GUID_字段),字段“RL_NULL_0”,存储的是NULL_0这条规则的通过状态。其中,0表示错误数据,且处于未处理状态;1表示例外数据;2表示已修复;3表示正确数据;9表示该数据未参与该规则的质检。
模型启用Spark引擎:
模型启用Spark引擎,质检结果表主要分为质检结果表期表、质检结果主题表。其中质检结果主题表同时映射所有期质检结果表,即所有期质检结果表的表结构将和质检主题表同步保持一致。
方案质检后结果数据的存储逻辑是,选择任意数据期执行质检方案,一期的质检结果数据将单独存储在一张数据库表上。如此存储的目的是,在大数据质检场景下,提升各期质检结果的查看、分析效率,控制单张质检结果表的大小保障数据质量模块功能的稳定性。
此时进入到质检结果表标签页后,同样可以清楚的看到页面分主题表显示了其质检结果表的相关信息。同时在页面右上方存在一个数据期下拉框展示,选择指定数据期后,列表展示对应数据期的质检结果表库表。
数据期下拉框选择非叶子节点可查看该节点下所有期的质检结果表库表。
7.1.服务接口
模型未启用Spark引擎
平台提供了质检结果表的数据查询接口,供第三方系统调用。在质检结果表列表界面,点击【服务接口】,可查看接口相关信息。
模型启用Spark引擎
模型启用Spark引擎后,各期质检结果表会分库表存储,选择指定数据期查看服务接口时,接口地址自动带上数据期参数。
请先登录