本文介绍使用数据质量API以及配置Spec时的相关限制。
DataQualityScan Spec 限制
Datasets
Datasets最多只能设置一个。
tables只能支持一个,暂时不支持通配符。
filter的配置对应按照WHERE条件指定数据范围。
说明MaxCompute分区表一定要指定filter,否则执行时会失败。
{
"datasets": [
// 最多1个
{
"type": "Table",
"tables": [
// 最多1个
// 不支持通配符
"ods_d_dq_openapi_log"
],
"dataSource": {
"name": "odps_first",
"envType": "Dev"
},
// 这里暂时只支持按照where条件指定的数据范围
"filter": "dt = '$[yyyymmdd-1]'"
}
],
"rules": [
// ...
]
}
Rules
限制1:不使用模板创建的规则,只能支持如下几种固定的
assertion
参数组合。规则
assertion参数配置示例
与固定值比较
{ "assertion": "row_count > 0" }
7天平均值波动
{ "assertion": "change avg last 7 days percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
30天平均值波动
{ "assertion": "change avg last 1 month percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
1天周期波动
{ "assertion": "change 1 day ago percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
7天周期波动
{ "assertion": "change 7 days ago percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
30天周期波动
{ "assertion": "change 1 month ago percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
7天方差波动
{ "assertion": "change var last 7 days percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
30天方差波动
{ "assertion": "change var last 1 month percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
1,7,30天波动检测
{ "assertion": "change 1 day ago and 7 days ago and 1 month ago percent for avg(size)", "warn": "when > 0.1%", "fail": "when > 0.5%" }
智能动态阈值
{ "assertion": "anomaly detection for avg(size)" }
限制2:波动类规则的阈值,只能支持如下写法:
规则阈值要求
写法
上升时告警,fail的阈值要大于warn的阈值,且都大于0
warn: when > 0.1%
fail: when > 0.5%
下降时告警,fail的阈值要小于warn的阈值,且都小于0。
warn: when < -0.1%
fail: when < -0.5%
上升/下降均告警,只能使用not between,而且上下界需要是一对相反数,fail的阈值的上下界绝对值要大于warn的阈值的上下界绝对值,且都不等于0。
warn: when not between -0.1% and 0.1%
fail: when not between -0.5% and 0.5%
DataQualityTemplate Spec 限制
规则模板中的assertion
参数设置,遵循Rules 限制1只能支持固定的几种参数组合。
DataQualityAlertRule 限制
一个DataQualityAlertRule只能监控一个DataQualityScan。
监控同一个DataQualityScan的AlertRule的Condition必须相同。
Condition只支持一种写法,使用
results
的status
属性和results
对应rule
的severity
属性来拼接表达式,且这两个属性要成对出现。results.any { r -> r.status == 'Fail' && r.rule.severity == 'Normal' || r.status == 'Error' && r.rule.severity == 'High' || r.status == 'Warn' && r.rule.severity == 'High' }