相关限制

本文介绍使用数据质量API以及配置Spec时的相关限制。

DataQualityScan Spec 限制

Datasets

  • Datasets最多只能设置一个。

  • tables只能支持一个,暂时不支持通配符。

  • filter的配置对应按照WHERE条件指定数据范围。

    说明

    MaxCompute分区表一定要指定filter,否则执行时会失败。

datasets:
  - type: Table
    tables:
      - ods_d_dq_openapi_log  # 最多1个,不支持通配符
    dataSource:
      name: odps_first
      envType: Dev
    filter: "dt = '$[yyyymmdd-1]'"  # 这里暂时只支持按照where条件指定的数据范围
rules:
  # ...

Rules

波动类规则的阈值,只能支持如下写法:

规则阈值要求

写法

上升时告警,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参数设置,只能支持固定的几种参数组合。

规则

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 day 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)"

DataQualityAlertRule 限制

  • 一个DataQualityAlertRule只能监控一个DataQualityScan。

  • 监控同一个DataQualityScanAlertRuleCondition必须相同。

  • Condition只支持一种写法,使用resultsstatus属性和results对应ruleseverity属性来拼接表达式,且这两个属性要成对出现。

    results.any { r -> 
        r.status == 'Fail' && r.rule.severity == 'Normal' || 
            r.status == 'Error' && r.rule.severity == 'High' || 
            r.status == 'Warn' && r.rule.severity == 'High' 
    }