表结构变更检测规则

更新时间:
复制 MD 格式

您可以使用表结构变更检测规则(Schema Check)检测表结构的变化,包括字段删除、字段新增、字段顺序变更和字段类型变更,并在检测到变化时触发告警。

配置示例

以下示例在表结构发生任意变化时触发warn(橙色告警),在有字段被删除时触发fail(红色告警)。

datasets:
  - type: Table
    tables:
      - tb_d_spec_demo
    dataSource:
      name: odps_first
      envType: Dev
rules:
  - assertion: change for schema
    warn:
      - when any changes
    fail:
      - when column delete

定义表结构变更检测规则

执行表结构变更检测规则时,系统会实时采集表结构并与基准表结构对比,识别发生了哪些变化,再与规则中定义的warn和fail条件进行匹配,得出校验结果。规则包含以下属性:

  • assertion:固定为change for schema,表示表结构变更检测规则。

  • warn:橙色告警的条件列表。满足其中任意一个条件,即触发橙色告警。

  • fail:红色告警的条件列表。满足其中任意一个条件,即触发红色告警。

条件的格式为when <变化类型>,支持的条件如下。

条件

说明

when any changes

表结构发生任意变化,包括字段删除、字段新增、字段顺序变更和字段类型变更。

when column delete

有字段被删除。

when column add

新增了字段。

when column index change

两次采集中都存在的字段之间,相对顺序发生变化。

when column type change

字段的数据类型发生变化。

校验结果按以下优先级判定:

  1. 匹配任意一个fail条件:校验结果为fail,触发红色告警。

  2. 未匹配fail条件,但匹配任意一个warn条件:校验结果为warn,触发橙色告警。

  3. 未匹配任何条件:校验通过。

说明

表结构变更检测规则通过warn和fail条件判定结果,无需配置数值阈值,也无需指定监控字段。

使用系统规则模板

数据质量提供了5个表结构变更检测的系统规则模板,分别对应5种变化场景。使用模板创建的规则,底层统一使用assertion: change for schema,与模板等价的写法如下。更多系统规则模板,请参见规则模板。

模板ID

模板名称

等价写法

SYSTEM:table:schema:any_changes

表结构变更 - 任意变更

assertion: change for schema
fail:
  - when any changes

SYSTEM:table:schema:column_delete

表结构变更 - 字段删除

assertion: change for schema
fail:
  - when column delete

SYSTEM:table:schema:column_add

表结构变更 - 字段新增

assertion: change for schema
fail:
  - when column add

SYSTEM:table:schema:column_index_change

表结构变更 - 字段顺序变更

assertion: change for schema
fail:
  - when column index change

SYSTEM:table:schema:column_type_change

表结构变更 - 字段类型变更

assertion: change for schema
fail:
  - when column type change

例如,使用SYSTEM:table:schema:column_delete模板,在有字段被删除时触发红色告警。模板已内置对应的fail条件,只需指定templateId:

datasets:
  - type: Table
    tables:
      - tb_d_spec_demo
    dataSource:
      name: odps_first
      envType: Dev
rules:
  - templateId: "SYSTEM:table:schema:column_delete"

模板是预设场景的快捷写法。如果需要组合多种变化类型,或同时设置warn和fail条件,请使用assertion: change for schema写法自行定义条件。

组合条件示例

以下示例仅展示rules部分。

示例一:表结构发生任意变化时触发橙色告警,有字段被删除时触发红色告警。

rules:
  - assertion: change for schema
    warn:
      - when any changes
    fail:
      - when column delete

表结构变化

校验结果

无变化

通过

新增字段

橙色告警(匹配warn条件)

删除字段

红色告警(匹配fail条件)

同时删除和新增字段

红色告警(fail条件优先)

示例二:仅监控字段删除和字段类型变更。

rules:
  - assertion: change for schema
    fail:
      - when column delete
      - when column type change

表结构变化

校验结果

新增字段

通过(未匹配任何条件)

删除字段

红色告警

字段类型变更

红色告警

字段顺序变更

通过(未匹配任何条件)

示例三:仅设置warn条件,不设置fail条件。字段类型变更或字段顺序变更时只触发橙色告警,不会触发红色告警。

rules:
  - assertion: change for schema
    warn:
      - when column type change
      - when column index change

检测机制

每次校验时,系统将本次实时采集的表结构(采样值)与基准表结构(基准值)进行对比:

  • 基准值:同一规则最近一次采集到的有效表结构。

  • 采样值:本次校验时实时采集的表结构。

  • 首次检测:没有历史采样值时,系统以本次采集的表结构作为基准值,校验结果为通过。

各类变化的判定方式如下。

变化类型

判定方式

字段删除

字段在基准值中存在,在采样值中不存在。

字段新增

字段在采样值中存在,在基准值中不存在。

字段顺序变更

仅比较基准值和采样值中都存在的字段,这些字段之间的相对顺序发生变化时,判定为字段顺序变更。因字段新增或删除导致其他字段的位置变化,不计为字段顺序变更。

字段类型变更

同一字段在基准值和采样值中的数据类型不同。

说明

无论规则配置了哪些条件,系统都会记录本次检测到的全部变化。未在条件中指定的变化类型不影响校验结果。

查看校验结果

查看规则的校验详情时,表结构变更检测规则在质量采集及比较状态结果区域的展示内容如下:

  • 检测项:显示为表结构。

  • 实测结果:采样值的字段数,以及删除列、新增列、类型变更、顺序变更的数量。

  • 对照参照:基准值的字段数,并标记为Schema快照。

  • 差异:变化的总数。首次检测时显示为首次检测。

单击查看完整表结构对比,可以左右对照查看基准值和采样值的字段列表,发生变化的字段会以不同颜色标记。首次检测时没有基准值,仅展示当前表结构。

支持的数据源

表结构变更检测规则支持以下数据源:MaxCompute、Hologres、EMR Hive、CDH Hive、Lindorm、MySQL、StarRocks、SQL Server、SelectDB。